54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
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());
|
|
}
|
|
});
|
|
} |