X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Factor%2Factor-image.ts;h=f2b3b2f4b33672052c05658d138e101526d14768;hb=1cc9774668827c1255e4cd0775cb781c7f73051c;hp=8edff5ab4178135bee07930429f8bbc55b21072d;hpb=6b5f72beda96d8b7e4d6329c4001827334de27dd;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/actor/actor-image.ts b/server/models/actor/actor-image.ts index 8edff5ab4..f2b3b2f4b 100644 --- a/server/models/actor/actor-image.ts +++ b/server/models/actor/actor-image.ts @@ -1,15 +1,29 @@ import { remove } from 'fs-extra' import { join } from 'path' -import { AfterDestroy, AllowNull, Column, CreatedAt, Default, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' -import { MActorImageFormattable } from '@server/types/models' +import { + AfterDestroy, + AllowNull, + BelongsTo, + Column, + CreatedAt, + Default, + ForeignKey, + Is, + Model, + Table, + UpdatedAt +} from 'sequelize-typescript' +import { MActorImage, MActorImageFormattable } from '@server/types/models' +import { getLowercaseExtension } from '@shared/core-utils' +import { ActivityIconObject, ActorImageType } from '@shared/models' import { AttributesOnly } from '@shared/typescript-utils' -import { ActorImageType } from '@shared/models' import { ActorImage } from '../../../shared/models/actors/actor-image.model' import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc' import { logger } from '../../helpers/logger' import { CONFIG } from '../../initializers/config' -import { LAZY_STATIC_PATHS } from '../../initializers/constants' +import { LAZY_STATIC_PATHS, MIMETYPES, WEBSERVER } from '../../initializers/constants' import { throwIfNotValid } from '../utils' +import { ActorModel } from './actor' @Table({ tableName: 'actorImage', @@ -17,6 +31,10 @@ import { throwIfNotValid } from '../utils' { fields: [ 'filename' ], unique: true + }, + { + fields: [ 'actorId', 'type', 'width' ], + unique: true } ] }) @@ -55,13 +73,25 @@ export class ActorImageModel extends Model ActorModel) + @Column + actorId: number + + @BelongsTo(() => ActorModel, { + foreignKey: { + allowNull: false + }, + onDelete: 'CASCADE' + }) + Actor: ActorModel + @AfterDestroy static removeFilesAndSendDelete (instance: ActorImageModel) { logger.info('Removing actor image file %s.', instance.filename) // Don't block the transaction instance.removeImage() - .catch(err => logger.error('Cannot remove actor image file %s.', instance.filename, err)) + .catch(err => logger.error('Cannot remove actor image file %s.', instance.filename, { err })) } static loadByName (filename: string) { @@ -74,20 +104,44 @@ export class ActorImageModel extends Model