import { createRoute } from "../../../../../modules/api-utils/createRoute"; import { opportunities } from "../../../../../managers/opportunities"; import { apiResponse } from "../../../../../modules/api-utils/apiResponse"; import { ContentfulStatusCode } from "hono/utils/http-status"; import { authMiddleware } from "../../../../middleware/authorization"; import { resolveMember } from "../../../../../modules/cw-utils/members/memberCache"; import { z } from "zod"; /* POST /v1/sales/opportunities/:identifier/notes */ export default createRoute( "post", ["/opportunities/:identifier/notes"], async (c) => { const identifier = c.req.param("identifier"); const body = await c.req.json(); const schema = z.object({ text: z.string().min(1, "Note text is required"), flagged: z.boolean().optional(), }); const data = schema.parse(body); const item = await opportunities.fetchRecord(identifier); const user = c.get("user"); const created = await item.addNote(data.text, user.login, { flagged: data.flagged, }); const response = apiResponse.created( "Opportunity note created successfully!", { id: created.id, text: created.text, type: created.type ? { id: created.type.id, name: created.type.name } : null, flagged: created.flagged, enteredBy: await resolveMember(created.enteredBy), }, ); return c.json(response, response.status as ContentfulStatusCode); }, authMiddleware({ permissions: ["sales.opportunity.note.create"] }), );