From 4f231514396fce72f7565a752964e59838bbec2d Mon Sep 17 00:00:00 2001 From: SquidSpirit Date: Wed, 15 Oct 2025 15:12:20 +0800 Subject: [PATCH] feat: implement get label by ID functionality in label management --- frontend/src/lib/container.ts | 12 +++++ .../label/adapter/gateway/labelApiService.ts | 1 + .../adapter/gateway/labelRepositoryImpl.ts | 5 ++ .../adapter/presenter/labelLoadedStore.ts | 51 +++++++++++++++++++ .../application/gateway/labelRepository.ts | 1 + .../useCase/getAllLabelsUseCase.ts | 2 +- .../application/useCase/getLabelUseCase.ts | 10 ++++ .../framework/api/labelApiServiceImpl.ts | 16 ++++++ .../dashboard/label/[id]/+page.server.ts | 23 +++++++++ .../routes/dashboard/label/[id]/+page.svelte | 17 +++++++ 10 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 frontend/src/lib/label/adapter/presenter/labelLoadedStore.ts create mode 100644 frontend/src/lib/label/application/useCase/getLabelUseCase.ts create mode 100644 frontend/src/routes/dashboard/label/[id]/+page.server.ts create mode 100644 frontend/src/routes/dashboard/label/[id]/+page.svelte diff --git a/frontend/src/lib/container.ts b/frontend/src/lib/container.ts index 078015c..1d2822f 100644 --- a/frontend/src/lib/container.ts +++ b/frontend/src/lib/container.ts @@ -31,6 +31,8 @@ import { CreatePostUseCase } from '$lib/post/application/useCase/createPostUseCa import { GetAllPostsUseCase } from '$lib/post/application/useCase/getAllPostsUseCase'; import { GetPostUseCase } from '$lib/post/application/useCase/getPostUseCase'; import { PostApiServiceImpl } from '$lib/post/framework/api/postApiServiceImpl'; +import { GetLabelUseCase } from '$lib/label/application/useCase/getLabelUseCase'; +import { LabelLoadedStore } from '$lib/label/adapter/presenter/labelLoadedStore'; export class Container { private useCases: UseCases; @@ -65,6 +67,10 @@ export class Container { return new LabelsListedStore(this.useCases.getAllLabelsUseCase, initialData); } + createLabelLoadedStore(initialData?: LabelViewModel): LabelLoadedStore { + return new LabelLoadedStore(this.useCases.getLabelUseCase, initialData); + } + createLabelCreatedStore(): LabelCreatedStore { return new LabelCreatedStore(this.useCases.createLabelUseCase); } @@ -145,6 +151,7 @@ class UseCases { private _getPostUseCase?: GetPostUseCase; private _createPostUseCase?: CreatePostUseCase; private _getAllLabelsUseCase?: GetAllLabelsUseCase; + private _getLabelUseCase?: GetLabelUseCase; private _createLabelUseCase?: CreateLabelUseCase; constructor(repositories: Repositories) { @@ -181,6 +188,11 @@ class UseCases { return this._getAllLabelsUseCase; } + get getLabelUseCase(): GetLabelUseCase { + this._getLabelUseCase ??= new GetLabelUseCase(this.repositories.labelRepository); + return this._getLabelUseCase; + } + get createLabelUseCase(): CreateLabelUseCase { this._createLabelUseCase ??= new CreateLabelUseCase(this.repositories.labelRepository); return this._createLabelUseCase; diff --git a/frontend/src/lib/label/adapter/gateway/labelApiService.ts b/frontend/src/lib/label/adapter/gateway/labelApiService.ts index e17b297..68d79e5 100644 --- a/frontend/src/lib/label/adapter/gateway/labelApiService.ts +++ b/frontend/src/lib/label/adapter/gateway/labelApiService.ts @@ -3,5 +3,6 @@ import type { LabelResponseDto } from '$lib/label/adapter/gateway/labelResponseD export interface LabelApiService { getAllLabels(): Promise; + getLabelById(id: number): Promise; createLabel(payload: CreateLabelRequestDto): Promise; } diff --git a/frontend/src/lib/label/adapter/gateway/labelRepositoryImpl.ts b/frontend/src/lib/label/adapter/gateway/labelRepositoryImpl.ts index 8c8bc8d..8ff3642 100644 --- a/frontend/src/lib/label/adapter/gateway/labelRepositoryImpl.ts +++ b/frontend/src/lib/label/adapter/gateway/labelRepositoryImpl.ts @@ -14,6 +14,11 @@ export class LabelRepositoryImpl implements LabelRepository { return dtos.map((dto) => dto.toEntity()); } + async getLabelById(id: number): Promise