Skip to content
This repository was archived by the owner on Sep 4, 2024. It is now read-only.

Commit 2b226fa

Browse files
Refactored users model
1 parent 58af4c1 commit 2b226fa

File tree

1 file changed

+57
-46
lines changed

1 file changed

+57
-46
lines changed

models/users.ts

Lines changed: 57 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,58 +10,69 @@ export interface UserJSON extends Omit<User, "password"> {
1010
//
1111
}
1212

13-
export function userToJSON(user: User): UserJSON {
14-
const hiddenFields = ['password'];
15-
let data = Object.entries(user).filter(entry => !hiddenFields.includes(entry[0]));
16-
return Object.fromEntries(data);
17-
}
13+
export default class Users {
14+
static getQueryBuilder() {
15+
return global.db<User>("users");
16+
}
1817

19-
export async function getUsersCountWithEmail(email: string) {
20-
const total = (await global.db<User>("users")
21-
.where("email", email)
22-
.count("*", { as: "total" })
23-
)[0].total;
24-
return Number(total);
25-
}
18+
static async getUsersWithEmailCount(email: string) {
19+
const total = (await Users
20+
.getQueryBuilder()
21+
.where("email", email)
22+
.count("*", { as: "total" })
23+
)[0].total;
24+
return Number(total);
25+
}
2626

27-
export async function getUserByEmail(email: string) {
28-
return global.db<User>("users")
29-
.where("email", email)
30-
.first();
31-
}
27+
static async getUserByEmail(email: string) {
28+
return await Users
29+
.getQueryBuilder()
30+
.where("email", email)
31+
.first();
32+
}
3233

33-
export async function getUserByID(id: number) {
34-
return global.db<User>("users")
35-
.where("id", id)
36-
.first();
37-
}
34+
static async getUserByID(id: number) {
35+
return Users
36+
.getQueryBuilder()
37+
.where("id", id)
38+
.first();
39+
}
3840

39-
export async function saveUser(user: User) {
40-
const insertId = await global.db<User>("users")
41-
.insert(user);
42-
if (insertId.length != 1) throw new Error("An error occured while creating the user");
43-
return getUserByID(insertId[0]) as User;
44-
}
41+
static async checkUserHasAuthToken(userId: number, token: string) {
42+
const total = (await global
43+
.db("user_auth_tokens")
44+
.where("user_id", userId)
45+
.where("token", token)
46+
.count("*", { as: "total" })
47+
)[0].total;
48+
return Number(total) != 0;
49+
}
4550

46-
export async function checkUserForAuthToken(userId: number, token: string) {
47-
const total = (await global.db("user_auth_tokens")
48-
.where("user_id", userId)
49-
.where("token", token)
50-
.count("*", { as: "total" })
51-
)[0].total;
52-
return Number(total) != 0;
53-
}
51+
static async addUserAuthToken(userId: number, token: string) {
52+
if (await Users.checkUserHasAuthToken(userId, token)) {
53+
throw new Error("User already has this auth token.");
54+
}
5455

55-
export async function addUserAuthToken(userId: number, token: string) {
56-
if (await checkUserForAuthToken(userId, token)) {
57-
throw new Error("User already has this auth token.");
56+
const insertId = await global
57+
.db("user_auth_tokens")
58+
.insert({
59+
user_id: userId,
60+
token
61+
});
62+
return insertId.length == 1;
5863
}
5964

60-
const insertId = await global.db("user_auth_tokens").insert({
61-
user_id: userId,
62-
token
63-
});
64-
return insertId.length == 1;
65-
}
65+
static async save(user: User) {
66+
const insertId = await Users
67+
.getQueryBuilder()
68+
.insert(user);
69+
if (insertId.length != 1) throw new Error("An error occured while creating the user");
70+
return Users.getUserByID(insertId[0]) as User;
71+
}
6672

67-
export default () => global.db<User>("users");
73+
static toJSON(user: User): UserJSON {
74+
const hiddenFields = ['password'];
75+
let data = Object.entries(user).filter(entry => !hiddenFields.includes(entry[0]));
76+
return Object.fromEntries(data);
77+
}
78+
}

0 commit comments

Comments
 (0)