1import { Inject, Body, Controller, Get, Param, Patch, Post, Req } from "@nestjs/common"; 2import type { Request } from "express"; 3import { OrgsService } from "./orgs.service.js"; 4import { ZodValidate } from "../../common/pipes/zod-validation.pipe.js"; 5import { requireUser } from "../../common/types.js"; 6import { 7 CreateOrgDto, 8 type CreateOrgInput, 9 InviteOrgMemberDto, 10 type InviteOrgMemberInput, 11 UpdateOrgDto, 12 type UpdateOrgInput 13} from "./dto.js"; 14 15@Controller("orgs") 16export class OrgsController { 17 constructor(@Inject(OrgsService) private readonly orgs: OrgsService) {} 18 19 @Get() 20 list(@Req() req: Request) { 21 return this.orgs.listMine(requireUser(req)); 22 } 23 24 @Post() 25 create( 26 @Body(ZodValidate(CreateOrgDto)) body: CreateOrgInput, 27 @Req() req: Request 28 ) { 29 return this.orgs.create(requireUser(req), body); 30 } 31 32 @Get(":id") 33 get(@Param("id") id: string, @Req() req: Request) { 34 return this.orgs.get(id, requireUser(req)); 35 } 36 37 @Patch(":id") 38 update( 39 @Param("id") id: string, 40 @Body(ZodValidate(UpdateOrgDto)) body: UpdateOrgInput, 41 @Req() req: Request 42 ) { 43 return this.orgs.update(id, requireUser(req), body, req); 44 } 45 46 @Post(":id/members/invites") 47 invite( 48 @Param("id") id: string, 49 @Body(ZodValidate(InviteOrgMemberDto)) body: InviteOrgMemberInput, 50 @Req() req: Request 51 ) { 52 return this.orgs.inviteMember(id, requireUser(req), body, req); 53 } 54} 55