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/business/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 ============= }