From 1ae170278639fb6778207a47ca1a4e81bb2d6ddd Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:34:43 +0200 Subject: [PATCH] feat(core-api): compose @repo/blog/api into appRouter under 'blog' namespace --- .../repositories/articles-repository.interface.ts | 2 +- .../use-cases/create-article.use-case.test.ts | 8 ++++---- .../use-cases/create-article.use-case.ts | 8 ++++---- .../use-cases/get-articles.use-case.test.ts | 8 ++++---- .../application/use-cases/get-articles.use-case.ts | 8 ++++---- packages/blog/src/di/container.test.ts | 4 ++-- packages/blog/src/di/module.ts | 4 ++-- .../repositories/mock-articles.repository.ts | 4 ++-- .../repositories/payload-articles.repository.ts | 4 ++-- packages/blog/src/integrations/api/router.test.ts | 8 ++++---- packages/blog/src/integrations/api/router.ts | 2 +- .../controllers/articles.controller.test.ts | 10 +++++----- .../controllers/articles.controller.ts | 14 +++++++------- packages/core-api/package.json | 1 + packages/core-api/src/root.ts | 5 ++++- pnpm-lock.yaml | 3 +++ 16 files changed, 50 insertions(+), 43 deletions(-) diff --git a/packages/blog/src/application/repositories/articles-repository.interface.ts b/packages/blog/src/application/repositories/articles-repository.interface.ts index 3678bb9..f059aa3 100644 --- a/packages/blog/src/application/repositories/articles-repository.interface.ts +++ b/packages/blog/src/application/repositories/articles-repository.interface.ts @@ -1,4 +1,4 @@ -import type { Article } from "@/entities/article"; +import type { Article } from "../../entities/article"; export interface IArticlesRepository { getArticle(id: string): Promise
; diff --git a/packages/blog/src/application/use-cases/create-article.use-case.test.ts b/packages/blog/src/application/use-cases/create-article.use-case.test.ts index 2cc7289..0387f3b 100644 --- a/packages/blog/src/application/use-cases/create-article.use-case.test.ts +++ b/packages/blog/src/application/use-cases/create-article.use-case.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; import { createArticleUseCase } from "./create-article.use-case"; describe("createArticleUseCase", () => { diff --git a/packages/blog/src/application/use-cases/create-article.use-case.ts b/packages/blog/src/application/use-cases/create-article.use-case.ts index e55565d..80f6066 100644 --- a/packages/blog/src/application/use-cases/create-article.use-case.ts +++ b/packages/blog/src/application/use-cases/create-article.use-case.ts @@ -1,7 +1,7 @@ -import type { Article } from "@/entities/article"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import type { Article } from "../../entities/article"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import type { IArticlesRepository } from "../repositories/articles-repository.interface"; function generateSlug(title: string): string { return title diff --git a/packages/blog/src/application/use-cases/get-articles.use-case.test.ts b/packages/blog/src/application/use-cases/get-articles.use-case.test.ts index 1807af4..f88b334 100644 --- a/packages/blog/src/application/use-cases/get-articles.use-case.test.ts +++ b/packages/blog/src/application/use-cases/get-articles.use-case.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; import { getArticlesUseCase } from "./get-articles.use-case"; describe("getArticlesUseCase", () => { diff --git a/packages/blog/src/application/use-cases/get-articles.use-case.ts b/packages/blog/src/application/use-cases/get-articles.use-case.ts index 8a8b70f..580b09c 100644 --- a/packages/blog/src/application/use-cases/get-articles.use-case.ts +++ b/packages/blog/src/application/use-cases/get-articles.use-case.ts @@ -1,7 +1,7 @@ -import type { Article } from "@/entities/article"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import type { Article } from "../../entities/article"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import type { IArticlesRepository } from "../repositories/articles-repository.interface"; export async function getArticlesUseCase(options?: { status?: string; diff --git a/packages/blog/src/di/container.test.ts b/packages/blog/src/di/container.test.ts index 8ccd394..49c9d88 100644 --- a/packages/blog/src/di/container.test.ts +++ b/packages/blog/src/di/container.test.ts @@ -2,8 +2,8 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { blogContainer } from "./container"; import { BLOG_SYMBOLS } from "./symbols"; import { BlogModule } from "./module"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "../infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "../application/repositories/articles-repository.interface"; describe("blogContainer", () => { beforeEach(() => { diff --git a/packages/blog/src/di/module.ts b/packages/blog/src/di/module.ts index 5bd4bcc..7634673 100644 --- a/packages/blog/src/di/module.ts +++ b/packages/blog/src/di/module.ts @@ -1,7 +1,7 @@ import { ContainerModule, type interfaces } from "inversify"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "../application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "../infrastructure/repositories/mock-articles.repository"; import { BLOG_SYMBOLS } from "./symbols"; export const BlogModule = new ContainerModule((bind: interfaces.Bind) => { diff --git a/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts b/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts index 269e30b..50355f0 100644 --- a/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts +++ b/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts @@ -1,8 +1,8 @@ import "reflect-metadata"; import { injectable } from "inversify"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import type { Article } from "@/entities/article"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import type { Article } from "../../entities/article"; @injectable() export class MockArticlesRepository implements IArticlesRepository { diff --git a/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts b/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts index da7912c..7c7f9a4 100644 --- a/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts +++ b/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts @@ -3,8 +3,8 @@ import { injectable } from "inversify"; import { getPayload } from "payload"; import type { SanitizedConfig } from "payload"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import type { Article } from "@/entities/article"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import type { Article } from "../../entities/article"; type PayloadArticleDoc = { id: string | number; diff --git a/packages/blog/src/integrations/api/router.test.ts b/packages/blog/src/integrations/api/router.test.ts index 7bf8187..86faf1c 100644 --- a/packages/blog/src/integrations/api/router.test.ts +++ b/packages/blog/src/integrations/api/router.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; import { blogRouter } from "./router"; describe("blogRouter", () => { diff --git a/packages/blog/src/integrations/api/router.ts b/packages/blog/src/integrations/api/router.ts index a25bac8..ec0c6f2 100644 --- a/packages/blog/src/integrations/api/router.ts +++ b/packages/blog/src/integrations/api/router.ts @@ -4,7 +4,7 @@ import { createArticleController, getArticlesController, getArticleBySlugController, -} from "@/interface-adapters/controllers/articles.controller"; +} from "../../interface-adapters/controllers/articles.controller"; export const blogRouter = router({ articleBySlug: publicProcedure diff --git a/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts b/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts index 1e8940c..4550d46 100644 --- a/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts +++ b/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts @@ -1,9 +1,9 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import { InputParseError } from "@/entities/errors"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import { InputParseError } from "../../entities/errors"; import { createArticleController, getArticlesController, diff --git a/packages/blog/src/interface-adapters/controllers/articles.controller.ts b/packages/blog/src/interface-adapters/controllers/articles.controller.ts index 2aaefd8..2fc15ee 100644 --- a/packages/blog/src/interface-adapters/controllers/articles.controller.ts +++ b/packages/blog/src/interface-adapters/controllers/articles.controller.ts @@ -1,12 +1,12 @@ import { z } from "zod"; -import { InputParseError } from "@/entities/errors"; -import type { Article } from "@/entities/article"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import { getArticlesUseCase } from "@/application/use-cases/get-articles.use-case"; -import { createArticleUseCase } from "@/application/use-cases/create-article.use-case"; +import { InputParseError } from "../../entities/errors"; +import type { Article } from "../../entities/article"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import { getArticlesUseCase } from "../../application/use-cases/get-articles.use-case"; +import { createArticleUseCase } from "../../application/use-cases/create-article.use-case"; const createInputSchema = z.object({ title: z.string().min(1).max(255), diff --git a/packages/core-api/package.json b/packages/core-api/package.json index d0f7cad..d7cceb5 100644 --- a/packages/core-api/package.json +++ b/packages/core-api/package.json @@ -12,6 +12,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@repo/blog": "workspace:*", "@repo/core-shared": "workspace:*", "@trpc/server": "^11.0.0" }, diff --git a/packages/core-api/src/root.ts b/packages/core-api/src/root.ts index 8e563d2..f940fe8 100644 --- a/packages/core-api/src/root.ts +++ b/packages/core-api/src/root.ts @@ -1,5 +1,8 @@ import { router } from "@repo/core-shared/trpc/init"; +import { blogRouter } from "@repo/blog/api"; -export const appRouter = router({}); +export const appRouter = router({ + blog: blogRouter, +}); export type AppRouter = typeof appRouter; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c5a54f..3f2dc23 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -327,6 +327,9 @@ importers: packages/core-api: dependencies: + '@repo/blog': + specifier: workspace:* + version: link:../blog '@repo/core-shared': specifier: workspace:* version: link:../core-shared