feat: add register member logic
This commit is contained in:
parent
91e1f142ad
commit
8e2d6b7801
@ -1,15 +1,46 @@
|
|||||||
import { Request, Response, Router } from 'express';
|
import { Request, Response, Router } from 'express';
|
||||||
import bcrypt from 'bcrypt';
|
import bcrypt from 'bcrypt';
|
||||||
import { Member, User } from '../types/member';
|
import { Member, User } from '../types/member';
|
||||||
|
import { new_client } from '../db/db_client';
|
||||||
|
import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
||||||
|
|
||||||
const defaultMember = { id_member: -1, name: "unknown" };
|
const defaultUser = { id_member: -1, name: "unknown" };
|
||||||
|
const defaultMember = { id_member: -1, name: "unknown", password: "none" };
|
||||||
|
|
||||||
function getMember(idOrName: number | string): Member {
|
async function getMember(idOrName: number | string): Promise<Either<Member, string>> {
|
||||||
return defaultMember;
|
const client = new_client();
|
||||||
|
await client.connect();
|
||||||
|
|
||||||
|
const res = await client.query("SELECT * FROM membres WHERE 'id_membre'='$1' OR 'nom_membre'='$2';", [`${idOrName}`, `${idOrName}`]);
|
||||||
|
if (res.rows.length === 0) {
|
||||||
|
await client.end();
|
||||||
|
return eitherRight<Member, string>("Does not exist.");
|
||||||
|
}
|
||||||
|
const member: Member = { id_member: res.rows[0].id_member, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre };
|
||||||
|
await client.end();
|
||||||
|
|
||||||
|
return eitherLeft<Member, string>(member);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createMember(name: string, passwd: string): Member {
|
async function createMember(name: string, passwd: string): Promise<Either<Member, string>> {
|
||||||
return defaultMember;
|
const gettingMember = await getMember(name);
|
||||||
|
if (!gettingMember.hasError) {
|
||||||
|
return eitherRight("Already in database.");
|
||||||
|
}
|
||||||
|
const client = new_client();
|
||||||
|
await client.connect();
|
||||||
|
const res = await client.query("INSERT INTO membres ('nom_membre', 'mdp_membre') VALUES ('$1', '$2') RETURNING *;", [`${name}`, `${passwd}`]);
|
||||||
|
if (res.rows.length === 0) {
|
||||||
|
await client.end();
|
||||||
|
return eitherRight("Something went wrong");
|
||||||
|
}
|
||||||
|
const member: Member = { id_member: res.rows[0].id_member, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre };
|
||||||
|
await client.end();
|
||||||
|
return eitherLeft(member);
|
||||||
|
}
|
||||||
|
|
||||||
|
function userAdapter(member: Member): User {
|
||||||
|
return { id_member: member.id_member, name: member.name };
|
||||||
}
|
}
|
||||||
|
|
||||||
const register = (req: Request, res: Response) => {
|
const register = (req: Request, res: Response) => {
|
||||||
@ -21,16 +52,20 @@ const register = (req: Request, res: Response) => {
|
|||||||
const name: string = req.body.name;
|
const name: string = req.body.name;
|
||||||
bcrypt.genSalt(10, (err, salt) => {
|
bcrypt.genSalt(10, (err, salt) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
// Handle error
|
res.status(500);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bcrypt.hash(req.body.password, salt, (err, hash) => {
|
bcrypt.hash(req.body.password, salt, async (err, hash) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
// Handle error
|
res.status(500);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
res.send(createMember(name, hash));
|
const member: Either<Member, string> = await createMember(name, hash);
|
||||||
|
if (member.hasError)
|
||||||
|
res.send(member.error);
|
||||||
|
else
|
||||||
|
res.send(userAdapter(member.value));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
type Member = {
|
type User = {
|
||||||
id_member: number,
|
id_member: number,
|
||||||
name: string
|
name: string
|
||||||
}
|
}
|
||||||
|
|
||||||
type User = Member | { password: string };
|
type Member = User & { password: string };
|
||||||
|
|
||||||
export { Member, User };
|
export { Member, User };
|
||||||
|
15
back-end/src/utils/utils.ts
Normal file
15
back-end/src/utils/utils.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
type Either<T, U> = {
|
||||||
|
hasError: boolean,
|
||||||
|
value: T,
|
||||||
|
error: U
|
||||||
|
};
|
||||||
|
|
||||||
|
function eitherLeft<T, U>(val: T): Either<T, U> {
|
||||||
|
return { hasError: false, value: val, error: undefined };
|
||||||
|
}
|
||||||
|
|
||||||
|
function eitherRight<T, U>(error: U): Either<T, U> {
|
||||||
|
return { hasError: true, value: undefined, error: error };
|
||||||
|
}
|
||||||
|
|
||||||
|
export { Either, eitherLeft, eitherRight };
|
Loading…
x
Reference in New Issue
Block a user