-
Notifications
You must be signed in to change notification settings - Fork 1
/
Session.ts
74 lines (62 loc) · 1.59 KB
/
Session.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import { User, Query } from 'leanengine';
import { Cloud } from 'leancloud-storage';
import {
JsonController,
Get,
Post,
Patch,
Delete,
Body,
Ctx,
Authorized,
OnUndefined
} from 'routing-controllers';
import { LCContext } from '../utility';
interface SignInToken {
phone: string;
code?: string;
}
@JsonController('/session')
export class SessionController {
@Post('/smsCode')
sendSMSCode(@Body() { phone }: SignInToken) {
return Cloud.requestSmsCode(phone);
}
@Post('/')
async signIn(
@Ctx() context: LCContext,
@Body() { phone, code }: SignInToken
) {
const user = await User.signUpOrlogInWithMobilePhone(phone, code);
const temp = await new Query('UserTemp')
.equalTo('mobilePhoneNumber', phone)
.first();
if (temp) {
const { objectId, createdAt, updatedAt, ...data } = temp.toJSON();
await user.save(data, { user });
await temp.destroy();
}
context.saveCurrentUser(user);
return user.toJSON();
}
@Get('/')
@Authorized()
getProfile(@Ctx() { currentUser }: LCContext) {
return currentUser.toJSON();
}
@Patch('/')
@Authorized()
async editProfile(
@Ctx() { currentUser: user }: LCContext,
@Body() body: any
) {
return (await user.save(body, { user })).toJSON();
}
@Delete('/')
@Authorized()
@OnUndefined(200)
destroy(@Ctx() context: LCContext) {
context.currentUser.logOut();
context.clearCurrentUser();
}
}