feat: Add description (#2237)

* Added dto, logic to insert description and web implementation

* create text field and update on remote database

* Update description and save changes

* styling

* fix web test

* fix server test

* preserve description on metadata extraction job run

* handle exif info is null situation

* pr feedback

* format openapi spec

* update createAssetDto

* refactor logic to service

* move files

* only owner can update description

* Render description correctly in shared album

* Render description correctly in shared link

* disable description edit for not owner of asset on mobile

* localization and clean up

* fix test

* Uses providers for description text (#2244)

* uses providers for description text

* comments

* fixes initial data setting

* fixes notifier

---------

Co-authored-by: martyfuhry <martyfuhry@gmail.com>
This commit is contained in:
Alex
2023-04-13 10:22:06 -05:00
committed by GitHub
parent 561b208508
commit a9859bc029
27 changed files with 843 additions and 178 deletions

View File

@@ -1,6 +1,6 @@
import { SearchPropertiesDto } from './dto/search-properties.dto';
import { CuratedLocationsResponseDto } from './response-dto/curated-locations-response.dto';
import { AssetEntity, AssetType } from '@app/infra/entities';
import { AssetEntity, AssetType, ExifEntity } from '@app/infra/entities';
import { Inject, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm/repository/Repository';
@@ -55,6 +55,7 @@ export class AssetRepository implements IAssetRepository {
private assetRepository: Repository<AssetEntity>,
@Inject(ITagRepository) private _tagRepository: ITagRepository,
@InjectRepository(ExifEntity) private exifRepository: Repository<ExifEntity>,
) {}
async getAllVideos(): Promise<AssetEntity[]> {
@@ -268,6 +269,17 @@ export class AssetRepository implements IAssetRepository {
asset.tags = tags;
}
if (asset.exifInfo != null) {
asset.exifInfo.description = dto.description || '';
await this.exifRepository.save(asset.exifInfo);
} else {
const exifInfo = new ExifEntity();
exifInfo.description = dto.description || '';
exifInfo.asset = asset;
await this.exifRepository.save(exifInfo);
asset.exifInfo = exifInfo;
}
return await this.assetRepository.save(asset);
}

View File

@@ -2,7 +2,7 @@ import { Module } from '@nestjs/common';
import { AssetService } from './asset.service';
import { AssetController } from './asset.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AssetEntity } from '@app/infra/entities';
import { AssetEntity, ExifEntity } from '@app/infra/entities';
import { AssetRepository, IAssetRepository } from './asset-repository';
import { DownloadModule } from '../../modules/download/download.module';
import { TagModule } from '../tag/tag.module';
@@ -16,7 +16,7 @@ const ASSET_REPOSITORY_PROVIDER = {
@Module({
imports: [
//
TypeOrmModule.forFeature([AssetEntity]),
TypeOrmModule.forFeature([AssetEntity, ExifEntity]),
DownloadModule,
TagModule,
AlbumModule,

View File

@@ -25,4 +25,8 @@ export class UpdateAssetDto {
],
})
tagIds?: string[];
@IsOptional()
@IsString()
description?: string;
}

View File

@@ -223,7 +223,6 @@ export class MetadataExtractionProcessor {
const newExif = new ExifEntity();
newExif.assetId = asset.id;
newExif.description = '';
newExif.fileSizeInByte = data.format.size || null;
newExif.dateTimeOriginal = fileCreatedAt ? new Date(fileCreatedAt) : null;
newExif.modifyDate = null;