From ef9bb8dc14f7a1194c8b87a6461ed64d73a55384 Mon Sep 17 00:00:00 2001 From: Muhammad Ilyas Date: Fri, 11 Aug 2023 23:11:18 +0500 Subject: [PATCH 01/51] db - fix entities relationship, add label db, theme db --- src/db/entities/index.ts | 13 ++++++++++++- src/db/entities/label.ts | 25 +++++++++++++++++++++++++ src/db/entities/note-image.ts | 2 +- src/db/entities/note-list-item.ts | 4 ++-- src/db/entities/note-list.ts | 7 +++++-- src/db/entities/note.ts | 16 ++++++++++------ src/db/entities/theme.ts | 14 ++++++++++++++ src/db/entities/user-note.ts | 13 +++++++++---- src/db/entities/user.ts | 6 +++++- 9 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 src/db/entities/label.ts create mode 100644 src/db/entities/theme.ts diff --git a/src/db/entities/index.ts b/src/db/entities/index.ts index 3bacee6..3da0845 100644 --- a/src/db/entities/index.ts +++ b/src/db/entities/index.ts @@ -4,5 +4,16 @@ import NoteImage from "./note-image"; import NoteListItem from "./note-list-item"; import NoteList from "./note-list"; import UserNote from "./user-note"; +import Theme from "./theme"; +import Label from "./label"; -export { User, Note, NoteImage, NoteListItem, NoteList, UserNote }; +export { + User, + Note, + NoteImage, + NoteListItem, + NoteList, + UserNote, + Theme, + Label, +}; diff --git a/src/db/entities/label.ts b/src/db/entities/label.ts new file mode 100644 index 0000000..32a0711 --- /dev/null +++ b/src/db/entities/label.ts @@ -0,0 +1,25 @@ +import { + Column, + Entity, + PrimaryGeneratedColumn, + ManyToOne, + OneToMany, +} from "typeorm"; + +import User from "./user"; +import UserNote from "./user-note"; + +@Entity({ name: "label" }) +export default class Label { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column() + name: string; + + @OneToMany(() => UserNote, (userNote) => userNote.label) + userNotes: UserNote[]; + + @ManyToOne(() => User, (user) => user.labels) + user: User; +} diff --git a/src/db/entities/note-image.ts b/src/db/entities/note-image.ts index 5cd710d..2bc9385 100644 --- a/src/db/entities/note-image.ts +++ b/src/db/entities/note-image.ts @@ -1,7 +1,7 @@ import { PrimaryGeneratedColumn, Entity, Column, ManyToOne } from "typeorm"; import Note from "./note"; -@Entity() +@Entity({ name: "noteImage" }) export default class NoteImage { @PrimaryGeneratedColumn("uuid") id: string; diff --git a/src/db/entities/note-list-item.ts b/src/db/entities/note-list-item.ts index 94f3d48..7ffe2d9 100644 --- a/src/db/entities/note-list-item.ts +++ b/src/db/entities/note-list-item.ts @@ -1,7 +1,7 @@ import { PrimaryGeneratedColumn, Column, Entity, ManyToOne } from "typeorm"; import NoteList from "./note-list"; -@Entity() +@Entity({ name: "noteListItem" }) export default class NoteListItem { @PrimaryGeneratedColumn("uuid") id: string; @@ -15,6 +15,6 @@ export default class NoteListItem { @Column() order: number; - @ManyToOne(() => NoteList, (noteList) => noteList.noteListItem) + @ManyToOne(() => NoteList, (noteList) => noteList.noteItemList) noteList: NoteList; } diff --git a/src/db/entities/note-list.ts b/src/db/entities/note-list.ts index 085c48d..d1bc40a 100644 --- a/src/db/entities/note-list.ts +++ b/src/db/entities/note-list.ts @@ -8,7 +8,7 @@ import { import Note from "./note"; import NoteListItem from "./note-list-item"; -@Entity() +@Entity({ name: "noteList" }) export default class NoteList { @PrimaryGeneratedColumn("uuid") id: string; @@ -22,9 +22,12 @@ export default class NoteList { @Column({ default: false }) isCompleted: boolean; + @Column({ default: false }) + hasItems: boolean; + @ManyToOne(() => Note, (note) => note.noteList) note: Note; @OneToMany(() => NoteListItem, (noteListItem) => noteListItem.noteList) - noteListItem: NoteListItem[]; + noteItemList: NoteListItem[]; } diff --git a/src/db/entities/note.ts b/src/db/entities/note.ts index 4e7f65c..2042594 100644 --- a/src/db/entities/note.ts +++ b/src/db/entities/note.ts @@ -11,16 +11,17 @@ import { import NoteList from "./note-list"; import NoteImage from "./note-image"; import UserNote from "./user-note"; +import Theme from "./theme"; -@Entity() +@Entity({ name: "note" }) export default class Note { @PrimaryGeneratedColumn("uuid") id: string; - @Column({ default: false }) - hasItems: boolean; + @Column({ nullable: true }) + title: string; - @Column() + @Column({ nullable: true }) content: string; @Column({ default: false }) @@ -44,6 +45,9 @@ export default class Note { @OneToMany(() => NoteImage, (image) => image.note) images: NoteImage[]; - @ManyToOne(() => UserNote, (userNote) => userNote.notes) - userNote: UserNote; + @OneToMany(() => UserNote, (userNote) => userNote.note) + userNote: UserNote[]; + + @ManyToOne(() => Theme, (theme) => theme.notes) + theme: Theme; } diff --git a/src/db/entities/theme.ts b/src/db/entities/theme.ts new file mode 100644 index 0000000..ff441b4 --- /dev/null +++ b/src/db/entities/theme.ts @@ -0,0 +1,14 @@ +import { Column, Entity, PrimaryGeneratedColumn, OneToMany } from "typeorm"; +import Note from "./note"; + +@Entity({ name: "theme" }) +export default class Theme { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column() + color: string; + + @OneToMany(() => Note, (note) => note.theme) + notes: Note[]; +} diff --git a/src/db/entities/user-note.ts b/src/db/entities/user-note.ts index f41e9af..6b36482 100644 --- a/src/db/entities/user-note.ts +++ b/src/db/entities/user-note.ts @@ -3,12 +3,13 @@ import { Column, Entity, ManyToOne, - OneToMany, + JoinColumn, } from "typeorm"; import User from "./user"; import Note from "./note"; +import Label from "./label"; -@Entity() +@Entity({ name: "userNote" }) export default class UserNote { @PrimaryGeneratedColumn("uuid") id: string; @@ -22,6 +23,10 @@ export default class UserNote { @ManyToOne(() => User, (user) => user.notes) user: User; - @OneToMany(() => Note, (note) => note.userNote) - notes: Note[]; + @ManyToOne(() => Note, (note) => note.userNote) + note: Note; + + @ManyToOne(() => Label) + @JoinColumn() + label: Label; } diff --git a/src/db/entities/user.ts b/src/db/entities/user.ts index 81a85ca..77146d9 100644 --- a/src/db/entities/user.ts +++ b/src/db/entities/user.ts @@ -1,8 +1,9 @@ import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; import UserNote from "./user-note"; +import Label from "./label"; -@Entity({ name: "users" }) +@Entity({ name: "user" }) export default class User { @PrimaryGeneratedColumn("uuid") id: string; @@ -18,4 +19,7 @@ export default class User { @OneToMany(() => UserNote, (userNote) => userNote.user) notes: UserNote[]; + + @OneToMany(() => Label, (label) => label.user) + labels: Label[]; } From f2bb1cfdff23c753df99ec688dcded45d29e2625 Mon Sep 17 00:00:00 2001 From: Muhammad Ilyas Date: Fri, 11 Aug 2023 23:56:31 +0500 Subject: [PATCH 02/51] db - added entities repositories --- src/db/index.ts | 2 +- src/db/repository/label.ts | 53 +++++++++++++++++++++++++++++ src/db/repository/note-image.ts | 39 +++++++++++++++++++++ src/db/repository/note-list-item.ts | 24 +++++++++++++ src/db/repository/note-list.ts | 53 +++++++++++++++++++++++++++++ src/db/repository/note.ts | 48 ++++++++++++++++++++++++++ src/db/repository/theme.ts | 42 +++++++++++++++++++++++ src/db/repository/user-note.ts | 51 +++++++++++++++++++++++++++ src/db/repository/user.ts | 3 +- src/db/types.ts | 30 ++++++++++++++++ 10 files changed, 342 insertions(+), 3 deletions(-) create mode 100644 src/db/repository/label.ts create mode 100644 src/db/repository/note-image.ts create mode 100644 src/db/repository/note-list-item.ts create mode 100644 src/db/repository/note-list.ts create mode 100644 src/db/repository/note.ts create mode 100644 src/db/repository/theme.ts create mode 100644 src/db/repository/user-note.ts create mode 100644 src/db/types.ts diff --git a/src/db/index.ts b/src/db/index.ts index 04160ac..344e989 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -8,7 +8,7 @@ const dataSource = new DataSource({ username: dbEnvVars.username, password: dbEnvVars.password, port: +dbEnvVars.port, - synchronize: true, + synchronize: false, database: "google-keep-notes", entities: [path.join(__dirname, "./entities/**/*.{ts,js}")], }); diff --git a/src/db/repository/label.ts b/src/db/repository/label.ts new file mode 100644 index 0000000..bc4bf67 --- /dev/null +++ b/src/db/repository/label.ts @@ -0,0 +1,53 @@ +import { Label } from "../entities"; +import dataSource from "../index"; +import { Repository } from "typeorm"; +import UserRepository from "./user"; +import { ApiError } from "@/utils/errors/custom-errors"; + +type FindLabelOption = { + id?: string; + name?: string; + userId?: string; +}; + +const userRepo = new UserRepository(); + +class LabelRepository { + private repository: Repository