Files
dmail-api/src/modules/domains/domains.controller.ts
T
2025-07-03 12:45:53 +03:30

69 lines
3.1 KiB
TypeScript

import { Body, Controller, Delete, Get, Param, Patch, Post, Query, UseInterceptors } from "@nestjs/common";
import { ApiHeader, ApiOperation, ApiResponse } from "@nestjs/swagger";
import { CreateDomainDto } from "./DTO/create-domain.dto";
import { UpdateDomainDto } from "./DTO/update-domain.dto";
import { DomainsService } from "./services/domains.service";
import { AuthGuards } from "../../common/decorators/auth-guard.decorator";
import { BusinessDec } from "../../common/decorators/business.decorator";
import { PaginationDto } from "../../common/DTO/pagination.dto";
import { ParamDto } from "../../common/DTO/param.dto";
import { BusinessInterceptor } from "../../core/interceptors/business.interceptor";
@Controller("domains")
@ApiHeader({ name: "x-business-id", description: "Business ID" })
@UseInterceptors(BusinessInterceptor)
@AuthGuards()
export class DomainsController {
constructor(private readonly domainsService: DomainsService) {}
@Post()
@ApiOperation({ summary: "Create a new domain and get setup instructions" })
@ApiResponse({ status: 201, description: "Domain created with setup instructions" })
createDomain(@Body() createDomainDto: CreateDomainDto, @BusinessDec("id") businessId: string) {
return this.domainsService.createDomain(createDomainDto, businessId);
}
@Get()
@ApiOperation({ summary: "Get domain for business" })
@ApiResponse({ status: 200, description: "Domains retrieved successfully" })
getBusinessDomain(@BusinessDec("id") businessId: string, @Query() _query: PaginationDto) {
return this.domainsService.getBusinessDomain(businessId);
}
@Patch(":id")
@ApiOperation({ summary: "Update domain" })
@ApiResponse({ status: 200, description: "Domain updated successfully" })
updateDomain(@Param() paramDto: ParamDto, @Body() updateDomainDto: UpdateDomainDto) {
return this.domainsService.updateDomain(paramDto.id, updateDomainDto);
}
@Delete(":id")
@ApiOperation({ summary: "Delete domain" })
@ApiResponse({ status: 200, description: "Domain deleted successfully" })
deleteDomain(@Param() paramDto: ParamDto) {
return this.domainsService.deleteDomain(paramDto.id);
}
@Get("setup")
@ApiOperation({ summary: "Get domain setup instructions" })
@ApiResponse({ status: 200, description: "Domain setup instructions retrieved" })
getDomainSetupInstructions(@BusinessDec("id") businessId: string) {
return this.domainsService.getDomainSetupInstructions(businessId);
}
@Get("dns-records")
@ApiOperation({ summary: "Get DNS records for domain" })
@ApiResponse({ status: 200, description: "DNS records retrieved successfully" })
getDomainDnsRecords(@BusinessDec("id") businessId: string) {
return this.domainsService.getDomainDnsRecords(businessId);
}
@Get("verify-dns")
@ApiOperation({ summary: "Check DNS records, verify domain configuration and return verification status" })
@ApiResponse({ status: 200, description: "DNS records verified and status returned" })
verifyDnsRecords(@BusinessDec("id") businessId: string) {
return this.domainsService.checkDomainVerificationStatus(businessId);
}
}