Files
dpage-api/src/modules/catalogue/catalogue.controller.ts
T
2026-05-18 13:51:34 +03:30

85 lines
2.9 KiB
TypeScript

import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UseGuards } from '@nestjs/common';
import { CatalogueService } from './catalogue.service';
import { CreateCatalogueDto } from './dto/create-catalogue.dto';
import { UpdateCatalogueDto } from './dto/update-catalogue.dto';
import { FindCataloguesDto } from './dto/find-catalogues.dto';
import { AdminAuthGuard } from '../auth/guards/adminAuth.guard';
import { BusinessId } from 'src/common/decorators';
import { ApiBearerAuth } from '@nestjs/swagger';
import { PurchaseCatalogueDto } from './dto/purchase-catalogue.dto';
import { SuperAdminAuthGuard } from '../auth/guards/superAdminAuth.guard';
import { FinishPurchaseCatalogueDto } from './dto/finish-purchase-catalogue.dto';
@Controller()
@ApiBearerAuth()
export class CatalogueController {
constructor(private readonly catalogueService: CatalogueService) { }
// ============= Public Routes ==============
@Get('public/catalogue/slug/:slug')
findAllAsPublic(@Param('slug') slug: string, @Query() queryDto: FindCataloguesDto) {
return this.catalogueService.findAll(slug, queryDto);
}
@Get('public/catalogue/:id')
findOneAsPublic(@Param('id') id: string) {
return this.catalogueService.findOne(id);
}
@Get('public/catalogue/slug/:slug')
findOneBySlugAsPublic(@Param('slug') slug: string) {
return this.catalogueService.findOneOrFailBySlug(slug);
}
// ============= Admin Routes ==============
@Post('admin/catalogue')
@UseGuards(AdminAuthGuard)
create(@Body() dto: CreateCatalogueDto, @BusinessId() businessId: string) {
return this.catalogueService.create(dto, businessId);
}
@Get('admin/catalogue')
@UseGuards(AdminAuthGuard)
findAll(@Query() queryDto: FindCataloguesDto, @BusinessId() businessId: string) {
return this.catalogueService.findAllAsAdmin(businessId, queryDto);
}
@Get('admin/catalogue/:id')
@UseGuards(AdminAuthGuard)
findOne(@Param('id') id: string) {
return this.catalogueService.findOne(id);
}
@Patch('admin/catalogue/:id')
@UseGuards(AdminAuthGuard)
update(@Param('id') id: string, @Body() dto: UpdateCatalogueDto) {
return this.catalogueService.update(id, dto);
}
@Delete('admin/catalogue/:id')
@UseGuards(AdminAuthGuard)
remove(@Param('id') id: string) {
return this.catalogueService.remove(id);
}
// =============== in-app purchase catalogue endpoints =============
@Post('admin/catalogue/purchase/initiate')
@UseGuards(AdminAuthGuard)
purchaseCatalogues(@Body() dto: PurchaseCatalogueDto, @BusinessId() businessId: string) {
return this.catalogueService.createExternalInvoice(dto, businessId);
}
@Post('super-admin/catalogue/purchase/finish')
@UseGuards(SuperAdminAuthGuard)
finishPurchaseCatalogues(@Body() dto: FinishPurchaseCatalogueDto) {
return this.catalogueService.finishPurchaseCatalogue(dto);
}
// =============== end =============
}