Skip to content
This repository was archived by the owner on Apr 19, 2023. It is now read-only.

Commit 2357150

Browse files
✨ Entity mapping
1 parent af264e3 commit 2357150

File tree

9 files changed

+134
-38
lines changed

9 files changed

+134
-38
lines changed

src/entities/backup-code.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@ import {
33
PrimaryGeneratedColumn,
44
CreateDateColumn,
55
UpdateDateColumn,
6-
Column
6+
Column,
7+
ManyToOne,
8+
JoinColumn
79
} from "typeorm";
10+
import { User } from "./user";
811

912
@Entity()
1013
export class BackupCode {
1114
@PrimaryGeneratedColumn("uuid")
1215
code!: number;
1316

14-
@Column()
15-
userId!: number;
17+
@ManyToOne(type => User)
18+
@JoinColumn()
19+
user!: User;
1620

1721
@Column()
1822
used!: boolean;

src/entities/email.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@ import {
33
PrimaryGeneratedColumn,
44
CreateDateColumn,
55
UpdateDateColumn,
6-
Column
6+
Column,
7+
ManyToOne,
8+
JoinColumn
79
} from "typeorm";
10+
import { User } from "./user";
811

912
@Entity()
1013
export class Email {
1114
@PrimaryGeneratedColumn()
1215
id!: number;
1316

14-
@Column()
15-
userId!: number;
17+
@ManyToOne(type => User)
18+
@JoinColumn()
19+
user!: User;
1620

1721
@Column()
1822
email!: string;

src/entities/event.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@ import {
22
Entity,
33
PrimaryGeneratedColumn,
44
CreateDateColumn,
5-
Column
5+
Column,
6+
ManyToOne,
7+
JoinColumn
68
} from "typeorm";
79
import { EventType } from "../interfaces/enum";
10+
import { User } from "./user";
811

912
@Entity()
1013
export class Event {
1114
@PrimaryGeneratedColumn()
1215
id!: number;
1316

14-
@Column()
15-
userId!: number;
17+
@ManyToOne(type => User)
18+
@JoinColumn()
19+
user: User;
1620

1721
@Column({
1822
type: "enum",

src/entities/user.ts

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,54 @@ import {
33
PrimaryGeneratedColumn,
44
CreateDateColumn,
55
UpdateDateColumn,
6-
Column
6+
Column,
7+
OneToOne,
8+
JoinColumn
79
} from "typeorm";
10+
import { Email } from "./email";
811

912
@Entity()
1013
export class User {
1114
@PrimaryGeneratedColumn()
12-
id!: number;
15+
id?: number;
1316

1417
@Column()
15-
name!: string;
18+
name?: string;
1619

1720
@Column()
18-
nickname!: string;
21+
nickname?: string;
1922

20-
@Column()
21-
primaryEmailId!: number;
23+
@OneToOne(type => Email)
24+
@JoinColumn()
25+
primaryEmail?: Email;
2226

2327
@Column()
24-
password!: string;
28+
password?: string;
2529

2630
@Column()
27-
twoFactorEnabled!: boolean;
31+
twoFactorEnabled?: boolean;
2832

2933
@Column()
30-
twoFactorSecret!: string;
34+
twoFactorSecret?: string;
3135

3236
@Column()
33-
country!: string;
37+
country?: string;
3438

3539
@Column()
36-
timezone!: string;
40+
timezone?: string;
3741

3842
@Column()
39-
notificationEmails!: 1 | 2 | 3 | 4;
43+
notificationEmails?: 1 | 2 | 3 | 4;
4044

4145
@Column()
42-
preferredLanguage!: string;
46+
preferredLanguage?: string;
4347

4448
@Column()
45-
prefersReducedMotion!: boolean;
49+
prefersReducedMotion?: boolean;
4650

4751
@CreateDateColumn()
48-
createdAt!: Date;
52+
createdAt?: Date;
4953

5054
@UpdateDateColumn()
51-
updatedAt!: Date;
55+
updatedAt?: Date;
5256
}

src/helpers/mapStringToEntity.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { User } from "../entities/user";
2+
import { Email } from "../entities/email";
3+
import { Organization } from "../entities/organization";
4+
import { Membership } from "../entities/membership";
5+
import { BackupCode } from "../entities/backup-code";
6+
import { HTTPError } from "../interfaces/error";
7+
8+
export const mapStringToEntity = (string: string) => {
9+
if (string === "user") return User;
10+
if (string === "email") return Email;
11+
if (string === "organization") return Organization;
12+
if (string === "membership") return Membership;
13+
if (string === "backupCode") return BackupCode;
14+
throw new Error(
15+
JSON.stringify({ status: 500, code: "invalid_entity" } as HTTPError)
16+
);
17+
};

src/interfaces/error.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface HTTPError {
2+
status: number;
3+
code: string;
4+
message?: string;
5+
}

src/queries/crud.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { connect } from "../helpers/database";
2+
import { User } from "../entities/user";
3+
import { Email } from "../entities/email";
4+
import { Organization } from "../entities/organization";
5+
import { Membership } from "../entities/membership";
6+
import { BackupCode } from "../entities/backup-code";
7+
import { mapStringToEntity } from "../helpers/mapStringToEntity";
8+
9+
export const create = async (
10+
entity: string,
11+
data: User | Email | Organization | Membership | BackupCode
12+
) => {
13+
const connection = await connect();
14+
const into = mapStringToEntity(entity);
15+
await connection
16+
.createQueryBuilder()
17+
.insert()
18+
.into(into)
19+
.values(data)
20+
.execute();
21+
connection.close();
22+
};
23+
24+
export const read = async (entity: string, id: number) => {
25+
const connection = await connect();
26+
const into = mapStringToEntity(entity);
27+
const record = await connection
28+
.getRepository(into)
29+
.createQueryBuilder()
30+
.where(`${entity}.id = :id`, { id })
31+
.getOne();
32+
connection.close();
33+
return record;
34+
};
35+
36+
export const update = async (
37+
entity: string,
38+
id: number,
39+
data: User | Email | Organization | Membership | BackupCode
40+
) => {
41+
const connection = await connect();
42+
const into = mapStringToEntity(entity);
43+
const updatedRecord = await connection
44+
.createQueryBuilder()
45+
.update(into)
46+
.set(data)
47+
.where("id = :id", { id })
48+
.execute();
49+
connection.close();
50+
return updatedRecord;
51+
};
52+
53+
export const remove = async (entity: string, id: number) => {
54+
const connection = await connect();
55+
const into = mapStringToEntity(entity);
56+
await connection
57+
.createQueryBuilder()
58+
.delete()
59+
.from(into)
60+
.where("id = :id", { id })
61+
.execute();
62+
connection.close();
63+
};

src/queries/user.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/rest/auth.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { create } from "../queries/crud";
2+
3+
export const register = async () => {
4+
await create("user", {
5+
name: "Anand Chowdhary",
6+
nickname: "Anand"
7+
});
8+
};

0 commit comments

Comments
 (0)