Files
dzone-api/src/modules/companies/companies.controller.ts
T
2025-05-19 16:15:15 +03:30

102 lines
4.3 KiB
TypeScript

import { Body, Controller, Delete, Get, Param, Patch, Post, Query, UseInterceptors } from "@nestjs/common";
import { ApiOperation } from "@nestjs/swagger";
import { CompanyListPublicQueryDto, CompanyListQueryDto } from "./DTO/company-list-query.dto";
import { ApproveCompanyRequestDto, CreateCompanyDto, CreateCompanyRequestDto } from "./DTO/create-company.dto";
import { UpdateCompanyDto } from "./DTO/update-company.dto";
import { CompaniesService } from "./services/companies.service";
import { AuthGuards } from "../../common/decorators/auth-guard.decorator";
import { BusinessDec } from "../../common/decorators/business.decorator";
import { UserDec } from "../../common/decorators/user.decorator";
import { ParamDto } from "../../common/DTO/param.dto";
import { BusinessInterceptor } from "../../core/interceptors/business.interceptor";
import { Business } from "../businesses/entities/business.entity";
@Controller("companies")
@UseInterceptors(BusinessInterceptor)
export class CompaniesController {
constructor(private readonly companiesService: CompaniesService) {}
@Post()
@AuthGuards()
@ApiOperation({ summary: "create company (admin)" })
create(@Body() createCompanyDto: CreateCompanyDto, @BusinessDec() business: Business) {
return this.companiesService.create(createCompanyDto, business);
}
@Patch(":id")
@AuthGuards()
@ApiOperation({ summary: "update company (admin)" })
update(@Param() paramDto: ParamDto, @Body() updateCompanyDto: UpdateCompanyDto, @BusinessDec("id") businessId: string) {
return this.companiesService.updateCompanyById(paramDto.id, updateCompanyDto, businessId);
}
@Delete(":id")
@AuthGuards()
@ApiOperation({ summary: "delete company (admin)" })
delete(@Param() paramDto: ParamDto, @BusinessDec("id") businessId: string) {
return this.companiesService.deleteCompanyById(paramDto.id, businessId);
}
@Get("list")
@AuthGuards()
@ApiOperation({ summary: "get companies list (admin)" })
getCompaniesList(@Query() query: CompanyListQueryDto, @BusinessDec("id") businessId: string) {
return this.companiesService.getCompaniesList(query, businessId);
}
@Get("list/public")
@ApiOperation({ summary: "get companies list (public)" })
getCompaniesListPublic(@Query() queryDto: CompanyListPublicQueryDto, @BusinessDec("id") businessId: string) {
return this.companiesService.getCompaniesListPublic(queryDto, businessId);
}
@Get("public/:id")
@ApiOperation({ summary: "get company by id (public)" })
getCompanyByIdPublic(@Param() paramDto: ParamDto, @BusinessDec("id") businessId: string) {
return this.companiesService.getCompanyByIdPublic(paramDto.id, businessId);
}
@Get(":id")
@AuthGuards()
@ApiOperation({ summary: "get company by id" })
get(@Param() paramDto: ParamDto, @BusinessDec("id") businessId: string) {
return this.companiesService.getCompanyById(paramDto.id, businessId);
}
@Patch(":id/toggle-status")
@AuthGuards()
@ApiOperation({ summary: "toggle company status (admin)" })
toggleStatus(@Param() paramDto: ParamDto, @BusinessDec("id") businessId: string) {
return this.companiesService.toggleStatus(paramDto.id, businessId);
}
@Post("requests")
@AuthGuards()
@ApiOperation({ summary: "submit company registration request (user)" })
createCompanyRequest(@Body() createDto: CreateCompanyRequestDto, @UserDec("id") userId: string, @BusinessDec() business: Business) {
return this.companiesService.createCompanyRequest(createDto, userId, business);
}
@Get("requests/user")
@AuthGuards()
@ApiOperation({ summary: "get all company registration requests (user)" })
getCompanyRequestsUser(@UserDec("id") userId: string, @BusinessDec("id") businessId: string) {
return this.companiesService.getCompanyRequestsUser(userId, businessId);
}
@Get("requests")
@AuthGuards()
@ApiOperation({ summary: "get all company registration requests (admin)" })
getCompanyRequests(@BusinessDec("id") businessId: string) {
return this.companiesService.getCompanyRequests(businessId);
}
@Patch("requests/:id/approve")
@AuthGuards()
@ApiOperation({ summary: "approve/reject company registration request (admin)" })
approveCompanyRequest(@Param() paramDto: ParamDto, @Body() approveDto: ApproveCompanyRequestDto, @BusinessDec("id") businessId: string) {
return this.companiesService.approveCompanyRequest(paramDto.id, approveDto, businessId);
}
}