import { Inject, Body, Controller, Get, Param, Patch, Post, Req } from "@nestjs/common"; import type { Request } from "express"; import { OrgsService } from "./orgs.service.js"; import { ZodValidate } from "../../common/pipes/zod-validation.pipe.js"; import { requireUser } from "../../common/types.js"; import { CreateOrgDto, type CreateOrgInput, InviteOrgMemberDto, type InviteOrgMemberInput, UpdateOrgDto, type UpdateOrgInput } from "./dto.js"; @Controller("orgs") export class OrgsController { constructor(@Inject(OrgsService) private readonly orgs: OrgsService) {} @Get() list(@Req() req: Request) { return this.orgs.listMine(requireUser(req)); } @Post() create( @Body(ZodValidate(CreateOrgDto)) body: CreateOrgInput, @Req() req: Request ) { return this.orgs.create(requireUser(req), body); } @Get(":id") get(@Param("id") id: string, @Req() req: Request) { return this.orgs.get(id, requireUser(req)); } @Patch(":id") update( @Param("id") id: string, @Body(ZodValidate(UpdateOrgDto)) body: UpdateOrgInput, @Req() req: Request ) { return this.orgs.update(id, requireUser(req), body, req); } @Post(":id/members/invites") invite( @Param("id") id: string, @Body(ZodValidate(InviteOrgMemberDto)) body: InviteOrgMemberInput, @Req() req: Request ) { return this.orgs.inviteMember(id, requireUser(req), body, req); } }