Merge branch 'task-32-fix/fix_date_login_role' into 'development'

Task 32 fix/fix date login role

See merge request !14
parents d10cdbd9 3bd0027b
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
"@types/cors": "^2.8.12", "@types/cors": "^2.8.12",
"@types/express": "^4.17.14", "@types/express": "^4.17.14",
"bcrypt": "^5.1.0", "bcrypt": "^5.1.0",
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2", "class-validator": "^0.13.2",
"cors": "^2.8.5", "cors": "^2.8.5",
"express": "^4.18.2", "express": "^4.18.2",
...@@ -2491,6 +2492,11 @@ ...@@ -2491,6 +2492,11 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/class-transformer": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
"integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="
},
"node_modules/class-validator": { "node_modules/class-validator": {
"version": "0.13.2", "version": "0.13.2",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz",
...@@ -7724,6 +7730,11 @@ ...@@ -7724,6 +7730,11 @@
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
}, },
"class-transformer": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
"integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="
},
"class-validator": { "class-validator": {
"version": "0.13.2", "version": "0.13.2",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz",
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
"@types/cors": "^2.8.12", "@types/cors": "^2.8.12",
"@types/express": "^4.17.14", "@types/express": "^4.17.14",
"bcrypt": "^5.1.0", "bcrypt": "^5.1.0",
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2", "class-validator": "^0.13.2",
"cors": "^2.8.5", "cors": "^2.8.5",
"express": "^4.18.2", "express": "^4.18.2",
......
...@@ -36,10 +36,6 @@ import { ...@@ -36,10 +36,6 @@ import {
description!: string description!: string
@CreateDateColumn({ name: 'created_at', type: Date, default: new Date() }) @CreateDateColumn({ name: 'created_at', type: Date, default: new Date() })
createdAt!: Date; createdAt!: Date;
@Column({ name: 'dateTimeStart', type: 'varchar',nullable: true })
dateTimeStart!: Date | null;
@Column({ name: 'dateTimeDue', type: 'varchar',nullable: true })
dateTimeDue!: Date | null;
@Column({ @Column({
type: "enum", type: "enum",
enum: ["opened", "done" , "failed"], enum: ["opened", "done" , "failed"],
...@@ -47,6 +43,10 @@ import { ...@@ -47,6 +43,10 @@ import {
}) })
accomplish!: taskFinishType accomplish!: taskFinishType
@Column({ name: 'dateTimeStart', type: Date,nullable: true })
dateTimeStart!: Date | null;
@Column({ name: 'dateTimeDue', type: Date,nullable: true })
dateTimeDue!: Date | null;
@ManyToOne(() => User, (user: { tasks: Task[]; }) => user.tasks,{eager : true}) @ManyToOne(() => User, (user: { tasks: Task[]; }) => user.tasks,{eager : true})
author!: User; author!: User;
...@@ -54,10 +54,10 @@ import { ...@@ -54,10 +54,10 @@ import {
@ManyToMany(() => User,{eager : true}) @ManyToMany(() => User,{eager : true})
@JoinTable() @JoinTable()
executors!: User[]; executors!: User[];
@ManyToOne(()=>Project,(project:{tasks: Task[]}) => project.tasks) @ManyToOne(()=>Project,(project:{tasks: Task[]}) => project.tasks)
project!: Project | null; project!: Project | null;
} }
...@@ -7,11 +7,11 @@ import { ...@@ -7,11 +7,11 @@ import {
BaseEntity, BaseEntity,
ManyToMany, ManyToMany,
OneToMany, OneToMany,
JoinTable JoinTable,
} from 'typeorm'; } from 'typeorm';
import {IsEmail import {IsEmail
} from "class-validator"; } from "class-validator";
import { Exclude, instanceToPlain } from "class-transformer";
import bcrypt from 'bcrypt'; import bcrypt from 'bcrypt';
import {nanoid} from 'nanoid'; import {nanoid} from 'nanoid';
import {Task} from './Task'; import {Task} from './Task';
...@@ -20,17 +20,17 @@ import {Project} from './Project'; ...@@ -20,17 +20,17 @@ import {Project} from './Project';
const SALT_WORK_FACTOR= 10; const SALT_WORK_FACTOR= 10;
type userRoleType = "worker" | "director"; export enum UserRole {USER="user" ,DIRECTOR= "director",SUPERUSER="superuser"}
interface IUser { interface IUser {
id:string; id:string;
role: UserRole;
name: string; name: string;
surname: string; surname: string;
email: string; email: string;
displayName: string; displayName: string;
password:string; password:string;
token: string; token: string;
role: userRoleType;
createdAt: Date; createdAt: Date;
createdTasks:Task[]; createdTasks:Task[];
workerInProjects:Project[]; workerInProjects:Project[];
...@@ -67,12 +67,13 @@ export class User extends BaseEntity implements IUser { ...@@ -67,12 +67,13 @@ export class User extends BaseEntity implements IUser {
@Column({ @Column({
type: "enum", type: "enum",
enum: ["worker", "director"], enum: UserRole,
default: "worker" default: UserRole.USER
}) })
role!: userRoleType role!: UserRole
@Column({ type: 'varchar', nullable: false, select:false }) @Column({ type: 'varchar', nullable: false, select:true })
@Exclude({ toPlainOnly: true })
password!: string password!: string
...@@ -106,20 +107,16 @@ export class User extends BaseEntity implements IUser { ...@@ -106,20 +107,16 @@ export class User extends BaseEntity implements IUser {
public async checkPassword( public async checkPassword(
candidatePassword: string, candidatePassword: string,
):Promise<boolean> { ):Promise<boolean> {
console.log("Checking password", candidatePassword,'this.password', this.password)
return await bcrypt.compare(candidatePassword, this.password); return await bcrypt.compare(candidatePassword, this.password);
} }
toJSON() {
return instanceToPlain(this);
} }
}
......
...@@ -17,7 +17,7 @@ export default router; ...@@ -17,7 +17,7 @@ export default router;
router.post('/', async(req:Request, res:Response):Promise<Response>=>{ router.post('/', async(req:Request, res:Response):Promise<Response>=>{
const token = req.get('Authorization'); const token = req.get('Authorization');
const newTask = new Task(); const newTask = new Task();
const {title,description,project,executors,dateTimeDue,dateTimeStart} = req.body; const {title,description,project,executors,dateTimeDue,dateTimeStart,accomplish} = req.body;
const user = await dataSource const user = await dataSource
.createQueryBuilder() .createQueryBuilder()
.select("user") .select("user")
...@@ -32,6 +32,7 @@ router.post('/', async(req:Request, res:Response):Promise<Response>=>{ ...@@ -32,6 +32,7 @@ router.post('/', async(req:Request, res:Response):Promise<Response>=>{
newTask.dateTimeDue = dateTimeDue; newTask.dateTimeDue = dateTimeDue;
newTask.dateTimeStart = dateTimeStart; newTask.dateTimeStart = dateTimeStart;
newTask.author= user; newTask.author= user;
newTask.accomplish = accomplish;
await newTask.save(); await newTask.save();
return res.send({newTask}) return res.send({newTask})
}) })
......
...@@ -17,7 +17,7 @@ return res.send({users}) ...@@ -17,7 +17,7 @@ return res.send({users})
router.post('/', async (req : Request, res : Response):Promise<object> => { router.post('/', async (req : Request, res : Response):Promise<object> => {
const {name,surname,password,email} = req.body; const {name,surname,password,email, role} = req.body;
const displayName = surname+' '+name[0]+'.' const displayName = surname+' '+name[0]+'.'
const user = new User(); const user = new User();
user.name = name; user.name = name;
...@@ -25,6 +25,7 @@ router.post('/', async (req : Request, res : Response):Promise<object> => { ...@@ -25,6 +25,7 @@ router.post('/', async (req : Request, res : Response):Promise<object> => {
user.password = password; user.password = password;
user.displayName= displayName; user.displayName= displayName;
user.email = email; user.email = email;
user.role = role;
user.generateToken() user.generateToken()
await user.save(); await user.save();
const userToFront:User|null = await dataSource.manager.findOneBy(User, { const userToFront:User|null = await dataSource.manager.findOneBy(User, {
...@@ -41,9 +42,9 @@ router.post('/sessions/', async (req : Request, res : Response):Promise<object> ...@@ -41,9 +42,9 @@ router.post('/sessions/', async (req : Request, res : Response):Promise<object>
.select("user") .select("user")
.from(User, "user") .from(User, "user")
.where("user.email = :email", { email: email }) .where("user.email = :email", { email: email })
.addSelect('password')
.getOne() .getOne()
if(!user) return res.status(404).send({Message:'user not found'}) if(!user) return res.status(404).send({Message:'user not found'})
const isMatch:boolean = await user.checkPassword(password); const isMatch:boolean = await user.checkPassword(password);
if (!isMatch) return res.status(400).send({ if (!isMatch) return res.status(400).send({
error: "Wrong Password" error: "Wrong Password"
...@@ -67,7 +68,6 @@ router.delete('/sessions', async(req: Request, res: Response):Promise<void | obj ...@@ -67,7 +68,6 @@ router.delete('/sessions', async(req: Request, res: Response):Promise<void | obj
token: token token: token
}) })
if(!user) return res.send({successMsg}); if(!user) return res.send({successMsg});
console.log('token: ' + token)
user.token = nanoid(); user.token = nanoid();
await user.save(); await user.save();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment