import { DatabaseError, ErrorBase, InputError } from "@/errors"; import Logger from "@/lib/logger"; import { MessageEntity } from "@/modules/entities/Message"; import type { FastifyInstance } from "fastify"; import z from "zod/v3"; export default async function MessageDelete(fastify: FastifyInstance) { const logger = new Logger("Endpoint | message/delete"); fastify.post("/", async (req, res) => { res.header("Content-Type", "application/json"); if ("error" in req.token) return res.code(400).send(req.token); const result = z.object({ id: z.string().length(10), }).safeParse(req.body); if (!result.success) { return res.code(400).send(InputError(result.error.issues)); } try { const messageRepo = fastify.orm.em.getRepository(MessageEntity); const itMessage = await messageRepo.findOne({ id: result.data.id }); if (!itMessage) { return res.code(400).send(ErrorBase({ bad: "client", code: "message_not_found", message: "対象のメッセージが見つかりませんでした。", })); } if (itMessage.createdBy.userid !== req.token.user.userid) { return res.code(403).send(ErrorBase({ bad: "client", code: "not_your_message", message: "あなたの送信したメッセージではありません。", })); } await messageRepo.deleteMessage(result.data.id); return res.send({ success: true, }); } catch (err) { logger.error("Database Error:", err); return res.code(500).send(DatabaseError()); } }); }