Skip to content

Commit f2ae4a2

Browse files
committed
Completed User Data Service and TSLint Setup
1 parent a786581 commit f2ae4a2

File tree

6 files changed

+89
-28
lines changed

6 files changed

+89
-28
lines changed

src/api/user.ts

+10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import * as express from 'express';
22
import { Request, Response } from 'express';
3+
import { UserService } from '../service/userService';
4+
35
const router = express.Router();
6+
const userService = new UserService();
47

58
router.post('/signup', async function(req: Request, res: Response) {
69
const data = req.body;
@@ -11,4 +14,11 @@ router.post('/signup', async function(req: Request, res: Response) {
1114
return res.status(400).send({ message: 'VSCode Extension Id is Required!'});
1215
}
1316

17+
try {
18+
const newUser = await userService.addUser(data);
19+
return res.status(200).send({ data: newUser });
20+
} catch (error) {
21+
throw error;
22+
}
23+
1424
});

src/config/types/user.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
interface INewUser {
1+
interface IUser {
2+
id: number;
23
email: string;
34
extensionId: string;
5+
deleted: boolean;
46
}
57

6-
export { INewUser };
8+
export { IUser };

src/model/user.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
33
@Entity()
44
export class UserModel {
55
@PrimaryGeneratedColumn
6-
id: number | null;
6+
id: number;
77

88
@Column
9-
email: string | null;
9+
email: string;
1010

1111
@Column
12-
extensionId: string | null;
12+
extensionId: string;
1313

1414
@Column
1515
deleted: boolean = false;

src/service/userDataService.ts

+51-16
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,25 @@ export class UserDataService {
88
this._db = getConnection().getMongoRepository(UserModel);
99
}
1010

11+
public async create(newUser: UserModel): Promise<UserModel> {
12+
const userModel: UserModel = new UserModel();
13+
userModel.id = newUser.id;
14+
userModel.email = newUser.email;
15+
userModel.extensionId = newUser.extensionId;
16+
try {
17+
const user = await this._db.save(userModel);
18+
return user;
19+
} catch (error) {
20+
throw error;
21+
}
22+
}
23+
1124
public async findBy(query: UserModel, skip: number, take: number): Promise<UserModel[]> {
1225
if (!skip) skip = 0;
1326
if (!take) take = 10;
1427
query.deleted = false;
1528
try {
16-
const users: Array<UserModel> = await this._db.find({
29+
const users: UserModel[] = await this._db.find({
1730
where: query,
1831
skip,
1932
take,
@@ -34,30 +47,52 @@ export class UserDataService {
3447
}
3548
}
3649

37-
public async create(newUser: UserModel): Promise<UserModel>{
38-
const userModel: UserModel = new UserModel();
39-
userModel.id = newUser.id;
40-
userModel.email = newUser.email;
41-
userModel.extensionId = newUser.extensionId;
42-
try{
43-
const user = await this._db.save(userModel);
44-
return user;
45-
} catch (error){
50+
public async update(user: UserModel): Promise<UserModel> {
51+
if (!user.id) {
52+
try {
53+
const newUser = this.create(user);
54+
return newUser;
55+
} catch (error) {
56+
throw error;
57+
}
58+
} else {
59+
user.deleted = false;
60+
try {
61+
await this._db.findOneAndUpdate({id: user.id}, {
62+
$set: {
63+
email: user.email,
64+
extensionId: user.extensionId,
65+
},
66+
});
67+
return user;
68+
} catch (error) {
69+
throw error;
70+
}
71+
}
72+
}
73+
74+
public async countBy(query: UserModel): Promise<number> {
75+
query.deleted = false;
76+
try {
77+
const count = await this._db.count(query);
78+
return count;
79+
} catch (error) {
4680
throw error;
4781
}
4882
}
4983

50-
public async deleteBy(query: UserModel, userId: number): Promise<UpdateWriteOpResult>{
51-
try{
84+
public async deleteBy(query: UserModel, userId: number): Promise<UpdateWriteOpResult> {
85+
query.deleted = false;
86+
try {
5287
const result: UpdateWriteOpResult = await this._db.updateMany(query, {
5388
$set: {
5489
deleted: true,
55-
deleteBy: userId
56-
}
90+
deleteBy: userId,
91+
},
5792
});
5893
return result;
59-
} catch (error){
94+
} catch (error) {
6095
throw error;
6196
}
6297
}
63-
}
98+
}

src/service/userService.ts

+20-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
1-
import { INewUser } from '../config/types/user';
2-
import { UserModel } from '../model/user';
1+
import { IUser } from '../config/types/user';
2+
import { UserDataService } from './userDataService';
33

4-
export default class UserService {
5-
public async addUser(newUser: INewUser): Promise<UserModel> {
6-
4+
class UserService {
5+
6+
private _data: UserDataService;
7+
8+
constructor() {
9+
this._data = new UserDataService();
710
}
8-
}
11+
12+
public async addUser(newUser: IUser): Promise<IUser> {
13+
try {
14+
newUser = await this._data.create(newUser);
15+
return newUser;
16+
} catch (error) {
17+
throw error;
18+
}
19+
}
20+
}
21+
22+
export { UserService };

tslint.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
"variable-name":false,
1515
"member-access":false,
1616
"curly":false,
17-
"ordered-imports":false,
17+
"ordered-imports":false
1818
}
1919
}

0 commit comments

Comments
 (0)