import { TABLE_PLURAL_UPPER_NAMEService } from "./TABLE_PLURAL_LOWER_NAME.service"; import { Body, Delete, Get, Param, Patch, Post, Query, Req, Res } from "@nestjs/common"; import { FileFieldsInterceptor } from "@nestjs/platform-express"; import { ApiOperation } from "@nestjs/swagger"; import { Request, Response } from "express"; import { RELATIONS_OBJECT } from "OUT_DIR/constants/relations"; import { ControllerWrapper, EditorsWrapper, GetAllByQuery } from "OUT_DIR/decorators"; import { DeletionQuery } from "OUT_DIR/decorators/delete.decorator"; import { CreateTABLE_UPPER_NAMEDto } from "OUT_DIR/dto/TABLE_PLURAL_LOWER_NAME/create-TABLE_LOWER_NAME.dto"; import { UpdateTABLE_UPPER_NAMEDto } from "OUT_DIR/dto/TABLE_PLURAL_LOWER_NAME/update-TABLE_LOWER_NAME.dto"; import { TABLE_UPPER_NAME } from "OUT_DIR/entities/TABLE_LOWER_NAME.entity"; import { TABLE_UPPER_NAMEFields, TablesNames } from "OUT_DIR/enums/tables.enum"; import { getUserTokenData } from "OUT_DIR/helpers"; import { DELETE_Pipe, GET_Pipe, POST_PATCH_Pipe } from "OUT_DIR/pipes"; import { CustomResponseType, DeleteQueryProps } from "OUT_DIR/types"; import { DeleteResult, FindManyOptions, UpdateResult } from "typeorm"; @ControllerWrapper("TABLE_LOWER_NAME") export class TABLE_PLURAL_UPPER_NAMEController { constructor(private readonly TABLE_PLURAL_LOWER_NAMEService: TABLE_PLURAL_UPPER_NAMEService) {} // --- Basic CRUD endpoints --- @Get() @GetAllByQuery({ fieldsEnum: TABLE_UPPER_NAMEFields, descendants: RELATIONS_OBJECT.TABLE_LOWER_NAME.descendants, }) async getTABLE_PLURAL_UPPER_NAME( @Query(new GET_Pipe(TABLE_UPPER_NAMEFields, RELATIONS_OBJECT.TABLE_LOWER_NAME.ascendants)) query: FindManyOptions, @Res() res: Response ) { const response: CustomResponseType = await this.TABLE_PLURAL_LOWER_NAMEService.getTABLE_PLURAL_UPPER_NAME(query); return res.status(response.status).json(response); } @Get(":id") @ApiOperation({ summary: "Get a Single TABLE_LOWER_NAME by ID" }) async getTABLE_UPPER_NAMEById(@Param("id") id: string, @Res() res: Response) { const response: CustomResponseType = await this.TABLE_PLURAL_LOWER_NAMEService.getTABLE_UPPER_NAMEById(id); return res.status(response.status).json(response); } @Post() @EditorsWrapper(CreateTABLE_UPPER_NAMEDto, "Create a New TABLE_LOWER_NAME") async createTABLE_UPPER_NAME( @Body(new POST_PATCH_Pipe(TablesNames.TABLE_UPPER_SNAKE_CASE_NAME)) createTABLE_UPPER_NAMEDto: CreateTABLE_UPPER_NAMEDto, @Res() res: Response ) { const response: CustomResponseType = await this.TABLE_PLURAL_LOWER_NAMEService.createTABLE_UPPER_NAME( createTABLE_UPPER_NAMEDto, ); return res.status(response.status).json(response); } @Post('bulk') @EditorsWrapper(CreateTABLE_UPPER_NAMEDto, "Bulk create TABLE_PLURAL_LOWER_NAME") async createBulkTABLE_UPPER_NAME( @Body(new POST_PATCH_Pipe(TablesNames.TABLE_UPPER_SNAKE_CASE_NAME)) createTABLE_UPPER_NAMEDtos: CreateTABLE_UPPER_NAMEDto[], @Res() res: Response, ) { const response = await this.TABLE_PLURAL_LOWER_NAMEService.createBulkTABLE_UPPER_NAME( createTABLE_UPPER_NAMEDtos, ); return res.status(response.status).json(response); } @Patch(":id") @EditorsWrapper(UpdateTABLE_UPPER_NAMEDto, "Update a TABLE_LOWER_NAME") async updateTABLE_UPPER_NAME( @Param("id") id: string, @Body(new POST_PATCH_Pipe(TablesNames.TABLE_UPPER_SNAKE_CASE_NAME)) updateTABLE_UPPER_NAMEDto: UpdateTABLE_UPPER_NAMEDto, @Res() res: Response ) { const response: CustomResponseType = await this.TABLE_PLURAL_LOWER_NAMEService.updateTABLE_UPPER_NAME(id, updateTABLE_UPPER_NAMEDto); return res.status(response.status).json(response); } @Patch('bulk') @EditorsWrapper(UpdateTABLE_UPPER_NAMEDto, "Bulk update TABLE_LOWER_NAME") async updateBulkTABLE_UPPER_NAME( @Body(new POST_PATCH_Pipe(TablesNames.TABLE_UPPER_SNAKE_CASE_NAME)) updates: { id: string; data: UpdateTABLE_UPPER_NAMEDto }[], @Res() res: Response, ) { const response = await this.TABLE_PLURAL_LOWER_NAMEService.updateBulkTABLE_UPPER_NAME(updates); return res.status(response.status).json(response); } @Post("upsert/:prop") @EditorsWrapper(CreateTABLE_UPPER_NAMEDto, "Update or Create a New TABLE_LOWER_NAME") async upsertTABLE_UPPER_NAME( @Param("prop") prop: string, @Body(new POST_PATCH_Pipe(TablesNames.TABLE_UPPER_SNAKE_CASE_NAME)) upsertTABLE_UPPER_NAMEDto: CreateTABLE_UPPER_NAMEDto, @Res() res: Response ) { const response: CustomResponseType = await this.TABLE_PLURAL_LOWER_NAMEService.upsertTABLE_UPPER_NAME( prop, upsertTABLE_UPPER_NAMEDto, ); return res.status(response.status).json(response); } @Delete() @DeletionQuery("Delete TABLE_LOWER_NAME") async deleteTABLE_UPPER_NAME( @Query(new DELETE_Pipe()) query: DeleteQueryProps, @Req() req: Request, @Res() res: Response ) { const response: CustomResponseType = await this.TABLE_PLURAL_LOWER_NAMEService.deleteTABLE_UPPER_NAME(query, getUserTokenData(req)); return res.status(response.status).json(response); } @Delete('bulk') @DeletionQuery("Bulk delete TABLE_LOWER_NAME") async deleteBulkTABLE_UPPER_NAME( @Query(new DELETE_Pipe()) query: { ids: string; wipe?: boolean }, @Req() req: Request, @Res() res: Response ) { const response = await this.TABLE_PLURAL_LOWER_NAMEService.deleteBulkTABLE_UPPER_NAME( query, getUserTokenData(req) ); return res.status(response.status).json(response); } }