From e864a09fe63c26a5372d52c5591180a88b717340 Mon Sep 17 00:00:00 2001 From: hoanninh123 Date: Tue, 30 Jun 2026 23:10:20 +0700 Subject: [PATCH] feat(FI-213): add get drafts list api --- .../src/core/api/draft/draft.controller.js | 16 +++++++++++++ backend/src/core/api/draft/draft.resolver.js | 17 ++++++++++++++ backend/src/core/api/draft/index.js | 1 + backend/src/core/api/index.js | 4 +++- .../document/service/document.service.js | 23 +++++++++++++++++++ 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 backend/src/core/api/draft/draft.controller.js create mode 100644 backend/src/core/api/draft/draft.resolver.js create mode 100644 backend/src/core/api/draft/index.js diff --git a/backend/src/core/api/draft/draft.controller.js b/backend/src/core/api/draft/draft.controller.js new file mode 100644 index 0000000..4f3c8aa --- /dev/null +++ b/backend/src/core/api/draft/draft.controller.js @@ -0,0 +1,16 @@ +import { DocumentService } from 'core/modules/document/service/document.service'; +import { ValidHttpResponse } from 'packages/handler/response/validHttp.response'; + +class Controller { + constructor() { + this.service = DocumentService; + } + + listDrafts = async req => { + const userId = req.user.payload.id; + const data = await this.service.listDrafts(userId); + return ValidHttpResponse.toOkResponse(data); + }; +} + +export const DraftController = new Controller(); diff --git a/backend/src/core/api/draft/draft.resolver.js b/backend/src/core/api/draft/draft.resolver.js new file mode 100644 index 0000000..54fc087 --- /dev/null +++ b/backend/src/core/api/draft/draft.resolver.js @@ -0,0 +1,17 @@ +import { Module } from 'packages/handler/Module'; +import { DraftController } from './draft.controller'; + +export const DraftResolver = Module.builder() + .addPrefix({ + prefixPath: '/drafts', + tag: 'drafts', + module: 'DraftModule' + }) + .register([ + { + route: '/', + method: 'get', + controller: DraftController.listDrafts, + preAuthorization: true + } + ]); diff --git a/backend/src/core/api/draft/index.js b/backend/src/core/api/draft/index.js new file mode 100644 index 0000000..b4a5d4a --- /dev/null +++ b/backend/src/core/api/draft/index.js @@ -0,0 +1 @@ +export * from './draft.resolver'; diff --git a/backend/src/core/api/index.js b/backend/src/core/api/index.js index 1b01a34..7ffbd9a 100644 --- a/backend/src/core/api/index.js +++ b/backend/src/core/api/index.js @@ -5,6 +5,7 @@ import { LawyerResolver } from 'core/api/lawyer/lawyer.resolver'; import { UploadResolver } from 'core/api/upload'; import { TemplateResolver } from 'core/api/template'; import { DocumentResolver } from 'core/api/document'; +import { DraftResolver } from 'core/api/draft'; import { HandlerResolver } from '../../packages/handler/HandlerResolver'; import { AuthResolver } from './auth/auth.resolver'; import { LawResolver } from './law/law.resolver'; @@ -20,6 +21,7 @@ export const ModuleResolver = HandlerResolver UploadResolver, LawResolver, TemplateResolver, - DocumentResolver + DocumentResolver, + DraftResolver ]); diff --git a/backend/src/core/modules/document/service/document.service.js b/backend/src/core/modules/document/service/document.service.js index 73a614f..3c14793 100644 --- a/backend/src/core/modules/document/service/document.service.js +++ b/backend/src/core/modules/document/service/document.service.js @@ -103,6 +103,29 @@ class Service { } } + async listDrafts(userId) { + try { + return await prisma.documents.findMany({ + where: { + user_id: userId, + is_draft: true, + deleted_at: null + }, + include: { + templates: { + select: { + name: true, + description: true + } + } + }, + orderBy: { updated_at: 'desc' } + }); + } catch (error) { + throw new InternalServerException(error.message); + } + } + async getDocumentById(userId, documentId) { try { const document = await prisma.documents.findFirst({