Spaces:
Sleeping
Sleeping
| import { FastifyInstance } from 'fastify'; | |
| import * as issueMeasureService from '../services/issueMeasure.service.js'; | |
| interface ScoreParams { | |
| id: string; | |
| } | |
| interface MeasureParams extends ScoreParams { | |
| measureIndex: string; | |
| } | |
| interface ListQuery { | |
| offset?: string; | |
| limit?: string; | |
| status?: string | string[]; | |
| } | |
| interface UpsertBody { | |
| measureIndex: number; | |
| measure: any; | |
| status: number; | |
| annotator?: string; | |
| } | |
| export default async function issueMeasuresRoutes(fastify: FastifyInstance) { | |
| // List issue measures for a score | |
| fastify.get<{ Params: ScoreParams; Querystring: ListQuery }>('/scores/:id/issueMeasures', async (request) => { | |
| const { offset, limit, status } = request.query; | |
| const statusArr = status ? (Array.isArray(status) ? status : [status]).map(Number).filter((n) => !isNaN(n)) : undefined; | |
| const result = await issueMeasureService.list(request.params.id, { | |
| offset: offset ? parseInt(offset, 10) : 0, | |
| limit: limit ? parseInt(limit, 10) : 200, | |
| status: statusArr, | |
| }); | |
| return { code: 0, data: result }; | |
| }); | |
| // Upsert issue measure for a score | |
| fastify.put<{ Params: ScoreParams; Body: UpsertBody }>('/scores/:id/issueMeasures', async (request, reply) => { | |
| const { measureIndex, measure, status, annotator } = request.body || {}; | |
| if (measureIndex === undefined || !measure || status === undefined) { | |
| reply.code(400); | |
| return { code: 400, message: 'measureIndex, measure, and status are required' }; | |
| } | |
| const result = await issueMeasureService.upsert(request.params.id, measureIndex, measure, status, annotator); | |
| return { code: 0, data: result }; | |
| }); | |
| // Delete all issue measures for a score | |
| fastify.delete<{ Params: ScoreParams }>('/scores/:id/issueMeasures', async (request) => { | |
| const count = await issueMeasureService.deleteByScore(request.params.id); | |
| return { code: 0, data: { deleted: count } }; | |
| }); | |
| } | |