refactor(features): rename mock/payload/interface files per Lazar pattern

Convention now: <name>.repository.{ts,mock.ts,interface.ts}.
Renames .mock prefix to .mock suffix; drops .payload prefix from real
impls (canonical name = real impl); dot-separates the .repository
qualifier in interface filenames. Class names follow suit:
PayloadXRepository → XRepository; Mock* unchanged.

Refactor log: §1, §3
Spec: §9.1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-05 23:50:01 +02:00
parent a4c4ca6b6e
commit aa325f91cc
71 changed files with 193 additions and 148 deletions

View File

@@ -20,6 +20,51 @@ single follow-up pass.
## 1. File renames (before → after) ## 1. File renames (before → after)
### Task 3: File and class renames
File renames — 27 files (git mv — history preserved):
**auth:**
- `packages/auth/src/infrastructure/repositories/mock-users.repository.ts``users.repository.mock.ts`
- `packages/auth/src/infrastructure/repositories/mock-users.repository.test.ts``users.repository.mock.test.ts`
- `packages/auth/src/application/repositories/users-repository.interface.ts``users.repository.interface.ts`
- `packages/auth/src/infrastructure/services/mock-authentication.service.ts``authentication.service.mock.ts`
- `packages/auth/src/application/services/authentication-service.interface.ts``authentication.service.interface.ts`
**blog:**
- `packages/blog/src/infrastructure/repositories/mock-articles.repository.ts``articles.repository.mock.ts`
- `packages/blog/src/infrastructure/repositories/mock-articles.repository.test.ts``articles.repository.mock.test.ts`
- `packages/blog/src/infrastructure/repositories/payload-articles.repository.ts``articles.repository.ts`
- `packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts``articles.repository.test.ts`
- `packages/blog/src/application/repositories/articles-repository.interface.ts``articles.repository.interface.ts`
**marketing-pages:**
- `packages/marketing-pages/src/infrastructure/repositories/mock-pages.repository.ts``pages.repository.mock.ts`
- `packages/marketing-pages/src/infrastructure/repositories/mock-pages.repository.test.ts``pages.repository.mock.test.ts`
- `packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts``pages.repository.ts`
- `packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.test.ts``pages.repository.test.ts`
- `packages/marketing-pages/src/application/repositories/pages-repository.interface.ts``pages.repository.interface.ts`
- `packages/marketing-pages/src/infrastructure/repositories/mock-site-settings.repository.ts``site-settings.repository.mock.ts`
- `packages/marketing-pages/src/infrastructure/repositories/mock-site-settings.repository.test.ts``site-settings.repository.mock.test.ts`
- `packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts``site-settings.repository.ts`
- `packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.test.ts``site-settings.repository.test.ts`
- `packages/marketing-pages/src/application/repositories/site-settings-repository.interface.ts``site-settings.repository.interface.ts`
**navigation:**
- `packages/navigation/src/infrastructure/repositories/mock-header.repository.ts``header.repository.mock.ts`
- `packages/navigation/src/infrastructure/repositories/mock-header.repository.test.ts``header.repository.mock.test.ts`
- `packages/navigation/src/infrastructure/repositories/payload-header.repository.ts``header.repository.ts`
- `packages/navigation/src/infrastructure/repositories/payload-header.repository.test.ts``header.repository.test.ts`
- `packages/navigation/src/application/repositories/header-repository.interface.ts``header.repository.interface.ts`
Class renames (4 classes — Payload prefix dropped; Mock prefix unchanged):
- `PayloadArticlesRepository``ArticlesRepository` (in `articles.repository.ts`)
- `PayloadPagesRepository``PagesRepository` (in `pages.repository.ts`)
- `PayloadSiteSettingsRepository``SiteSettingsRepository` (in `site-settings.repository.ts`)
- `PayloadHeaderRepository``HeaderRepository` (in `header.repository.ts`)
Consumers updated (imports + class references): DI modules, bind-production files, contract suites, use case source files, use case tests, controller tests, router tests, feature tests — approximately 35 files total.
### Task 2: Entities split ### Task 2: Entities split
Entity model moves (git mv — history preserved): Entity model moves (git mv — history preserved):

View File

@@ -1,6 +1,6 @@
import { it, expect, beforeEach } from "vitest"; import { it, expect, beforeEach } from "vitest";
import { defineContractSuite } from "@repo/core-testing/contract"; import { defineContractSuite } from "@repo/core-testing/contract";
import type { IUsersRepository } from "../application/repositories/users-repository.interface.js"; import type { IUsersRepository } from "../application/repositories/users.repository.interface.js";
import { userFactory } from "../__factories__/user.factory.js"; import { userFactory } from "../__factories__/user.factory.js";
export const usersRepositoryContract = export const usersRepositoryContract =

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "@/di/container"; import { authContainer } from "@/di/container";
import { AUTH_SYMBOLS } from "@/di/symbols"; import { AUTH_SYMBOLS } from "@/di/symbols";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; import type { IUsersRepository } from "@/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; import type { IAuthenticationService } from "@/application/services/authentication.service.interface";
import { AuthenticationError } from "@/entities/errors/auth"; import { AuthenticationError } from "@/entities/errors/auth";
import { signInUseCase } from "./sign-in.use-case"; import { signInUseCase } from "./sign-in.use-case";

View File

@@ -3,8 +3,8 @@ import type { Cookie } from "../../entities/models/cookie";
import type { Session } from "../../entities/models/session"; import type { Session } from "../../entities/models/session";
import { authContainer } from "../../di/container"; import { authContainer } from "../../di/container";
import { AUTH_SYMBOLS } from "../../di/symbols"; import { AUTH_SYMBOLS } from "../../di/symbols";
import type { IUsersRepository } from "../repositories/users-repository.interface"; import type { IUsersRepository } from "../repositories/users.repository.interface";
import type { IAuthenticationService } from "../services/authentication-service.interface"; import type { IAuthenticationService } from "../services/authentication.service.interface";
export async function signInUseCase(input: { export async function signInUseCase(input: {
username: string; username: string;

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "@/di/container"; import { authContainer } from "@/di/container";
import { AUTH_SYMBOLS } from "@/di/symbols"; import { AUTH_SYMBOLS } from "@/di/symbols";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; import type { IUsersRepository } from "@/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; import type { IAuthenticationService } from "@/application/services/authentication.service.interface";
import { signOutUseCase } from "./sign-out.use-case"; import { signOutUseCase } from "./sign-out.use-case";
describe("signOutUseCase", () => { describe("signOutUseCase", () => {

View File

@@ -1,7 +1,7 @@
import type { Cookie } from "../../entities/models/cookie"; import type { Cookie } from "../../entities/models/cookie";
import { authContainer } from "../../di/container"; import { authContainer } from "../../di/container";
import { AUTH_SYMBOLS } from "../../di/symbols"; import { AUTH_SYMBOLS } from "../../di/symbols";
import type { IAuthenticationService } from "../services/authentication-service.interface"; import type { IAuthenticationService } from "../services/authentication.service.interface";
export async function signOutUseCase( export async function signOutUseCase(
sessionId: string, sessionId: string,

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "@/di/container"; import { authContainer } from "@/di/container";
import { AUTH_SYMBOLS } from "@/di/symbols"; import { AUTH_SYMBOLS } from "@/di/symbols";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; import type { IUsersRepository } from "@/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; import type { IAuthenticationService } from "@/application/services/authentication.service.interface";
import { AuthenticationError } from "@/entities/errors/auth"; import { AuthenticationError } from "@/entities/errors/auth";
import { signUpUseCase } from "./sign-up.use-case"; import { signUpUseCase } from "./sign-up.use-case";

View File

@@ -4,8 +4,8 @@ import type { Session } from "../../entities/models/session";
import type { User } from "../../entities/models/user"; import type { User } from "../../entities/models/user";
import { authContainer } from "../../di/container"; import { authContainer } from "../../di/container";
import { AUTH_SYMBOLS } from "../../di/symbols"; import { AUTH_SYMBOLS } from "../../di/symbols";
import type { IUsersRepository } from "../repositories/users-repository.interface"; import type { IUsersRepository } from "../repositories/users.repository.interface";
import type { IAuthenticationService } from "../services/authentication-service.interface"; import type { IAuthenticationService } from "../services/authentication.service.interface";
export async function signUpUseCase(input: { export async function signUpUseCase(input: {
username: string; username: string;

View File

@@ -2,10 +2,10 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "./container"; import { authContainer } from "./container";
import { AUTH_SYMBOLS } from "./symbols"; import { AUTH_SYMBOLS } from "./symbols";
import { AuthModule } from "./module"; import { AuthModule } from "./module";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; import type { IUsersRepository } from "@/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; import type { IAuthenticationService } from "@/application/services/authentication.service.interface";
import { userFactory } from "@/__factories__/user.factory"; import { userFactory } from "@/__factories__/user.factory";
describe("authContainer", () => { describe("authContainer", () => {

View File

@@ -1,9 +1,9 @@
import { ContainerModule, type interfaces } from "inversify"; import { ContainerModule, type interfaces } from "inversify";
import type { IUsersRepository } from "../application/repositories/users-repository.interface"; import type { IUsersRepository } from "../application/repositories/users.repository.interface";
import type { IAuthenticationService } from "../application/services/authentication-service.interface"; import type { IAuthenticationService } from "../application/services/authentication.service.interface";
import { MockUsersRepository } from "../infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "../infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "../infrastructure/services/mock-authentication.service"; import { MockAuthenticationService } from "../infrastructure/services/authentication.service.mock";
import { AUTH_SYMBOLS } from "./symbols"; import { AUTH_SYMBOLS } from "./symbols";
export const AuthModule = new ContainerModule((bind: interfaces.Bind) => { export const AuthModule = new ContainerModule((bind: interfaces.Bind) => {

View File

@@ -1,5 +1,5 @@
import { describe } from "vitest"; import { describe } from "vitest";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { usersRepositoryContract } from "@/__contracts__/users-repository.contract"; import { usersRepositoryContract } from "@/__contracts__/users-repository.contract";
describe("MockUsersRepository", () => { describe("MockUsersRepository", () => {

View File

@@ -1,7 +1,7 @@
import "reflect-metadata"; import "reflect-metadata";
import { injectable } from "inversify"; import { injectable } from "inversify";
import type { IUsersRepository } from "../../application/repositories/users-repository.interface"; import type { IUsersRepository } from "../../application/repositories/users.repository.interface";
import type { User } from "../../entities/models/user"; import type { User } from "../../entities/models/user";
const DEFAULT_SEED: User[] = [ const DEFAULT_SEED: User[] = [

View File

@@ -1,8 +1,8 @@
import "reflect-metadata"; import "reflect-metadata";
import { inject, injectable } from "inversify"; import { inject, injectable } from "inversify";
import type { IAuthenticationService } from "../../application/services/authentication-service.interface"; import type { IAuthenticationService } from "../../application/services/authentication.service.interface";
import type { IUsersRepository } from "../../application/repositories/users-repository.interface"; import type { IUsersRepository } from "../../application/repositories/users.repository.interface";
import { UnauthenticatedError } from "../../entities/errors/auth"; import { UnauthenticatedError } from "../../entities/errors/auth";
import { sessionSchema, type Session } from "../../entities/models/session"; import { sessionSchema, type Session } from "../../entities/models/session";
import type { Cookie } from "../../entities/models/cookie"; import type { Cookie } from "../../entities/models/cookie";

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "@/di/container"; import { authContainer } from "@/di/container";
import { AUTH_SYMBOLS } from "@/di/symbols"; import { AUTH_SYMBOLS } from "@/di/symbols";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; import type { IUsersRepository } from "@/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; import type { IAuthenticationService } from "@/application/services/authentication.service.interface";
import { authRouter } from "./router"; import { authRouter } from "./router";
describe("authRouter", () => { describe("authRouter", () => {

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "@/di/container"; import { authContainer } from "@/di/container";
import { AUTH_SYMBOLS } from "@/di/symbols"; import { AUTH_SYMBOLS } from "@/di/symbols";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; import type { IUsersRepository } from "@/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; import type { IAuthenticationService } from "@/application/services/authentication.service.interface";
import { InputParseError } from "@/entities/errors/common"; import { InputParseError } from "@/entities/errors/common";
import { signInController } from "./sign-in.controller"; import { signInController } from "./sign-in.controller";

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "@/di/container"; import { authContainer } from "@/di/container";
import { AUTH_SYMBOLS } from "@/di/symbols"; import { AUTH_SYMBOLS } from "@/di/symbols";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; import type { IUsersRepository } from "@/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; import type { IAuthenticationService } from "@/application/services/authentication.service.interface";
import { InputParseError } from "@/entities/errors/common"; import { InputParseError } from "@/entities/errors/common";
import { signOutController } from "./sign-out.controller"; import { signOutController } from "./sign-out.controller";

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "@/di/container"; import { authContainer } from "@/di/container";
import { AUTH_SYMBOLS } from "@/di/symbols"; import { AUTH_SYMBOLS } from "@/di/symbols";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; import type { IUsersRepository } from "@/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; import type { IAuthenticationService } from "@/application/services/authentication.service.interface";
import { InputParseError } from "@/entities/errors/common"; import { InputParseError } from "@/entities/errors/common";
import { signUpController } from "./sign-up.controller"; import { signUpController } from "./sign-up.controller";

View File

@@ -3,10 +3,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "../src/di/container"; import { authContainer } from "../src/di/container";
import { AUTH_SYMBOLS } from "../src/di/symbols"; import { AUTH_SYMBOLS } from "../src/di/symbols";
import { MockUsersRepository } from "../src/infrastructure/repositories/mock-users.repository"; import { MockUsersRepository } from "../src/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "../src/infrastructure/services/mock-authentication.service"; import { MockAuthenticationService } from "../src/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "../src/application/repositories/users-repository.interface"; import type { IUsersRepository } from "../src/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "../src/application/services/authentication-service.interface"; import type { IAuthenticationService } from "../src/application/services/authentication.service.interface";
import { authRouter } from "../src/integrations/api/router"; import { authRouter } from "../src/integrations/api/router";
describe("auth feature: sign-up → sign-in → sign-out", () => { describe("auth feature: sign-up → sign-in → sign-out", () => {

View File

@@ -1,6 +1,6 @@
import { it, expect, beforeEach } from "vitest"; import { it, expect, beforeEach } from "vitest";
import { defineContractSuite } from "@repo/core-testing/contract"; import { defineContractSuite } from "@repo/core-testing/contract";
import type { IArticlesRepository } from "../application/repositories/articles-repository.interface.js"; import type { IArticlesRepository } from "../application/repositories/articles.repository.interface.js";
import { articleFactory } from "../__factories__/article.factory.js"; import { articleFactory } from "../__factories__/article.factory.js";
export const articlesRepositoryContract = export const articlesRepositoryContract =

View File

@@ -1,8 +1,8 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { blogContainer } from "../../di/container"; import { blogContainer } from "../../di/container";
import { BLOG_SYMBOLS } from "../../di/symbols"; import { BLOG_SYMBOLS } from "../../di/symbols";
import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; import type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; import { MockArticlesRepository } from "../../infrastructure/repositories/articles.repository.mock";
import { createArticleUseCase } from "./create-article.use-case"; import { createArticleUseCase } from "./create-article.use-case";
describe("createArticleUseCase", () => { describe("createArticleUseCase", () => {

View File

@@ -1,7 +1,7 @@
import type { Article } from "../../entities/models/article"; import type { Article } from "../../entities/models/article";
import { blogContainer } from "../../di/container"; import { blogContainer } from "../../di/container";
import { BLOG_SYMBOLS } from "../../di/symbols"; import { BLOG_SYMBOLS } from "../../di/symbols";
import type { IArticlesRepository } from "../repositories/articles-repository.interface"; import type { IArticlesRepository } from "../repositories/articles.repository.interface";
function generateSlug(title: string): string { function generateSlug(title: string): string {
return title return title

View File

@@ -1,8 +1,8 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { blogContainer } from "../../di/container"; import { blogContainer } from "../../di/container";
import { BLOG_SYMBOLS } from "../../di/symbols"; import { BLOG_SYMBOLS } from "../../di/symbols";
import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; import type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; import { MockArticlesRepository } from "../../infrastructure/repositories/articles.repository.mock";
import { articleFactory } from "../../__factories__/article.factory"; import { articleFactory } from "../../__factories__/article.factory";
import { getArticlesUseCase } from "./get-articles.use-case"; import { getArticlesUseCase } from "./get-articles.use-case";

View File

@@ -1,7 +1,7 @@
import type { Article } from "../../entities/models/article"; import type { Article } from "../../entities/models/article";
import { blogContainer } from "../../di/container"; import { blogContainer } from "../../di/container";
import { BLOG_SYMBOLS } from "../../di/symbols"; import { BLOG_SYMBOLS } from "../../di/symbols";
import type { IArticlesRepository } from "../repositories/articles-repository.interface"; import type { IArticlesRepository } from "../repositories/articles.repository.interface";
export async function getArticlesUseCase(options?: { export async function getArticlesUseCase(options?: {
status?: string; status?: string;

View File

@@ -1,7 +1,7 @@
import type { SanitizedConfig } from "payload"; import type { SanitizedConfig } from "payload";
import { blogContainer } from "./container"; import { blogContainer } from "./container";
import { BLOG_SYMBOLS } from "./symbols"; import { BLOG_SYMBOLS } from "./symbols";
import { PayloadArticlesRepository } from "../infrastructure/repositories/payload-articles.repository"; import { ArticlesRepository } from "../infrastructure/repositories/articles.repository";
export function bindProductionBlog(config: SanitizedConfig): void { export function bindProductionBlog(config: SanitizedConfig): void {
if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) {
@@ -9,5 +9,5 @@ export function bindProductionBlog(config: SanitizedConfig): void {
} }
blogContainer blogContainer
.bind(BLOG_SYMBOLS.IArticlesRepository) .bind(BLOG_SYMBOLS.IArticlesRepository)
.toConstantValue(new PayloadArticlesRepository(config)); .toConstantValue(new ArticlesRepository(config));
} }

View File

@@ -2,8 +2,8 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { blogContainer } from "./container"; import { blogContainer } from "./container";
import { BLOG_SYMBOLS } from "./symbols"; import { BLOG_SYMBOLS } from "./symbols";
import { BlogModule } from "./module"; import { BlogModule } from "./module";
import { MockArticlesRepository } from "../infrastructure/repositories/mock-articles.repository"; import { MockArticlesRepository } from "../infrastructure/repositories/articles.repository.mock";
import type { IArticlesRepository } from "../application/repositories/articles-repository.interface"; import type { IArticlesRepository } from "../application/repositories/articles.repository.interface";
describe("blogContainer", () => { describe("blogContainer", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -1,7 +1,7 @@
import { ContainerModule, type interfaces } from "inversify"; import { ContainerModule, type interfaces } from "inversify";
import type { IArticlesRepository } from "../application/repositories/articles-repository.interface"; import type { IArticlesRepository } from "../application/repositories/articles.repository.interface";
import { MockArticlesRepository } from "../infrastructure/repositories/mock-articles.repository"; import { MockArticlesRepository } from "../infrastructure/repositories/articles.repository.mock";
import { BLOG_SYMBOLS } from "./symbols"; import { BLOG_SYMBOLS } from "./symbols";
export const BlogModule = new ContainerModule((bind: interfaces.Bind) => { export const BlogModule = new ContainerModule((bind: interfaces.Bind) => {

View File

@@ -1,5 +1,5 @@
import { describe } from "vitest"; import { describe } from "vitest";
import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; import { MockArticlesRepository } from "@/infrastructure/repositories/articles.repository.mock";
import { articlesRepositoryContract } from "@/__contracts__/articles-repository.contract"; import { articlesRepositoryContract } from "@/__contracts__/articles-repository.contract";
describe("MockArticlesRepository", () => { describe("MockArticlesRepository", () => {

View File

@@ -1,7 +1,7 @@
import "reflect-metadata"; import "reflect-metadata";
import { injectable } from "inversify"; import { injectable } from "inversify";
import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; import type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import type { Article } from "../../entities/models/article"; import type { Article } from "../../entities/models/article";
@injectable() @injectable()

View File

@@ -1,5 +1,5 @@
import { describe, expect, it, vi, beforeEach } from "vitest"; import { describe, expect, it, vi, beforeEach } from "vitest";
import { PayloadArticlesRepository } from "@/infrastructure/repositories/payload-articles.repository"; import { ArticlesRepository } from "@/infrastructure/repositories/articles.repository";
import { articlesRepositoryContract } from "@/__contracts__/articles-repository.contract"; import { articlesRepositoryContract } from "@/__contracts__/articles-repository.contract";
import { stubPayloadConfig } from "@repo/core-testing/payload/stub-config"; import { stubPayloadConfig } from "@repo/core-testing/payload/stub-config";
@@ -94,13 +94,13 @@ vi.mock("payload", () => ({
// Contract suite // Contract suite
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
describe("PayloadArticlesRepository", () => { describe("ArticlesRepository", () => {
describe("contract", () => { describe("contract", () => {
articlesRepositoryContract.run(async () => { articlesRepositoryContract.run(async () => {
const stub = buildPayloadStub(); const stub = buildPayloadStub();
const { getPayload } = await import("payload"); const { getPayload } = await import("payload");
(getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub); (getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub);
return new PayloadArticlesRepository(stubPayloadConfig); return new ArticlesRepository(stubPayloadConfig);
}); });
}); });
@@ -133,7 +133,7 @@ describe("PayloadArticlesRepository", () => {
find: findMock, find: findMock,
}); });
const repo = new PayloadArticlesRepository(stubPayloadConfig); const repo = new ArticlesRepository(stubPayloadConfig);
const result = await repo.getArticleBySlug("hello"); const result = await repo.getArticleBySlug("hello");
expect(findMock).toHaveBeenCalledWith({ expect(findMock).toHaveBeenCalledWith({
@@ -155,7 +155,7 @@ describe("PayloadArticlesRepository", () => {
find: vi.fn().mockResolvedValue({ docs: [] }), find: vi.fn().mockResolvedValue({ docs: [] }),
}); });
const repo = new PayloadArticlesRepository(stubPayloadConfig); const repo = new ArticlesRepository(stubPayloadConfig);
const result = await repo.getArticleBySlug("missing"); const result = await repo.getArticleBySlug("missing");
expect(result).toBeUndefined(); expect(result).toBeUndefined();
}); });

View File

@@ -3,7 +3,7 @@ import { injectable } from "inversify";
import { getPayload } from "payload"; import { getPayload } from "payload";
import type { SanitizedConfig } from "payload"; import type { SanitizedConfig } from "payload";
import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; import type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import type { Article } from "../../entities/models/article"; import type { Article } from "../../entities/models/article";
type PayloadArticleDoc = { type PayloadArticleDoc = {
@@ -37,7 +37,7 @@ function mapDoc(doc: PayloadArticleDoc): Article {
} }
@injectable() @injectable()
export class PayloadArticlesRepository implements IArticlesRepository { export class ArticlesRepository implements IArticlesRepository {
private config: SanitizedConfig; private config: SanitizedConfig;
constructor(config: SanitizedConfig) { constructor(config: SanitizedConfig) {

View File

@@ -1,8 +1,8 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { blogContainer } from "../../di/container"; import { blogContainer } from "../../di/container";
import { BLOG_SYMBOLS } from "../../di/symbols"; import { BLOG_SYMBOLS } from "../../di/symbols";
import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; import { MockArticlesRepository } from "../../infrastructure/repositories/articles.repository.mock";
import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; import type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import { blogRouter } from "./router"; import { blogRouter } from "./router";
import { articleFactory } from "../../__factories__/article.factory.js"; import { articleFactory } from "../../__factories__/article.factory.js";

View File

@@ -1,8 +1,8 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { blogContainer } from "../../di/container"; import { blogContainer } from "../../di/container";
import { BLOG_SYMBOLS } from "../../di/symbols"; import { BLOG_SYMBOLS } from "../../di/symbols";
import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; import { MockArticlesRepository } from "../../infrastructure/repositories/articles.repository.mock";
import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; import type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import { InputParseError } from "../../entities/errors/common"; import { InputParseError } from "../../entities/errors/common";
import { import {
createArticleController, createArticleController,

View File

@@ -4,7 +4,7 @@ import { InputParseError } from "../../entities/errors/common";
import type { Article } from "../../entities/models/article"; import type { Article } from "../../entities/models/article";
import { blogContainer } from "../../di/container"; import { blogContainer } from "../../di/container";
import { BLOG_SYMBOLS } from "../../di/symbols"; import { BLOG_SYMBOLS } from "../../di/symbols";
import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; import type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import { getArticlesUseCase } from "../../application/use-cases/get-articles.use-case"; import { getArticlesUseCase } from "../../application/use-cases/get-articles.use-case";
import { createArticleUseCase } from "../../application/use-cases/create-article.use-case"; import { createArticleUseCase } from "../../application/use-cases/create-article.use-case";

View File

@@ -6,8 +6,8 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { blogContainer } from "../src/di/container"; import { blogContainer } from "../src/di/container";
import { BLOG_SYMBOLS } from "../src/di/symbols"; import { BLOG_SYMBOLS } from "../src/di/symbols";
import { MockArticlesRepository } from "../src/infrastructure/repositories/mock-articles.repository"; import { MockArticlesRepository } from "../src/infrastructure/repositories/articles.repository.mock";
import type { IArticlesRepository } from "../src/application/repositories/articles-repository.interface"; import type { IArticlesRepository } from "../src/application/repositories/articles.repository.interface";
import { blogRouter } from "../src/integrations/api/router"; import { blogRouter } from "../src/integrations/api/router";
describe("blog feature: article-by-slug end-to-end", () => { describe("blog feature: article-by-slug end-to-end", () => {

View File

@@ -1,6 +1,6 @@
import { it, expect, beforeEach } from "vitest"; import { it, expect, beforeEach } from "vitest";
import { defineContractSuite } from "@repo/core-testing/contract"; import { defineContractSuite } from "@repo/core-testing/contract";
import type { IPagesRepository } from "../application/repositories/pages-repository.interface.js"; import type { IPagesRepository } from "../application/repositories/pages.repository.interface.js";
import type { Page } from "../entities/models/page.js"; import type { Page } from "../entities/models/page.js";
const SEED_DATE = new Date("2026-01-01T00:00:00.000Z"); const SEED_DATE = new Date("2026-01-01T00:00:00.000Z");

View File

@@ -1,6 +1,6 @@
import { it, expect, beforeEach } from "vitest"; import { it, expect, beforeEach } from "vitest";
import { defineContractSuite } from "@repo/core-testing/contract"; import { defineContractSuite } from "@repo/core-testing/contract";
import type { ISiteSettingsRepository } from "../application/repositories/site-settings-repository.interface.js"; import type { ISiteSettingsRepository } from "../application/repositories/site-settings.repository.interface.js";
/** /**
* Contract for ISiteSettingsRepository. * Contract for ISiteSettingsRepository.

View File

@@ -1,8 +1,8 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { marketingPagesContainer } from "@/di/container"; import { marketingPagesContainer } from "@/di/container";
import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols";
import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; import { MockPagesRepository } from "@/infrastructure/repositories/pages.repository.mock";
import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; import type { IPagesRepository } from "@/application/repositories/pages.repository.interface";
import { getPageBySlugUseCase } from "./get-page-by-slug.use-case"; import { getPageBySlugUseCase } from "./get-page-by-slug.use-case";
describe("getPageBySlugUseCase", () => { describe("getPageBySlugUseCase", () => {

View File

@@ -1,7 +1,7 @@
import type { Page } from "../../entities/models/page"; import type { Page } from "../../entities/models/page";
import { marketingPagesContainer } from "../../di/container"; import { marketingPagesContainer } from "../../di/container";
import { MARKETING_PAGES_SYMBOLS } from "../../di/symbols"; import { MARKETING_PAGES_SYMBOLS } from "../../di/symbols";
import type { IPagesRepository } from "../repositories/pages-repository.interface"; import type { IPagesRepository } from "../repositories/pages.repository.interface";
export async function getPageBySlugUseCase( export async function getPageBySlugUseCase(
slug: string, slug: string,

View File

@@ -1,8 +1,8 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { marketingPagesContainer } from "@/di/container"; import { marketingPagesContainer } from "@/di/container";
import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols";
import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; import { MockSiteSettingsRepository } from "@/infrastructure/repositories/site-settings.repository.mock";
import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; import type { ISiteSettingsRepository } from "@/application/repositories/site-settings.repository.interface";
import { getSiteSettingsUseCase } from "./get-site-settings.use-case"; import { getSiteSettingsUseCase } from "./get-site-settings.use-case";
describe("getSiteSettingsUseCase", () => { describe("getSiteSettingsUseCase", () => {

View File

@@ -1,7 +1,7 @@
import type { SiteSettings } from "../../entities/models/site-settings"; import type { SiteSettings } from "../../entities/models/site-settings";
import { marketingPagesContainer } from "../../di/container"; import { marketingPagesContainer } from "../../di/container";
import { MARKETING_PAGES_SYMBOLS } from "../../di/symbols"; import { MARKETING_PAGES_SYMBOLS } from "../../di/symbols";
import type { ISiteSettingsRepository } from "../repositories/site-settings-repository.interface"; import type { ISiteSettingsRepository } from "../repositories/site-settings.repository.interface";
export async function getSiteSettingsUseCase(): Promise<SiteSettings> { export async function getSiteSettingsUseCase(): Promise<SiteSettings> {
const repo = marketingPagesContainer.get<ISiteSettingsRepository>( const repo = marketingPagesContainer.get<ISiteSettingsRepository>(

View File

@@ -1,8 +1,8 @@
import type { SanitizedConfig } from "payload"; import type { SanitizedConfig } from "payload";
import { marketingPagesContainer } from "./container"; import { marketingPagesContainer } from "./container";
import { MARKETING_PAGES_SYMBOLS } from "./symbols"; import { MARKETING_PAGES_SYMBOLS } from "./symbols";
import { PayloadPagesRepository } from "../infrastructure/repositories/payload-pages.repository"; import { PagesRepository } from "../infrastructure/repositories/pages.repository";
import { PayloadSiteSettingsRepository } from "../infrastructure/repositories/payload-site-settings.repository"; import { SiteSettingsRepository } from "../infrastructure/repositories/site-settings.repository";
export function bindProductionMarketingPages(config: SanitizedConfig): void { export function bindProductionMarketingPages(config: SanitizedConfig): void {
if ( if (
@@ -12,7 +12,7 @@ export function bindProductionMarketingPages(config: SanitizedConfig): void {
} }
marketingPagesContainer marketingPagesContainer
.bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository)
.toConstantValue(new PayloadPagesRepository(config)); .toConstantValue(new PagesRepository(config));
if ( if (
marketingPagesContainer.isBound( marketingPagesContainer.isBound(
@@ -25,5 +25,5 @@ export function bindProductionMarketingPages(config: SanitizedConfig): void {
} }
marketingPagesContainer marketingPagesContainer
.bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository)
.toConstantValue(new PayloadSiteSettingsRepository(config)); .toConstantValue(new SiteSettingsRepository(config));
} }

View File

@@ -2,10 +2,10 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { marketingPagesContainer } from "./container"; import { marketingPagesContainer } from "./container";
import { MARKETING_PAGES_SYMBOLS } from "./symbols"; import { MARKETING_PAGES_SYMBOLS } from "./symbols";
import { MarketingPagesModule } from "./module"; import { MarketingPagesModule } from "./module";
import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; import { MockPagesRepository } from "@/infrastructure/repositories/pages.repository.mock";
import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; import { MockSiteSettingsRepository } from "@/infrastructure/repositories/site-settings.repository.mock";
import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; import type { IPagesRepository } from "@/application/repositories/pages.repository.interface";
import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; import type { ISiteSettingsRepository } from "@/application/repositories/site-settings.repository.interface";
describe("marketingPagesContainer", () => { describe("marketingPagesContainer", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -1,9 +1,9 @@
import { ContainerModule, type interfaces } from "inversify"; import { ContainerModule, type interfaces } from "inversify";
import type { IPagesRepository } from "../application/repositories/pages-repository.interface"; import type { IPagesRepository } from "../application/repositories/pages.repository.interface";
import type { ISiteSettingsRepository } from "../application/repositories/site-settings-repository.interface"; import type { ISiteSettingsRepository } from "../application/repositories/site-settings.repository.interface";
import { MockPagesRepository } from "../infrastructure/repositories/mock-pages.repository"; import { MockPagesRepository } from "../infrastructure/repositories/pages.repository.mock";
import { MockSiteSettingsRepository } from "../infrastructure/repositories/mock-site-settings.repository"; import { MockSiteSettingsRepository } from "../infrastructure/repositories/site-settings.repository.mock";
import { MARKETING_PAGES_SYMBOLS } from "./symbols"; import { MARKETING_PAGES_SYMBOLS } from "./symbols";
export const MarketingPagesModule = new ContainerModule( export const MarketingPagesModule = new ContainerModule(

View File

@@ -1,5 +1,5 @@
import { describe } from "vitest"; import { describe } from "vitest";
import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; import { MockPagesRepository } from "@/infrastructure/repositories/pages.repository.mock";
import { import {
pagesRepositoryContract, pagesRepositoryContract,
CONTRACT_PAGES_SEED, CONTRACT_PAGES_SEED,

View File

@@ -1,7 +1,7 @@
import "reflect-metadata"; import "reflect-metadata";
import { injectable } from "inversify"; import { injectable } from "inversify";
import type { IPagesRepository } from "../../application/repositories/pages-repository.interface"; import type { IPagesRepository } from "../../application/repositories/pages.repository.interface";
import type { Page } from "../../entities/models/page"; import type { Page } from "../../entities/models/page";
const SEED_DATE = new Date("2026-01-01T00:00:00.000Z"); const SEED_DATE = new Date("2026-01-01T00:00:00.000Z");

View File

@@ -1,5 +1,5 @@
import { describe, vi } from "vitest"; import { describe, vi } from "vitest";
import { PayloadPagesRepository } from "@/infrastructure/repositories/payload-pages.repository"; import { PagesRepository } from "@/infrastructure/repositories/pages.repository";
import { import {
pagesRepositoryContract, pagesRepositoryContract,
CONTRACT_PAGES_SEED, CONTRACT_PAGES_SEED,
@@ -71,13 +71,13 @@ vi.mock("payload", () => ({
// Contract suite // Contract suite
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
describe("PayloadPagesRepository", () => { describe("PagesRepository", () => {
describe("contract", () => { describe("contract", () => {
pagesRepositoryContract.run(async () => { pagesRepositoryContract.run(async () => {
const stub = buildPayloadPagesStub(CONTRACT_PAGES_SEED); const stub = buildPayloadPagesStub(CONTRACT_PAGES_SEED);
const { getPayload } = await import("payload"); const { getPayload } = await import("payload");
(getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub); (getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub);
return new PayloadPagesRepository(stubPayloadConfig); return new PagesRepository(stubPayloadConfig);
}); });
}); });
}); });

View File

@@ -3,7 +3,7 @@ import { injectable } from "inversify";
import { getPayload } from "payload"; import { getPayload } from "payload";
import type { SanitizedConfig } from "payload"; import type { SanitizedConfig } from "payload";
import type { IPagesRepository } from "../../application/repositories/pages-repository.interface"; import type { IPagesRepository } from "../../application/repositories/pages.repository.interface";
import type { Page } from "../../entities/models/page"; import type { Page } from "../../entities/models/page";
type PayloadPageDoc = { type PayloadPageDoc = {
@@ -55,7 +55,7 @@ function mapDoc(doc: PayloadPageDoc): Page {
} }
@injectable() @injectable()
export class PayloadPagesRepository implements IPagesRepository { export class PagesRepository implements IPagesRepository {
private config: SanitizedConfig; private config: SanitizedConfig;
constructor(config: SanitizedConfig) { constructor(config: SanitizedConfig) {

View File

@@ -1,5 +1,5 @@
import { describe } from "vitest"; import { describe } from "vitest";
import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; import { MockSiteSettingsRepository } from "@/infrastructure/repositories/site-settings.repository.mock";
import { siteSettingsRepositoryContract } from "@/__contracts__/site-settings-repository.contract"; import { siteSettingsRepositoryContract } from "@/__contracts__/site-settings-repository.contract";
describe("MockSiteSettingsRepository", () => { describe("MockSiteSettingsRepository", () => {

View File

@@ -1,7 +1,7 @@
import "reflect-metadata"; import "reflect-metadata";
import { injectable } from "inversify"; import { injectable } from "inversify";
import type { ISiteSettingsRepository } from "../../application/repositories/site-settings-repository.interface"; import type { ISiteSettingsRepository } from "../../application/repositories/site-settings.repository.interface";
import type { SiteSettings } from "../../entities/models/site-settings"; import type { SiteSettings } from "../../entities/models/site-settings";
@injectable() @injectable()

View File

@@ -1,5 +1,5 @@
import { describe, vi } from "vitest"; import { describe, vi } from "vitest";
import { PayloadSiteSettingsRepository } from "@/infrastructure/repositories/payload-site-settings.repository"; import { SiteSettingsRepository } from "@/infrastructure/repositories/site-settings.repository";
import { siteSettingsRepositoryContract } from "@/__contracts__/site-settings-repository.contract"; import { siteSettingsRepositoryContract } from "@/__contracts__/site-settings-repository.contract";
import { stubPayloadConfig } from "@repo/core-testing/payload/stub-config"; import { stubPayloadConfig } from "@repo/core-testing/payload/stub-config";
@@ -28,13 +28,13 @@ vi.mock("payload", () => ({
// Contract suite // Contract suite
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
describe("PayloadSiteSettingsRepository", () => { describe("SiteSettingsRepository", () => {
describe("contract", () => { describe("contract", () => {
siteSettingsRepositoryContract.run(async () => { siteSettingsRepositoryContract.run(async () => {
const stub = buildSiteSettingsStub(); const stub = buildSiteSettingsStub();
const { getPayload } = await import("payload"); const { getPayload } = await import("payload");
(getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub); (getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub);
return new PayloadSiteSettingsRepository(stubPayloadConfig); return new SiteSettingsRepository(stubPayloadConfig);
}); });
}); });
}); });

View File

@@ -3,7 +3,7 @@ import { injectable } from "inversify";
import { getPayload } from "payload"; import { getPayload } from "payload";
import type { SanitizedConfig } from "payload"; import type { SanitizedConfig } from "payload";
import type { ISiteSettingsRepository } from "../../application/repositories/site-settings-repository.interface"; import type { ISiteSettingsRepository } from "../../application/repositories/site-settings.repository.interface";
import type { SiteSettings } from "../../entities/models/site-settings"; import type { SiteSettings } from "../../entities/models/site-settings";
type PayloadSiteSettings = { type PayloadSiteSettings = {
@@ -12,7 +12,7 @@ type PayloadSiteSettings = {
}; };
@injectable() @injectable()
export class PayloadSiteSettingsRepository implements ISiteSettingsRepository { export class SiteSettingsRepository implements ISiteSettingsRepository {
private config: SanitizedConfig; private config: SanitizedConfig;
constructor(config: SanitizedConfig) { constructor(config: SanitizedConfig) {

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { marketingPagesContainer } from "@/di/container"; import { marketingPagesContainer } from "@/di/container";
import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols";
import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; import { MockPagesRepository } from "@/infrastructure/repositories/pages.repository.mock";
import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; import { MockSiteSettingsRepository } from "@/infrastructure/repositories/site-settings.repository.mock";
import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; import type { IPagesRepository } from "@/application/repositories/pages.repository.interface";
import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; import type { ISiteSettingsRepository } from "@/application/repositories/site-settings.repository.interface";
import { marketingPagesRouter } from "./router"; import { marketingPagesRouter } from "./router";
describe("marketingPagesRouter", () => { describe("marketingPagesRouter", () => {

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { marketingPagesContainer } from "@/di/container"; import { marketingPagesContainer } from "@/di/container";
import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols";
import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; import { MockPagesRepository } from "@/infrastructure/repositories/pages.repository.mock";
import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; import { MockSiteSettingsRepository } from "@/infrastructure/repositories/site-settings.repository.mock";
import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; import type { IPagesRepository } from "@/application/repositories/pages.repository.interface";
import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; import type { ISiteSettingsRepository } from "@/application/repositories/site-settings.repository.interface";
import { InputParseError } from "@/entities/errors/common"; import { InputParseError } from "@/entities/errors/common";
import { import {
getPageBySlugController, getPageBySlugController,

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { marketingPagesContainer } from "../src/di/container"; import { marketingPagesContainer } from "../src/di/container";
import { MARKETING_PAGES_SYMBOLS } from "../src/di/symbols"; import { MARKETING_PAGES_SYMBOLS } from "../src/di/symbols";
import { MockPagesRepository } from "../src/infrastructure/repositories/mock-pages.repository"; import { MockPagesRepository } from "../src/infrastructure/repositories/pages.repository.mock";
import { MockSiteSettingsRepository } from "../src/infrastructure/repositories/mock-site-settings.repository"; import { MockSiteSettingsRepository } from "../src/infrastructure/repositories/site-settings.repository.mock";
import type { IPagesRepository } from "../src/application/repositories/pages-repository.interface"; import type { IPagesRepository } from "../src/application/repositories/pages.repository.interface";
import type { ISiteSettingsRepository } from "../src/application/repositories/site-settings-repository.interface"; import type { ISiteSettingsRepository } from "../src/application/repositories/site-settings.repository.interface";
import { marketingPagesRouter } from "../src/integrations/api/router"; import { marketingPagesRouter } from "../src/integrations/api/router";
describe("marketing-pages feature: page-by-slug end-to-end", () => { describe("marketing-pages feature: page-by-slug end-to-end", () => {

View File

@@ -1,6 +1,6 @@
import { it, expect, beforeEach } from "vitest"; import { it, expect, beforeEach } from "vitest";
import { defineContractSuite } from "@repo/core-testing/contract"; import { defineContractSuite } from "@repo/core-testing/contract";
import type { IHeaderRepository } from "../application/repositories/header-repository.interface.js"; import type { IHeaderRepository } from "../application/repositories/header.repository.interface.js";
import type { Header } from "../entities/models/header.js"; import type { Header } from "../entities/models/header.js";
/** /**

View File

@@ -1,8 +1,8 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { navigationContainer } from "@/di/container"; import { navigationContainer } from "@/di/container";
import { NAVIGATION_SYMBOLS } from "@/di/symbols"; import { NAVIGATION_SYMBOLS } from "@/di/symbols";
import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository"; import { MockHeaderRepository } from "@/infrastructure/repositories/header.repository.mock";
import type { IHeaderRepository } from "@/application/repositories/header-repository.interface"; import type { IHeaderRepository } from "@/application/repositories/header.repository.interface";
import { getHeaderUseCase } from "./get-header.use-case"; import { getHeaderUseCase } from "./get-header.use-case";
describe("getHeaderUseCase", () => { describe("getHeaderUseCase", () => {

View File

@@ -1,7 +1,7 @@
import type { Header } from "../../entities/models/header"; import type { Header } from "../../entities/models/header";
import { navigationContainer } from "../../di/container"; import { navigationContainer } from "../../di/container";
import { NAVIGATION_SYMBOLS } from "../../di/symbols"; import { NAVIGATION_SYMBOLS } from "../../di/symbols";
import type { IHeaderRepository } from "../repositories/header-repository.interface"; import type { IHeaderRepository } from "../repositories/header.repository.interface";
export async function getHeaderUseCase(): Promise<Header> { export async function getHeaderUseCase(): Promise<Header> {
const repo = navigationContainer.get<IHeaderRepository>( const repo = navigationContainer.get<IHeaderRepository>(

View File

@@ -1,7 +1,7 @@
import type { SanitizedConfig } from "payload"; import type { SanitizedConfig } from "payload";
import { navigationContainer } from "./container"; import { navigationContainer } from "./container";
import { NAVIGATION_SYMBOLS } from "./symbols"; import { NAVIGATION_SYMBOLS } from "./symbols";
import { PayloadHeaderRepository } from "../infrastructure/repositories/payload-header.repository"; import { HeaderRepository } from "../infrastructure/repositories/header.repository";
export function bindProductionNavigation(config: SanitizedConfig): void { export function bindProductionNavigation(config: SanitizedConfig): void {
if (navigationContainer.isBound(NAVIGATION_SYMBOLS.IHeaderRepository)) { if (navigationContainer.isBound(NAVIGATION_SYMBOLS.IHeaderRepository)) {
@@ -9,5 +9,5 @@ export function bindProductionNavigation(config: SanitizedConfig): void {
} }
navigationContainer navigationContainer
.bind(NAVIGATION_SYMBOLS.IHeaderRepository) .bind(NAVIGATION_SYMBOLS.IHeaderRepository)
.toConstantValue(new PayloadHeaderRepository(config)); .toConstantValue(new HeaderRepository(config));
} }

View File

@@ -2,8 +2,8 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { navigationContainer } from "./container"; import { navigationContainer } from "./container";
import { NAVIGATION_SYMBOLS } from "./symbols"; import { NAVIGATION_SYMBOLS } from "./symbols";
import { NavigationModule } from "./module"; import { NavigationModule } from "./module";
import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository"; import { MockHeaderRepository } from "@/infrastructure/repositories/header.repository.mock";
import type { IHeaderRepository } from "@/application/repositories/header-repository.interface"; import type { IHeaderRepository } from "@/application/repositories/header.repository.interface";
describe("navigationContainer", () => { describe("navigationContainer", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -1,7 +1,7 @@
import { ContainerModule, type interfaces } from "inversify"; import { ContainerModule, type interfaces } from "inversify";
import type { IHeaderRepository } from "../application/repositories/header-repository.interface"; import type { IHeaderRepository } from "../application/repositories/header.repository.interface";
import { MockHeaderRepository } from "../infrastructure/repositories/mock-header.repository"; import { MockHeaderRepository } from "../infrastructure/repositories/header.repository.mock";
import { NAVIGATION_SYMBOLS } from "./symbols"; import { NAVIGATION_SYMBOLS } from "./symbols";
export const NavigationModule = new ContainerModule((bind: interfaces.Bind) => { export const NavigationModule = new ContainerModule((bind: interfaces.Bind) => {

View File

@@ -1,5 +1,5 @@
import { describe } from "vitest"; import { describe } from "vitest";
import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository"; import { MockHeaderRepository } from "@/infrastructure/repositories/header.repository.mock";
import { headerRepositoryContract, CONTRACT_HEADER_SEED } from "@/__contracts__/header-repository.contract"; import { headerRepositoryContract, CONTRACT_HEADER_SEED } from "@/__contracts__/header-repository.contract";
describe("MockHeaderRepository", () => { describe("MockHeaderRepository", () => {

View File

@@ -1,7 +1,7 @@
import "reflect-metadata"; import "reflect-metadata";
import { injectable } from "inversify"; import { injectable } from "inversify";
import type { IHeaderRepository } from "../../application/repositories/header-repository.interface"; import type { IHeaderRepository } from "../../application/repositories/header.repository.interface";
import type { Header, HeaderItem } from "../../entities/models/header"; import type { Header, HeaderItem } from "../../entities/models/header";
const DEFAULT_ITEMS: HeaderItem[] = [ const DEFAULT_ITEMS: HeaderItem[] = [

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, vi } from "vitest"; import { describe, it, expect, vi } from "vitest";
import { PayloadHeaderRepository } from "@/infrastructure/repositories/payload-header.repository"; import { HeaderRepository } from "@/infrastructure/repositories/header.repository";
import { headerRepositoryContract, CONTRACT_HEADER_SEED } from "@/__contracts__/header-repository.contract"; import { headerRepositoryContract, CONTRACT_HEADER_SEED } from "@/__contracts__/header-repository.contract";
import { stubPayloadConfig } from "@repo/core-testing/payload/stub-config"; import { stubPayloadConfig } from "@repo/core-testing/payload/stub-config";
@@ -23,13 +23,13 @@ vi.mock("payload", () => ({
// Contract suite // Contract suite
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
describe("PayloadHeaderRepository", () => { describe("HeaderRepository", () => {
describe("contract", () => { describe("contract", () => {
headerRepositoryContract.run(async () => { headerRepositoryContract.run(async () => {
const stub = buildHeaderStub(); const stub = buildHeaderStub();
const { getPayload } = await import("payload"); const { getPayload } = await import("payload");
(getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub); (getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub);
return new PayloadHeaderRepository(stubPayloadConfig); return new HeaderRepository(stubPayloadConfig);
}); });
}); });
@@ -42,7 +42,7 @@ describe("PayloadHeaderRepository", () => {
const { getPayload } = await import("payload"); const { getPayload } = await import("payload");
(getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub); (getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub);
const repo = new PayloadHeaderRepository(stubPayloadConfig); const repo = new HeaderRepository(stubPayloadConfig);
const header = await repo.getHeader(); const header = await repo.getHeader();
expect(header.logoId).toBe("abc-123"); expect(header.logoId).toBe("abc-123");
@@ -53,7 +53,7 @@ describe("PayloadHeaderRepository", () => {
const { getPayload } = await import("payload"); const { getPayload } = await import("payload");
(getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub); (getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub);
const repo = new PayloadHeaderRepository(stubPayloadConfig); const repo = new HeaderRepository(stubPayloadConfig);
const header = await repo.getHeader(); const header = await repo.getHeader();
expect(header.logoId).toBe("scalar-id"); expect(header.logoId).toBe("scalar-id");
@@ -64,7 +64,7 @@ describe("PayloadHeaderRepository", () => {
const { getPayload } = await import("payload"); const { getPayload } = await import("payload");
(getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub); (getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub);
const repo = new PayloadHeaderRepository(stubPayloadConfig); const repo = new HeaderRepository(stubPayloadConfig);
const header = await repo.getHeader(); const header = await repo.getHeader();
expect(header.logoId).toBeUndefined(); expect(header.logoId).toBeUndefined();
@@ -79,7 +79,7 @@ describe("PayloadHeaderRepository", () => {
const { getPayload } = await import("payload"); const { getPayload } = await import("payload");
(getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub); (getPayload as ReturnType<typeof vi.fn>).mockResolvedValue(stub);
const repo = new PayloadHeaderRepository(stubPayloadConfig); const repo = new HeaderRepository(stubPayloadConfig);
const header = await repo.getHeader(); const header = await repo.getHeader();
expect(header.items[0]?.label).toBe(""); expect(header.items[0]?.label).toBe("");

View File

@@ -3,7 +3,7 @@ import { injectable } from "inversify";
import { getPayload } from "payload"; import { getPayload } from "payload";
import type { SanitizedConfig } from "payload"; import type { SanitizedConfig } from "payload";
import type { IHeaderRepository } from "../../application/repositories/header-repository.interface"; import type { IHeaderRepository } from "../../application/repositories/header.repository.interface";
import type { Header, HeaderItem } from "../../entities/models/header"; import type { Header, HeaderItem } from "../../entities/models/header";
type PayloadHeaderGlobal = { type PayloadHeaderGlobal = {
@@ -16,7 +16,7 @@ type PayloadHeaderGlobal = {
}; };
@injectable() @injectable()
export class PayloadHeaderRepository implements IHeaderRepository { export class HeaderRepository implements IHeaderRepository {
private config: SanitizedConfig; private config: SanitizedConfig;
constructor(config: SanitizedConfig) { constructor(config: SanitizedConfig) {

View File

@@ -1,8 +1,8 @@
import { beforeEach, describe, expect, it } from "vitest"; import { beforeEach, describe, expect, it } from "vitest";
import { navigationContainer } from "@/di/container"; import { navigationContainer } from "@/di/container";
import { NAVIGATION_SYMBOLS } from "@/di/symbols"; import { NAVIGATION_SYMBOLS } from "@/di/symbols";
import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository"; import { MockHeaderRepository } from "@/infrastructure/repositories/header.repository.mock";
import type { IHeaderRepository } from "@/application/repositories/header-repository.interface"; import type { IHeaderRepository } from "@/application/repositories/header.repository.interface";
import { navigationRouter } from "./router"; import { navigationRouter } from "./router";
describe("navigationRouter", () => { describe("navigationRouter", () => {