add project update route

This commit is contained in:
João Geonizeli
2022-07-09 15:24:14 -03:00
parent 82c078f5db
commit 8c66fa8c85
4 changed files with 83 additions and 33 deletions

View File

@@ -7,14 +7,14 @@ const router = Router();
export const apiNamespace = "/projects";
router.get(apiNamespace, async (req, res) => {
const projects = await ProjectService.listAllByUserId(req.userId)
const projects = await ProjectService.listAllByUserId(req.userId);
const response: ProjectDto[] = projects.map<ProjectDto>(project => ({
const response: ProjectDto[] = projects.map<ProjectDto>((project) => ({
id: project.id,
name: project.name
}))
name: project.name,
}));
res.json(response)
res.json(response);
});
router.post(apiNamespace, (req, res) => {
@@ -22,42 +22,73 @@ router.post(apiNamespace, (req, res) => {
ProjectService.create({
name,
userId: req.userId
}).then(project => {
userId: req.userId,
})
.then((project) => {
const respose: ProjectDto = {
id: project.id,
name: project.name
}
name: project.name,
};
res.json(respose);
}).catch(err => {
res.status(422).json({
error: err.message
});
})
.catch((err) => {
res.status(422).json({
error: err.message,
});
});
});
router.put(`${apiNamespace}/:id`, async (req, res) => {
const { id } = req.params;
const { name } = req.body;
const projectId = parseInt(id);
const userProjects = await ProjectService.listAllByUserId(req.userId);
const projectToBeUpdated = userProjects.find(
(project) => project.id === projectId
);
if (projectToBeUpdated) {
ProjectService.update(projectToBeUpdated, {
name,
}).then((success) => {
if (success) {
res.status(204).json();
} else {
res.status(402).json();
}
});
} else {
res.status(404).json({
error: "Project not found",
});
}
});
router.delete(`${apiNamespace}/:id`, async (req, res, next) => {
const { id } = req.params;
const projectId = parseInt(id)
const projectId = parseInt(id);
const userProjects = await ProjectService.listAllByUserId(req.userId)
const projecToBeDeleted = userProjects.find(project => project.id === projectId)
const userProjects = await ProjectService.listAllByUserId(req.userId);
const projecToBeDeleted = userProjects.find(
(project) => project.id === projectId
);
if (projecToBeDeleted) {
const success = await ProjectService.destroy(projecToBeDeleted)
const success = await ProjectService.destroy(projecToBeDeleted);
if (success) {
res.json({ success })
res.json({ success });
} else {
res.status(422).json({
error: "Could not delete project"
})
error: "Could not delete project",
});
}
} else {
res.status(404).json({
error: "Project not found"
})
error: "Project not found",
});
}
});

View File

@@ -1,4 +1,3 @@
export type UpdateProjectDto = {
id: string
name: string
}

View File

@@ -1,6 +1,11 @@
import { IsNotEmpty } from "class-validator";
import {
Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn
Column,
Entity,
JoinColumn,
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
} from "typeorm";
import { Task } from "./task.entity";
import { User } from "./user.entity";
@@ -14,7 +19,10 @@ export class Project {
@IsNotEmpty()
name: string;
@ManyToOne((_type) => User, (user) => user.projects)
@ManyToOne((_type) => User, (user) => user.projects, {
onUpdate: "CASCADE",
onDelete: "CASCADE",
})
@JoinColumn()
@IsNotEmpty()
user: User;

View File

@@ -1,5 +1,6 @@
import { validate } from "class-validator";
import { NewProjectDto } from "../dto/newProject.dto";
import { UpdateProjectDto } from "../dto/updateProject.dto";
import { Project } from "../entity/project.entity";
import { User } from "../entity/user.entity";
import { projectRepository } from "../repository/project.repository";
@@ -10,7 +11,7 @@ async function create(newProject: NewProjectDto): Promise<Project> {
const user = await UserService.findUserById(newProject.userId);
project.name = newProject.name;
project.user = user
project.user = user;
const errors = await validate(project);
@@ -32,13 +33,24 @@ async function destroy(project: Project): Promise<boolean>{
const query = projectRepository.createQueryBuilder();
query.where('"id" = :projectId', { projectId: project.id });
const result = await query.delete().execute()
const result = await query.delete().execute();
return result.affected > 0;
}
async function update(
project: Project,
updateProjectDto: UpdateProjectDto
): Promise<boolean> {
projectRepository.merge(project, updateProjectDto);
const updateResult = await projectRepository.save(project);
return !!updateResult;
}
export const ProjectService = {
create,
listAllByUserId,
destroy
destroy,
update,
};