From 1515e35ac6facc7a1a36e5deb9fb7ea7d7daeb59 Mon Sep 17 00:00:00 2001 From: quannhg Date: Tue, 17 Oct 2023 14:14:46 +0700 Subject: [PATCH] feat(printing request): implement api for create printing request --- .../migration.sql | 4 +++ prisma/schema.prisma | 8 +++--- src/dtos/in/printingRequest.dto.ts | 5 ++-- src/dtos/out/printingRequest.dto.ts | 2 ++ src/handlers/printingRequest.handler.ts | 27 ++++++++++++++++--- src/handlers/uploadFile.handler.ts | 2 +- src/routes/apis/printingRequest.plugin.ts | 4 +-- src/utils/decorate.plugin.ts | 11 -------- src/utils/index.ts | 1 - 9 files changed, 40 insertions(+), 24 deletions(-) create mode 100644 prisma/migrations/20231017065225_add_fee_for_printing_request/migration.sql delete mode 100644 src/utils/decorate.plugin.ts diff --git a/prisma/migrations/20231017065225_add_fee_for_printing_request/migration.sql b/prisma/migrations/20231017065225_add_fee_for_printing_request/migration.sql new file mode 100644 index 0000000..d44d1c1 --- /dev/null +++ b/prisma/migrations/20231017065225_add_fee_for_printing_request/migration.sql @@ -0,0 +1,4 @@ +-- AlterTable +ALTER TABLE "PrintingRequest" ADD COLUMN "printFee" DOUBLE PRECISION NOT NULL DEFAULT 0, +ADD COLUMN "serviceFee" DOUBLE PRECISION NOT NULL DEFAULT 0, +ALTER COLUMN "paid" SET DEFAULT 'not_paid'; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 409eb82..bf46227 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -35,12 +35,14 @@ model PrintingRequest { number Int @default(0) pageNumber Int @default(0) coins Int @default(0) - paid Paid + paid Paid @default(not_paid) student Student @relation(fields: [userId], references: [id]) userId String files File[] - location Location? @relation(fields: [locationId], references: [id]) - locationId String? + location Location? @relation(fields: [locationId], references: [id]) + locationId String? + printFee Float @default(0) + serviceFee Float @default(0) } model Location { diff --git a/src/dtos/in/printingRequest.dto.ts b/src/dtos/in/printingRequest.dto.ts index 33bcb58..ae7d52a 100644 --- a/src/dtos/in/printingRequest.dto.ts +++ b/src/dtos/in/printingRequest.dto.ts @@ -2,7 +2,7 @@ import { Static, Type } from '@sinclair/typebox'; // See https://github.com/sinclairzx81/typebox -export const PrintingRequestInputDto = Type.Object({ +export const CreatePrintingRequestInputDto = Type.Object({ userName: Type.String() }); @@ -10,6 +10,5 @@ export const ExecutePrintingRequestInputDto = Type.Object({ printingRequestId: Type.String() }); +export type CreatePrintingRequestInputDto = Static; export type ExecutePrintingRequestInputDto = Static; - -export type PrintingRequestInputDto = Static; diff --git a/src/dtos/out/printingRequest.dto.ts b/src/dtos/out/printingRequest.dto.ts index 82ee613..552f91f 100644 --- a/src/dtos/out/printingRequest.dto.ts +++ b/src/dtos/out/printingRequest.dto.ts @@ -23,4 +23,6 @@ export const ExecutePrintingRequestResultDto = Type.Object({ export type GetPrintingRequestResultDto = Static; +export type CreatePrintingRequestResultDto = Static; + export type ExecutePrintingRequestResultDto = Static; diff --git a/src/handlers/printingRequest.handler.ts b/src/handlers/printingRequest.handler.ts index 626e50d..63408c6 100644 --- a/src/handlers/printingRequest.handler.ts +++ b/src/handlers/printingRequest.handler.ts @@ -1,10 +1,12 @@ import { prisma } from '@repositories'; -import { GetPrintingRequestResultDto } from '@dtos/out'; +import { CreatePrintingRequestResultDto, GetPrintingRequestResultDto } from '@dtos/out'; import { Handler } from '@interfaces'; import { PAID, PRINTING_STATUS } from '@constants'; +import { logger } from '@utils'; -const getAllPrintingRequest: Handler = async (req) => { +const getAllPrintingRequest: Handler = async (req) => { const userId = req.userId; + const printingRequests = await prisma.printingRequest.findMany({ select: { id: true, @@ -45,6 +47,25 @@ const getAllPrintingRequest: Handler = async (req, res) => { + try { + const userId = req.userId; + + const printingRequestId = await prisma.printingRequest.create({ + data: { + userId + }, + select: { id: true } + }); + + return res.status(200).send(printingRequestId); + } catch (err) { + logger.error(err); + throw new Error('Failed to create printing request'); + } +}; + export const printingRequestHandler = { - getAllPrintingRequest + getAllPrintingRequest, + createPrintingRequest }; diff --git a/src/handlers/uploadFile.handler.ts b/src/handlers/uploadFile.handler.ts index 0f3f424..652e8d6 100644 --- a/src/handlers/uploadFile.handler.ts +++ b/src/handlers/uploadFile.handler.ts @@ -54,7 +54,7 @@ const updateFileAndStatusOfPrintingRequestToDb = async (minioName: string, confi }) ]); } catch (error) { - throw new Error('Failed to update file and status in the database'); + throw new Error('Failed to update file and status to printing request'); } }; diff --git a/src/routes/apis/printingRequest.plugin.ts b/src/routes/apis/printingRequest.plugin.ts index f76362f..e78dd0f 100644 --- a/src/routes/apis/printingRequest.plugin.ts +++ b/src/routes/apis/printingRequest.plugin.ts @@ -9,7 +9,7 @@ export const printingRequestPlugin = createRoutes('Printing Request', [ url: '', roles: ['*'], schema: { - summary: 'Get printing request list of current user', + summary: 'Get all printing request of current user', response: { 200: GetPrintingRequestResultDto } @@ -26,7 +26,7 @@ export const printingRequestPlugin = createRoutes('Printing Request', [ 200: CreatePrintingRequestResultDto } }, - handler: printingRequestHandler.getAllPrintingRequest + handler: printingRequestHandler.createPrintingRequest }, { method: 'POST', diff --git a/src/utils/decorate.plugin.ts b/src/utils/decorate.plugin.ts deleted file mode 100644 index 0d9bdf0..0000000 --- a/src/utils/decorate.plugin.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { FastifyPluginCallback } from 'fastify'; -import fp from 'fastify-plugin'; - -const decorateRequestWithRoles: FastifyPluginCallback = (fastify, _opts, done) => { - fastify.decorateRequest('roles', []); - done(); -}; - -export const addRolesHeader = fp(decorateRequestWithRoles, { - name: 'decorateRequestWithRoles' -}); diff --git a/src/utils/index.ts b/src/utils/index.ts index 1808032..7f129be 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -3,6 +3,5 @@ */ export * from './createRoutes'; -export * from './decorate.plugin'; export * from './logger'; export * from './minio';