File size: 3,030 Bytes
1f21206 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | /**
* Teams REST API
*
* GET /api/teams β εεΊζζε’ι
* GET /api/teams/:name β θ·εε’ιθ―¦ζ
* GET /api/teams/:name/members/:id/transcript β θ·εζε transcript
* POST /api/teams/:name/members/:id/messages β η»ζεειζΆζ―
* DELETE /api/teams/:name β ε ι€ε’ι
*/
import { teamService } from '../services/teamService.js'
import { ApiError, errorResponse } from '../middleware/errorHandler.js'
export async function handleTeamsApi(
req: Request,
_url: URL,
segments: string[],
): Promise<Response> {
try {
const method = req.method
const teamName = segments[2] ? decodeURIComponent(segments[2]) : undefined
// ββ GET /api/teams ββββββββββββββββββββββββββββββββββββββββββββββββββββ
if (method === 'GET' && !teamName) {
const teams = await teamService.listTeams()
return Response.json({ teams })
}
// ββ GET /api/teams/:name/members/:id/transcript βββββββββββββββββββββββ
if (
method === 'GET' &&
teamName &&
segments[3] === 'members' &&
segments[4] &&
segments[5] === 'transcript'
) {
const agentId = decodeURIComponent(segments[4])
const messages = await teamService.getMemberTranscript(teamName, agentId)
return Response.json({ messages })
}
// ββ POST /api/teams/:name/members/:id/messages βββββββββββββββββββββββββ
if (
method === 'POST' &&
teamName &&
segments[3] === 'members' &&
segments[4] &&
segments[5] === 'messages'
) {
const agentId = decodeURIComponent(segments[4])
let body: { content?: string }
try {
body = (await req.json()) as { content?: string }
} catch {
throw ApiError.badRequest('Invalid JSON body')
}
await teamService.sendMemberMessage(teamName, agentId, body.content ?? '')
return Response.json({ ok: true })
}
// ββ GET /api/teams/:name ββββββββββββββββββββββββββββββββββββββββββββββ
if (method === 'GET' && teamName) {
const team = await teamService.getTeam(teamName)
return Response.json(team)
}
// ββ DELETE /api/teams/:name βββββββββββββββββββββββββββββββββββββββββββ
if (method === 'DELETE' && teamName) {
await teamService.deleteTeam(teamName)
return Response.json({ ok: true })
}
throw new ApiError(
405,
`Method ${method} not allowed on /api/teams${teamName ? `/${teamName}` : ''}`,
'METHOD_NOT_ALLOWED',
)
} catch (error) {
return errorResponse(error)
}
}
|