From 67e60a3c3740121c3002fc38804e92d64e6bdb02 Mon Sep 17 00:00:00 2001 From: David Mehren Date: Thu, 13 Aug 2020 20:24:45 +0200 Subject: [PATCH] Update Note entity We now use the new permissions split in users and groups. Also the note now knows the colors of its authors. Signed-off-by: David Mehren --- src/notes/note.entity.ts | 87 +++++-------------- .../note-group-permission.entity.ts | 11 ++- .../note-user-permission.entity.ts | 11 ++- src/permissions/permissions.module.ts | 9 +- 4 files changed, 47 insertions(+), 71 deletions(-) diff --git a/src/notes/note.entity.ts b/src/notes/note.entity.ts index 0b3a7fa1b..151379dde 100644 --- a/src/notes/note.entity.ts +++ b/src/notes/note.entity.ts @@ -6,19 +6,11 @@ import { OneToMany, PrimaryGeneratedColumn, } from 'typeorm'; -import { Author } from '../authors/author.entity'; +import { NoteGroupPermission } from '../permissions/note-group-permission.entity'; +import { NoteUserPermission } from '../permissions/note-user-permission.entity'; import { Revision } from '../revisions/revision.entity'; import { User } from '../users/user.entity'; - -// permission types -enum PermissionEnum { - freely = 'freely', - editable = 'editable', - limited = 'limited', - locked = 'locked', - protected = 'protected', - private = 'private', -} +import { AuthorColor } from './author-color.entity'; @Entity('Notes') export class Note { @@ -37,10 +29,17 @@ export class Note { }) alias: string; - @Column({ - type: 'text', - }) - permission: PermissionEnum; + @OneToMany( + _ => NoteGroupPermission, + groupPermission => groupPermission.note, + ) + groupPermissions: NoteGroupPermission[]; + + @OneToMany( + _ => NoteUserPermission, + userPermission => userPermission.note, + ) + userPermissions: NoteUserPermission[]; @Column({ nullable: false, @@ -48,20 +47,13 @@ export class Note { }) viewcount: number; - @Column({ - nullable: true, - }) - lastchangeAt: Date; - - @Column() - savedAt: Date; - - @ManyToOne(_ => User, { onDelete: 'CASCADE' }) + @ManyToOne( + _ => User, + user => user.ownedNotes, + { onDelete: 'CASCADE' }, + ) owner: User; - @ManyToOne(_ => User) - lastchangeuser: User; - @OneToMany( _ => Revision, revision => revision.note, @@ -69,39 +61,12 @@ export class Note { revisions: Revision[]; @OneToMany( - _ => Author, - author => author.note, + _ => AuthorColor, + authorColor => authorColor.note, ) - authors: Author[]; + authorColors: AuthorColor[]; - @Column({ - type: 'text', - nullable: true, - }) - title: string; - - @Column({ - type: 'text', - }) - content: string; - - @Column({ - type: 'text', - nullable: true, - }) - authorship: string; - - constructor( - shortid: string, - alias: string, - permission: PermissionEnum, - lastchangeAt: Date, - savedAt: Date, - owner: User, - title: string, - content: string, - authorship: string, - ) { + constructor(shortid: string, alias: string, owner: User) { if (shortid) { this.shortid = shortid; } else { @@ -109,12 +74,6 @@ export class Note { this.shortid = shortIdGenerate() as string; } this.alias = alias; - this.permission = permission; - this.lastchangeAt = lastchangeAt; - this.savedAt = savedAt; this.owner = owner; - this.title = title; - this.content = content; - this.authorship = authorship; } } diff --git a/src/permissions/note-group-permission.entity.ts b/src/permissions/note-group-permission.entity.ts index 9c6be674f..b00a933fc 100644 --- a/src/permissions/note-group-permission.entity.ts +++ b/src/permissions/note-group-permission.entity.ts @@ -1,12 +1,17 @@ -import { Column, ManyToOne } from 'typeorm/index'; +import { Column, Entity, ManyToOne } from 'typeorm/index'; import { Group } from '../groups/group.entity'; import { Note } from '../notes/note.entity'; +@Entity() export class NoteGroupPermission { - @ManyToOne(_ => Group) + @ManyToOne(_ => Group, { primary: true }) group: Group; - @ManyToOne(_ => Note) + @ManyToOne( + _ => Note, + note => note.groupPermissions, + { primary: true }, + ) note: Note; @Column() diff --git a/src/permissions/note-user-permission.entity.ts b/src/permissions/note-user-permission.entity.ts index 7f86c57f6..776808b2f 100644 --- a/src/permissions/note-user-permission.entity.ts +++ b/src/permissions/note-user-permission.entity.ts @@ -1,12 +1,17 @@ -import { Column, ManyToOne } from 'typeorm/index'; +import { Column, Entity, ManyToOne } from 'typeorm/index'; import { Note } from '../notes/note.entity'; import { User } from '../users/user.entity'; +@Entity() export class NoteUserPermission { - @ManyToOne(_ => User) + @ManyToOne(_ => User, { primary: true }) user: User; - @ManyToOne(_ => Note) + @ManyToOne( + _ => Note, + note => note.userPermissions, + { primary: true }, + ) note: Note; @Column() diff --git a/src/permissions/permissions.module.ts b/src/permissions/permissions.module.ts index 18b5dba2a..0d45ef6f5 100644 --- a/src/permissions/permissions.module.ts +++ b/src/permissions/permissions.module.ts @@ -1,4 +1,11 @@ import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { NoteGroupPermission } from './note-group-permission.entity'; +import { NoteUserPermission } from './note-user-permission.entity'; -@Module({}) +@Module({ + imports: [ + TypeOrmModule.forFeature([NoteUserPermission, NoteGroupPermission]), + ], +}) export class PermissionsModule {}