/
user.service.ts
86 lines (67 loc) · 2.13 KB
/
user.service.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
75
76
77
78
79
80
81
82
83
84
85
86
import { Injectable, NotFoundException } from "@nestjs/common";
import { Repository, SelectQueryBuilder } from "typeorm";
import { InjectRepository } from "@nestjs/typeorm";
import { User } from "@supabase/supabase-js";
import { DbUser } from "./user.entity";
@Injectable()
export class UserService {
constructor (
@InjectRepository(DbUser)
private userRepository: Repository<DbUser>,
) {}
baseQueryBuilder (): SelectQueryBuilder<DbUser> {
const builder = this.userRepository.createQueryBuilder("users");
return builder;
}
async findOneById (id: number): Promise<DbUser> {
const queryBuilder = this.baseQueryBuilder();
queryBuilder.where("id = :id", { id });
let item: DbUser | null;
try {
item = await queryBuilder.getOne();
} catch (e) {
// handle error
item = null;
}
if (!item) {
throw (new NotFoundException);
}
return item;
}
async checkAddUser (user: User): Promise<DbUser> {
const { user_metadata: { user_name }, identities } = user;
const github = identities!.filter(identity => identity.provider === "github")[0];
const id = parseInt(github.id, 10);
try {
const publicUser = await this.findOneById(id);
return publicUser;
} catch (e) {
// create new user
const newUser = this.userRepository.create({
id,
is_open_sauced_member: false,
login: user_name as string,
created_at: new Date(github.created_at),
updated_at: new Date(github.updated_at ?? github.created_at),
});
await newUser.save();
return newUser;
}
}
async updateOnboarding (id: number) {
try {
await this.findOneById(id);
await this.userRepository.update(id, { is_onboarded: true, is_waitlisted: false });
} catch (e) {
throw new NotFoundException("Unable to update user onboarding status");
}
}
async updateWaitlistStatus (id: number) {
try {
await this.findOneById(id);
await this.userRepository.update(id, { is_waitlisted: true });
} catch (e) {
throw new NotFoundException("Unable to update user waitlist status");
}
}
}