2026-06-02 00:11:29 +07:00
|
|
|
import type { Request, Response, Router } from "express";
|
2026-06-01 21:44:29 +07:00
|
|
|
import express from "express";
|
2026-08-01 22:09:02 +07:00
|
|
|
import { createChildLogger } from "@/shared/logger/index";
|
2026-08-04 15:37:56 +07:00
|
|
|
import { asyncHandler } from "../../shared/middlewares/index.js";
|
2026-06-01 21:44:29 +07:00
|
|
|
import {
|
|
|
|
|
handleGetAttachmentsByChannel,
|
2026-07-05 04:48:29 +07:00
|
|
|
handleGetImageMessages,
|
2026-06-01 21:44:29 +07:00
|
|
|
handleGetMessageById,
|
|
|
|
|
handleGetMessagesByChannel,
|
|
|
|
|
handleListMessages,
|
2026-06-01 21:53:08 +07:00
|
|
|
} from "./messages.controller.js";
|
2026-06-03 00:17:51 +07:00
|
|
|
import { messagesService } from "./messages.service.js";
|
2026-06-01 21:44:29 +07:00
|
|
|
|
2026-06-02 00:11:29 +07:00
|
|
|
const logger = createChildLogger("messages.routes");
|
|
|
|
|
|
2026-06-01 21:44:29 +07:00
|
|
|
export function createMessagesRouter(): Router {
|
|
|
|
|
const router = express.Router();
|
|
|
|
|
|
2026-07-05 04:48:29 +07:00
|
|
|
// GET /api/messages/images - Get messages with image attachments
|
|
|
|
|
// MUST be registered BEFORE /messages/:channelId so "images" is not
|
|
|
|
|
// captured as a channelId param.
|
|
|
|
|
router.get("/messages/images", handleGetImageMessages);
|
|
|
|
|
|
2026-06-01 21:44:29 +07:00
|
|
|
// GET /api/messages - List messages
|
|
|
|
|
router.get("/messages", handleListMessages);
|
|
|
|
|
|
|
|
|
|
// GET /api/messages/:channelId - Get messages by channel
|
|
|
|
|
router.get("/messages/:channelId", handleGetMessagesByChannel);
|
|
|
|
|
|
|
|
|
|
// GET /api/messages/:channelId/attachments - Get attachments by channel
|
|
|
|
|
router.get("/messages/:channelId/attachments", handleGetAttachmentsByChannel);
|
|
|
|
|
|
2026-06-02 10:44:27 +07:00
|
|
|
// GET /api/messages/detail/:id - Get single message by ID
|
|
|
|
|
// (uses /detail/ prefix to avoid collision with :channelId route above)
|
|
|
|
|
router.get("/messages/detail/:id", handleGetMessageById);
|
2026-06-01 21:44:29 +07:00
|
|
|
|
2026-06-02 00:11:29 +07:00
|
|
|
// GET /api/review - Get flagged/warned messages for review
|
|
|
|
|
router.get(
|
|
|
|
|
"/review",
|
|
|
|
|
asyncHandler(async (req: Request, res: Response) => {
|
|
|
|
|
const limit = Number(req.query.limit) || 20;
|
|
|
|
|
const channelId = (req.query.channelId as string) || undefined;
|
|
|
|
|
|
2026-06-09 10:16:04 +07:00
|
|
|
const rows = await messagesService.getReviewMessages(channelId, limit);
|
2026-06-02 00:11:29 +07:00
|
|
|
logger.debug({ limit, channelId }, "Review query executed");
|
|
|
|
|
res.json({ results: rows, limit, cursor: null });
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
|
2026-06-01 21:44:29 +07:00
|
|
|
return router;
|
|
|
|
|
}
|