1- import { createHash } from 'crypto' ;
2- import { JsonWebTokenError , sign } from 'jsonwebtoken' ;
31import {
42 Authorized ,
53 Body ,
@@ -19,50 +17,14 @@ import {
1917} from 'routing-controllers' ;
2018import { ResponseSchema } from 'routing-controllers-openapi' ;
2119
22- import {
23- dataSource ,
24- JWTAction ,
25- Role ,
26- SignInData ,
27- User ,
28- UserFilter ,
29- UserListChunk
30- } from '../model' ;
31- import { APP_SECRET , searchConditionOf , supabase } from '../utility' ;
32- import { ActivityLogController } from './ActivityLog' ;
33-
34- const store = dataSource . getRepository ( User ) ;
20+ import { Role , SignInData , User , UserFilter , UserListChunk } from '../model' ;
21+ import { activityLogService , BaseService , sessionService } from '../service' ;
22+ import { searchConditionOf , supabase } from '../utility' ;
3523
3624@JsonController ( '/user' )
3725export class UserController {
38- static encrypt = ( raw : string ) =>
39- createHash ( 'sha1' )
40- . update ( APP_SECRET + raw )
41- . digest ( 'hex' ) ;
42-
43- static sign = ( user : User ) : User => ( {
44- ...user ,
45- token : sign ( { ...user } , APP_SECRET )
46- } ) ;
47-
48- static async signUp ( { email, password } : SignInData ) {
49- const sum = await store . count ( ) ;
50-
51- const { password : _ , ...user } = await store . save ( {
52- name : email ,
53- email,
54- password : UserController . encrypt ( password ) ,
55- roles : [ sum ? Role . Client : Role . Administrator ]
56- } ) ;
57- await ActivityLogController . logCreate ( user , 'User' , user . id ) ;
58-
59- return user ;
60- }
61-
62- static getSession = ( { context : { state } } : JWTAction ) =>
63- 'user' in state
64- ? state . user
65- : ( console . error ( state . jwtOriginalError ) , null ) ;
26+ store = sessionService . userStore ;
27+ service = new BaseService ( User , [ 'email' , 'mobilePhone' , 'name' ] ) ;
6628
6729 @Post ( '/session/email/:email/OTP' )
6830 @OnUndefined ( 204 )
@@ -83,9 +45,9 @@ export class UserController {
8345 @HttpCode ( 201 )
8446 @ResponseSchema ( User )
8547 async signIn ( @Body ( ) { email, password } : SignInData ) : Promise < User > {
86- let user = await store . findOneBy ( {
48+ let user = await this . store . findOneBy ( {
8749 email,
88- password : UserController . encrypt ( password )
50+ password : sessionService . encrypt ( password )
8951 } ) ;
9052
9153 if ( ! user ) {
@@ -97,17 +59,17 @@ export class UserController {
9759 if ( error ) throw new HttpError ( error . status , error . message ) ;
9860
9961 user =
100- ( await store . findOneBy ( { email } ) ) ||
62+ ( await this . store . findOneBy ( { email } ) ) ||
10163 ( await this . signUp ( { email, password : data . user . id } ) ) ;
10264 }
103- return UserController . sign ( user ) ;
65+ return sessionService . sign ( user ) ;
10466 }
10567
10668 @Post ( )
10769 @HttpCode ( 201 )
10870 @ResponseSchema ( User )
10971 signUp ( @Body ( ) data : SignInData ) {
110- return UserController . signUp ( data ) ;
72+ return sessionService . signUp ( data ) ;
11173 }
11274
11375 @Put ( '/:id' )
@@ -118,27 +80,24 @@ export class UserController {
11880 @CurrentUser ( ) updatedBy : User ,
11981 @Body ( ) { password, ...data } : User
12082 ) {
121- if (
122- ! updatedBy . roles . includes ( Role . Administrator ) &&
123- id !== updatedBy . id
124- )
83+ if ( ! updatedBy . roles . includes ( Role . Administrator ) && id !== updatedBy . id )
12584 throw new ForbiddenError ( ) ;
12685
127- const saved = await store . save ( {
86+ const saved = await this . store . save ( {
12887 ...data ,
129- password : password && UserController . encrypt ( password ) ,
88+ password : password && sessionService . encrypt ( password ) ,
13089 id
13190 } ) ;
132- await ActivityLogController . logUpdate ( updatedBy , 'User' , id ) ;
91+ await activityLogService . logUpdate ( updatedBy , 'User' , id ) ;
13392
134- return UserController . sign ( saved ) ;
93+ return sessionService . sign ( saved ) ;
13594 }
13695
13796 @Get ( '/:id' )
13897 @OnNull ( 404 )
13998 @ResponseSchema ( User )
14099 getOne ( @Param ( 'id' ) id : number ) {
141- return store . findOne ( { where : { id } } ) ;
100+ return this . service . getOne ( id ) ;
142101 }
143102
144103 @Delete ( '/:id' )
@@ -148,26 +107,19 @@ export class UserController {
148107 if ( deletedBy . roles . includes ( Role . Administrator ) && id == deletedBy . id )
149108 throw new ForbiddenError ( ) ;
150109
151- await store . softDelete ( id ) ;
110+ await this . store . softDelete ( id ) ;
152111
153- await ActivityLogController . logDelete ( deletedBy , 'User' , id ) ;
112+ await activityLogService . logDelete ( deletedBy , 'User' , id ) ;
154113 }
155114
156115 @Get ( )
157116 @ResponseSchema ( UserListChunk )
158- async getList (
159- @QueryParams ( ) { gender, keywords, pageSize, pageIndex } : UserFilter
160- ) {
117+ getList ( @QueryParams ( ) { gender, keywords, ...filter } : UserFilter ) {
161118 const where = searchConditionOf < User > (
162119 [ 'email' , 'mobilePhone' , 'name' ] ,
163120 keywords ,
164121 gender && { gender }
165122 ) ;
166- const [ list , count ] = await store . findAndCount ( {
167- where,
168- skip : pageSize * ( pageIndex - 1 ) ,
169- take : pageSize
170- } ) ;
171- return { list, count } ;
123+ return this . service . getList ( { keywords, ...filter } , where ) ;
172124 }
173125}
0 commit comments