@@ -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