From 617f46f32fa34902a724a6a8524ca8dc08ca571e Mon Sep 17 00:00:00 2001 From: David Mehren Date: Tue, 13 Oct 2020 10:33:54 +0200 Subject: [PATCH] Add MediaUpload entity & Media module Signed-off-by: David Mehren --- src/app.module.ts | 2 + src/media/media-upload.entity.ts | 65 ++++++++++++++++++++++++++++++++ src/media/media.module.ts | 8 ++++ 3 files changed, 75 insertions(+) create mode 100644 src/media/media-upload.entity.ts create mode 100644 src/media/media.module.ts diff --git a/src/app.module.ts b/src/app.module.ts index 138c0c615..5e912acb0 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -10,6 +10,7 @@ import { NotesModule } from './notes/notes.module'; import { PermissionsModule } from './permissions/permissions.module'; import { RevisionsModule } from './revisions/revisions.module'; import { UsersModule } from './users/users.module'; +import { MediaModule } from './media/media.module'; @Module({ imports: [ @@ -29,6 +30,7 @@ import { UsersModule } from './users/users.module'; PermissionsModule, GroupsModule, LoggerModule, + MediaModule, ], controllers: [], providers: [], diff --git a/src/media/media-upload.entity.ts b/src/media/media-upload.entity.ts new file mode 100644 index 000000000..485f9a883 --- /dev/null +++ b/src/media/media-upload.entity.ts @@ -0,0 +1,65 @@ +import * as crypto from 'crypto'; +import { + Column, + CreateDateColumn, + Entity, + ManyToOne, + PrimaryColumn, +} from 'typeorm'; +import { Note } from '../notes/note.entity'; +import { User } from '../users/user.entity'; + +@Entity() +export class MediaUpload { + @PrimaryColumn() + id: string; + + @ManyToOne(_ => Note, { nullable: false }) + note: Note; + + @ManyToOne(_ => User, { nullable: false }) + user: User; + + @Column({ + nullable: false, + }) + extension: string; + + @Column({ + nullable: false, + }) + backendType: string; + + @Column({ + nullable: true, + }) + backendData: string | null; + + @CreateDateColumn() + createdAt: Date; + + // eslint-disable-next-line @typescript-eslint/no-empty-function + private constructor() {} + + public static create( + note: Note, + user: User, + extension: string, + backendType: string, + backendData?: string, + ): MediaUpload { + const upload = new MediaUpload(); + const randomBytes = crypto.randomBytes(16); + upload.id = randomBytes.toString('hex'); + upload.note = note; + upload.user = user; + upload.extension = extension; + upload.backendType = backendType; + if (backendData) { + upload.backendData = backendData; + } else { + upload.backendData = null; + } + return upload; + } +} diff --git a/src/media/media.module.ts b/src/media/media.module.ts new file mode 100644 index 000000000..eebd3501a --- /dev/null +++ b/src/media/media.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { MediaUpload } from './media-upload.entity'; + +@Module({ + imports: [TypeOrmModule.forFeature([MediaUpload])], +}) +export class MediaModule {}