From a44c50df294b6b3696deaafc40d1570c5a6734af Mon Sep 17 00:00:00 2001 From: Takeshi Kimata <117462761+kimatata@users.noreply.github.com> Date: Sun, 18 Feb 2024 11:06:02 +0900 Subject: [PATCH] delete project --- backend/index.js | 2 + backend/routes/projects/delete.js | 29 ++++++++++++ frontend/app/projects/page.tsx | 45 ++++++++++++++++-- frontend/app/projects/project-card.tsx | 65 +++++++++++++++++--------- frontend/components/icons.tsx | 19 ++++++++ 5 files changed, 133 insertions(+), 27 deletions(-) create mode 100644 backend/routes/projects/delete.js diff --git a/backend/index.js b/backend/index.js index 94fbf68..c8ecab6 100644 --- a/backend/index.js +++ b/backend/index.js @@ -26,8 +26,10 @@ app.use("/", indexRoute); // "/projects" const projectsIndexRoute = require('./routes/projects/index')(sequelize); const projectsNewRoute = require('./routes/projects/new')(sequelize); +const projectsDeleteRoute = require('./routes/projects/delete')(sequelize); app.use('/projects', projectsIndexRoute); app.use('/projects', projectsNewRoute); +app.use('/projects', projectsDeleteRoute); // "/folders" const foldersIndexRoute = require('./routes/folders/index')(sequelize); diff --git a/backend/routes/projects/delete.js b/backend/routes/projects/delete.js new file mode 100644 index 0000000..69e62eb --- /dev/null +++ b/backend/routes/projects/delete.js @@ -0,0 +1,29 @@ +const express = require("express"); +const router = express.Router(); +const defineProject = require("../../models/projects"); +const { DataTypes } = require("sequelize"); + +module.exports = function (sequelize) { + const Project = defineProject(sequelize, DataTypes); + + router.delete("/:projectId", async (req, res) => { + const projectId = req.params.projectId; + try { + const project = await Project.findOne({ + where: { + id: projectId, + }, + }); + if (!project) { + return res.status(404).send("Project not found"); + } + await project.destroy(); + res.status(204).send(); + } catch (error) { + console.error(error); + res.status(500).send("Internal Server Error"); + } + }); + + return router; +}; diff --git a/frontend/app/projects/page.tsx b/frontend/app/projects/page.tsx index 8a4417b..8c487dd 100644 --- a/frontend/app/projects/page.tsx +++ b/frontend/app/projects/page.tsx @@ -79,6 +79,27 @@ async function createProject(name, detail) { } } +async function deleteProject(projectId: number) { + const fetchOptions = { + method: "DELETE", + headers: { + "Content-Type": "application/json", + }, + }; + + const url = `${apiServer}/projects/${projectId}`; + + try { + const response = await fetch(url, fetchOptions); + if (!response.ok) { + throw new Error(`HTTP error! Status: ${response.status}`); + } + } catch (error) { + console.error("Error deleting project:", error); + throw error; + } +} + export default function ProjectsPage() { // projects const [projects, setProjects] = useState([]); @@ -144,6 +165,15 @@ export default function ProjectsPage() { } }; + const onDeleteClicked = async (projectId: number) => { + try { + await deleteProject(projectId); + setProjects(projects.filter((project) => project.id !== projectId)); + } catch (error) { + console.error("Error deleting project:", error); + } + }; + return (