Skip to content

Commit 3b7206d

Browse files
committed
add PersonService
1 parent b7ec8d8 commit 3b7206d

File tree

4 files changed

+85
-17
lines changed

4 files changed

+85
-17
lines changed

src/Model/Person/Person.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {Table, Column, Model, CreatedAt, UpdatedAt, AllowNull, IsUUID, PrimaryKey, NotNull, BeforeCreate, BeforeUpdate, Length, DataType, AfterCreate, AfterUpdate, IsEmail, Unique, HasOne} from 'sequelize-typescript';
22

33
import {hashedPassword} from '../../utils/password'
4-
import PersonDetail from '../Detail/Detail'
4+
import PersonDetail from '../PersonDetail/PersonDetail'
55

66
@Table({timestamps: true, tableName: "person", schema: "core"})
77
class Person extends Model<Person> {

src/Model/Detail/Detail.ts renamed to src/Model/PersonDetail/PersonDetail.ts

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,37 @@ import Person from '../Person/Person'
88
class PersonDetail extends Model<PersonDetail> {
99
@PrimaryKey @AutoIncrement @Column(DataType.INTEGER)
1010
id: number;
11+
12+
email:string
13+
first_name: string
14+
last_name: string
15+
16+
// has Many with social_media
17+
social_media?: string[]
18+
19+
// has many asset row
20+
asset: string
1121

12-
@AllowNull(false)
13-
@ForeignKey(() => Person)
14-
@Column(DataType.INTEGER)
15-
person_id: number;
22+
@ForeignKey(() => Person) @Column
23+
personId: number;
1624

17-
@BelongsTo(() => Person, {
18-
onUpdate: "CASCADE",
19-
onDelete: "CASCADE"
20-
})
25+
@BelongsTo(() => Person)
2126
person: Person;
22-
27+
2328
@AllowNull(false) @Column(DataType.STRING)
2429
type: string;
2530
}
31+
`
32+
CREATE TABLE IF NOT EXISTS core.person(
33+
id SERIAL PRIMARY KEY,
34+
email varchar(255) unique NOT NULL,
35+
belongs_to_person varchar(255) NOT NULL,
36+
last_name varchar(255) NOT NULL,
37+
password varchar(255) NOT NULL,
38+
email varchar(255) unique NOT NULL,
39+
created_at TIME,
40+
updated_at TIME
41+
);
42+
`
2643

2744
export default PersonDetail

src/Service/PersonService.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { Db_blog } from '../utils/dbUtils'
2+
import Person from '../model/Person/Person';
3+
import PersonDetail from '../Model/PersonDetail/PersonDetail'
4+
import logger = require('../utils/logger');
5+
import sequelize = require('sequelize');
6+
7+
export default class PersonService {
8+
static IsEmailRegistered(email:string): Promise<boolean>{
9+
return new Promise((resolve, reject) => {
10+
Person.findOne({where: {email}})
11+
.then(user => {
12+
if(!user) resolve(false)
13+
else resolve(true)
14+
})
15+
.catch(reject)
16+
})
17+
}
18+
static registerUser(email:string, password:string): Promise<any> {
19+
return new Promise((resolve, reject) => {
20+
Db_blog.transaction(function (t:sequelize.Transaction) {
21+
return PersonDetail.create({
22+
//TODO: index belongs_to_person on person_detail table
23+
belongs_to_person: email,
24+
email
25+
}, {transaction: t}).then(function (userDetail:PersonDetail) {
26+
return Person.create({
27+
belongs_to_person: userDetail.id,
28+
email, password
29+
}, {transaction: t});
30+
});
31+
}).then(function (result) {
32+
logger.info(`registered User with ${email} at ${new Date().getTime()}`)
33+
resolve(result)
34+
}).catch(function (err) {
35+
logger.error(`Error registering user with ${email} at ${new Date().getTime()}`)
36+
reject(err)
37+
})
38+
}) // Promise
39+
}
40+
}

src/controller/mainController.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Token, { DataToken, TokenUtil } from '../Token/Token';
77
import {AuthCacheUtil, AuthToken} from '../Token/Auth/AuthCache'
88
import Roles from '../Token/Roles';
99
import PathDetailUtil, { RouteDetail } from '../utils/PathDetail'
10-
import { reset } from 'continuation-local-storage';
10+
import PersonService from '../Service/PersonService'
1111

1212
const router: Router = Router();
1313

@@ -58,10 +58,21 @@ router.post('/login', validateLoginBody, (req:Request, res: Response, next) => {
5858
})
5959

6060
PathDetailUtil.registerRoute('/register', 'post', Roles.ALL)
61-
router.post('/register', validateLoginBody, (req:Request, _:Response, _) => {
61+
router.post('/register', validateLoginBody, (req:Request, res:Response, next) => {
6262
const {email, password} = req.body
63-
const person = new Person()
64-
//after register, please create PersonDetail
63+
PersonService.IsEmailRegistered(email)
64+
.then((isRegister):Promise<boolean> => {
65+
if(isRegister) {
66+
res.status(400).json({message: 'User has already registered'})
67+
return Promise.resolve(false)
68+
}
69+
return Promise.resolve(false) //PersonService.registerUser(email, password)
70+
})
71+
.then(resultOfRegistering => {
72+
if(resultOfRegistering) res.status(200).json({message: 'User successfully registered'})
73+
res.status(500).json({message: 'Failed to registered'})
74+
})
75+
.catch(next)
6576
})
6677

6778
export default router;
@@ -73,10 +84,10 @@ const errorContentType = (res) => res.status(400).json({message: 'wrong content
7384

7485
function validateLoginBody(req, res, next){
7586
const body = req.body;
76-
87+
console.log(body)
7788
if(Object.keys(body).length === 0) return errorContentType(res)
78-
if(!("email" in body && "password" in body)) return error400(res, 'username or password is blank')
79-
if(!body.email && !body.password) return error400(res, 'username or password is blank')
89+
if(!("email" in body && "password" in body)) return error400(res, 'email or password is blank')
90+
if(!body.email && !body.password) return error400(res, 'email or password is blank')
8091

8192
return next()
8293
}

0 commit comments

Comments
 (0)