From e90e2a8e19335c5fa0fabf62d0b91ff74cccb3ba Mon Sep 17 00:00:00 2001 From: Philip Molares Date: Thu, 11 Mar 2021 15:03:23 +0100 Subject: [PATCH] Entities: Add onDelete CASCADE to entities To better handle deletion of entities, all necessary other entities got the option onDelete CASCADE set. So everything that does not make any sense if something else is deleted will be deleted along side of it. Signed-off-by: Philip Molares --- src/auth/auth-token.entity.ts | 4 +++- src/groups/group.entity.ts | 1 - src/media/media-upload.entity.ts | 8 ++++++-- src/notes/note.entity.ts | 7 ++++++- src/users/identity.entity.ts | 4 +++- src/users/user.entity.ts | 4 ++++ 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/auth/auth-token.entity.ts b/src/auth/auth-token.entity.ts index 22f5a965f..79cb8b20f 100644 --- a/src/auth/auth-token.entity.ts +++ b/src/auth/auth-token.entity.ts @@ -21,7 +21,9 @@ export class AuthToken { @Column({ unique: true }) keyId: string; - @ManyToOne((_) => User, (user) => user.authTokens) + @ManyToOne((_) => User, (user) => user.authTokens, { + onDelete: 'CASCADE', // This deletes the AuthToken, when the associated User is deleted + }) user: User; @Column() diff --git a/src/groups/group.entity.ts b/src/groups/group.entity.ts index f3cdc6ad4..41f78e837 100644 --- a/src/groups/group.entity.ts +++ b/src/groups/group.entity.ts @@ -36,7 +36,6 @@ export class Group { @ManyToMany((_) => User, (user) => user.groups, { eager: true, - cascade: true, }) @JoinTable() members: User[]; diff --git a/src/media/media-upload.entity.ts b/src/media/media-upload.entity.ts index c9f253278..d25094d3b 100644 --- a/src/media/media-upload.entity.ts +++ b/src/media/media-upload.entity.ts @@ -23,10 +23,14 @@ export class MediaUpload { @PrimaryColumn() id: string; - @ManyToOne((_) => Note, { nullable: false }) + @ManyToOne((_) => Note, (note) => note.mediaUploads, { + nullable: false, + }) note: Note; - @ManyToOne((_) => User, { nullable: false }) + @ManyToOne((_) => User, (user) => user.mediaUploads, { + nullable: false, + }) user: User; @Column({ diff --git a/src/notes/note.entity.ts b/src/notes/note.entity.ts index 538af568b..5e4cf0ef9 100644 --- a/src/notes/note.entity.ts +++ b/src/notes/note.entity.ts @@ -21,6 +21,7 @@ import { User } from '../users/user.entity'; import { AuthorColor } from './author-color.entity'; import { Tag } from './tag.entity'; import { HistoryEntry } from '../history/history-entry.entity'; +import { MediaUpload } from '../media/media-upload.entity'; @Entity() export class Note { @@ -53,7 +54,9 @@ export class Note { default: 0, }) viewCount: number; - @ManyToOne((_) => User, (user) => user.ownedNotes, { onDelete: 'CASCADE' }) + @ManyToOne((_) => User, (user) => user.ownedNotes, { + onDelete: 'CASCADE', // This deletes the Note, when the associated User is deleted + }) owner: User; @OneToMany((_) => Revision, (revision) => revision.note, { cascade: true }) revisions: Promise; @@ -61,6 +64,8 @@ export class Note { authorColors: AuthorColor[]; @OneToMany((_) => HistoryEntry, (historyEntry) => historyEntry.user) historyEntries: HistoryEntry[]; + @OneToMany((_) => MediaUpload, (mediaUpload) => mediaUpload.note) + mediaUploads: MediaUpload[]; @Column({ nullable: true, diff --git a/src/users/identity.entity.ts b/src/users/identity.entity.ts index f8999bc82..462399d42 100644 --- a/src/users/identity.entity.ts +++ b/src/users/identity.entity.ts @@ -19,7 +19,9 @@ export class Identity { @PrimaryGeneratedColumn() id: number; - @ManyToOne((_) => User, (user) => user.identities) + @ManyToOne((_) => User, (user) => user.identities, { + onDelete: 'CASCADE', // This deletes the Identity, when the associated User is deleted + }) user: User; @Column() diff --git a/src/users/user.entity.ts b/src/users/user.entity.ts index 33e26114d..c04350821 100644 --- a/src/users/user.entity.ts +++ b/src/users/user.entity.ts @@ -17,6 +17,7 @@ import { AuthToken } from '../auth/auth-token.entity'; import { Identity } from './identity.entity'; import { Group } from '../groups/group.entity'; import { HistoryEntry } from '../history/history-entry.entity'; +import { MediaUpload } from '../media/media-upload.entity'; @Entity() export class User { @@ -62,6 +63,9 @@ export class User { @OneToMany((_) => HistoryEntry, (historyEntry) => historyEntry.user) historyEntries: HistoryEntry[]; + @OneToMany((_) => MediaUpload, (mediaUpload) => mediaUpload.user) + mediaUploads: MediaUpload[]; + // eslint-disable-next-line @typescript-eslint/no-empty-function private constructor() {}