import { Inject, Body, Controller, Delete, Get, Param, Patch, Post, Req } from "@nestjs/common"; import type { Request } from "express"; import { TeamsService } from "./teams.service.js"; import { ZodValidate } from "../../common/pipes/zod-validation.pipe.js"; import { requireActor } from "../../common/types.js"; import { CreateTeamDto, type CreateTeamInput, TeamMemberDto, type TeamMemberInput, UpdateTeamDto, type UpdateTeamInput } from "./dto.js"; @Controller("workspaces/:workspaceId/teams") export class TeamsController { constructor(@Inject(TeamsService) private readonly teams: TeamsService) {} @Get() list(@Param("workspaceId") workspaceId: string, @Req() req: Request) { return this.teams.list(workspaceId, requireActor(req)); } @Post() create( @Param("workspaceId") workspaceId: string, @Body(ZodValidate(CreateTeamDto)) body: CreateTeamInput, @Req() req: Request ) { return this.teams.create(workspaceId, requireActor(req), body, req); } @Get(":teamId") get(@Param("workspaceId") workspaceId: string, @Param("teamId") teamId: string, @Req() req: Request) { return this.teams.get(workspaceId, teamId, requireActor(req)); } @Patch(":teamId") update( @Param("workspaceId") workspaceId: string, @Param("teamId") teamId: string, @Body(ZodValidate(UpdateTeamDto)) body: UpdateTeamInput, @Req() req: Request ) { return this.teams.update(workspaceId, teamId, requireActor(req), body, req); } @Delete(":teamId") remove(@Param("workspaceId") workspaceId: string, @Param("teamId") teamId: string, @Req() req: Request) { return this.teams.remove(workspaceId, teamId, requireActor(req), req).then(() => ({ deleted: true })); } @Post(":teamId/members") addMember( @Param("workspaceId") workspaceId: string, @Param("teamId") teamId: string, @Body(ZodValidate(TeamMemberDto)) body: TeamMemberInput, @Req() req: Request ) { return this.teams.addMember(workspaceId, teamId, requireActor(req), body.userId, req); } @Delete(":teamId/members/:userId") removeMember( @Param("workspaceId") workspaceId: string, @Param("teamId") teamId: string, @Param("userId") userId: string, @Req() req: Request ) { return this.teams.removeMember(workspaceId, teamId, requireActor(req), userId, req).then(() => ({ removed: true })); } }