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)
### 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
Entity model moves (git mv — history preserved):

View File

@@ -1,6 +1,6 @@
import { it, expect, beforeEach } from "vitest";
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";
export const usersRepositoryContract =

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "@/di/container";
import { AUTH_SYMBOLS } from "@/di/symbols";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository";
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service";
import type { IUsersRepository } from "@/application/repositories/users-repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication-service.interface";
import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "@/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication.service.interface";
import { AuthenticationError } from "@/entities/errors/auth";
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 { authContainer } from "../../di/container";
import { AUTH_SYMBOLS } from "../../di/symbols";
import type { IUsersRepository } from "../repositories/users-repository.interface";
import type { IAuthenticationService } from "../services/authentication-service.interface";
import type { IUsersRepository } from "../repositories/users.repository.interface";
import type { IAuthenticationService } from "../services/authentication.service.interface";
export async function signInUseCase(input: {
username: string;

View File

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

View File

@@ -1,7 +1,7 @@
import type { Cookie } from "../../entities/models/cookie";
import { authContainer } from "../../di/container";
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(
sessionId: string,

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from "vitest";
import { authContainer } from "@/di/container";
import { AUTH_SYMBOLS } from "@/di/symbols";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository";
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service";
import type { IUsersRepository } from "@/application/repositories/users-repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication-service.interface";
import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock";
import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock";
import type { IUsersRepository } from "@/application/repositories/users.repository.interface";
import type { IAuthenticationService } from "@/application/services/authentication.service.interface";
import { AuthenticationError } from "@/entities/errors/auth";
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 { authContainer } from "../../di/container";
import { AUTH_SYMBOLS } from "../../di/symbols";
import type { IUsersRepository } from "../repositories/users-repository.interface";
import type { IAuthenticationService } from "../services/authentication-service.interface";
import type { IUsersRepository } from "../repositories/users.repository.interface";
import type { IAuthenticationService } from "../services/authentication.service.interface";
export async function signUpUseCase(input: {
username: string;

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
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";
describe("MockUsersRepository", () => {

View File

@@ -1,7 +1,7 @@
import "reflect-metadata";
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";
const DEFAULT_SEED: User[] = [

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
import { it, expect, beforeEach } from "vitest";
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";
export const articlesRepositoryContract =

View File

@@ -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 type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import { MockArticlesRepository } from "../../infrastructure/repositories/articles.repository.mock";
import { createArticleUseCase } from "./create-article.use-case";
describe("createArticleUseCase", () => {

View File

@@ -1,7 +1,7 @@
import type { Article } from "../../entities/models/article";
import { blogContainer } from "../../di/container";
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 {
return title

View File

@@ -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 type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import { MockArticlesRepository } from "../../infrastructure/repositories/articles.repository.mock";
import { articleFactory } from "../../__factories__/article.factory";
import { getArticlesUseCase } from "./get-articles.use-case";

View File

@@ -1,7 +1,7 @@
import type { Article } from "../../entities/models/article";
import { blogContainer } from "../../di/container";
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?: {
status?: string;

View File

@@ -1,7 +1,7 @@
import type { SanitizedConfig } from "payload";
import { blogContainer } from "./container";
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 {
if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) {
@@ -9,5 +9,5 @@ export function bindProductionBlog(config: SanitizedConfig): void {
}
blogContainer
.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 { 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/articles.repository.mock";
import type { IArticlesRepository } from "../application/repositories/articles.repository.interface";
describe("blogContainer", () => {
beforeEach(() => {

View File

@@ -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/articles.repository.mock";
import { BLOG_SYMBOLS } from "./symbols";
export const BlogModule = new ContainerModule((bind: interfaces.Bind) => {

View File

@@ -1,5 +1,5 @@
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";
describe("MockArticlesRepository", () => {

View File

@@ -1,7 +1,7 @@
import "reflect-metadata";
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";
@injectable()

View File

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

View File

@@ -3,7 +3,7 @@ import { injectable } from "inversify";
import { getPayload } 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";
type PayloadArticleDoc = {
@@ -37,7 +37,7 @@ function mapDoc(doc: PayloadArticleDoc): Article {
}
@injectable()
export class PayloadArticlesRepository implements IArticlesRepository {
export class ArticlesRepository implements IArticlesRepository {
private config: SanitizedConfig;
constructor(config: SanitizedConfig) {

View File

@@ -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 { MockArticlesRepository } from "../../infrastructure/repositories/articles.repository.mock";
import type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import { blogRouter } from "./router";
import { articleFactory } from "../../__factories__/article.factory.js";

View File

@@ -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 { MockArticlesRepository } from "../../infrastructure/repositories/articles.repository.mock";
import type { IArticlesRepository } from "../../application/repositories/articles.repository.interface";
import { InputParseError } from "../../entities/errors/common";
import {
createArticleController,

View File

@@ -4,7 +4,7 @@ import { InputParseError } from "../../entities/errors/common";
import type { Article } from "../../entities/models/article";
import { blogContainer } from "../../di/container";
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 { createArticleUseCase } from "../../application/use-cases/create-article.use-case";

View File

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

View File

@@ -1,6 +1,6 @@
import { it, expect, beforeEach } from "vitest";
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";
const SEED_DATE = new Date("2026-01-01T00:00:00.000Z");

View File

@@ -1,6 +1,6 @@
import { it, expect, beforeEach } from "vitest";
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.

View File

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

View File

@@ -1,7 +1,7 @@
import type { Page } from "../../entities/models/page";
import { marketingPagesContainer } from "../../di/container";
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(
slug: string,

View File

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

View File

@@ -1,7 +1,7 @@
import type { SiteSettings } from "../../entities/models/site-settings";
import { marketingPagesContainer } from "../../di/container";
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> {
const repo = marketingPagesContainer.get<ISiteSettingsRepository>(

View File

@@ -1,8 +1,8 @@
import type { SanitizedConfig } from "payload";
import { marketingPagesContainer } from "./container";
import { MARKETING_PAGES_SYMBOLS } from "./symbols";
import { PayloadPagesRepository } from "../infrastructure/repositories/payload-pages.repository";
import { PayloadSiteSettingsRepository } from "../infrastructure/repositories/payload-site-settings.repository";
import { PagesRepository } from "../infrastructure/repositories/pages.repository";
import { SiteSettingsRepository } from "../infrastructure/repositories/site-settings.repository";
export function bindProductionMarketingPages(config: SanitizedConfig): void {
if (
@@ -12,7 +12,7 @@ export function bindProductionMarketingPages(config: SanitizedConfig): void {
}
marketingPagesContainer
.bind(MARKETING_PAGES_SYMBOLS.IPagesRepository)
.toConstantValue(new PayloadPagesRepository(config));
.toConstantValue(new PagesRepository(config));
if (
marketingPagesContainer.isBound(
@@ -25,5 +25,5 @@ export function bindProductionMarketingPages(config: SanitizedConfig): void {
}
marketingPagesContainer
.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 { MARKETING_PAGES_SYMBOLS } from "./symbols";
import { MarketingPagesModule } from "./module";
import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository";
import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository";
import type { IPagesRepository } from "@/application/repositories/pages-repository.interface";
import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface";
import { MockPagesRepository } from "@/infrastructure/repositories/pages.repository.mock";
import { MockSiteSettingsRepository } from "@/infrastructure/repositories/site-settings.repository.mock";
import type { IPagesRepository } from "@/application/repositories/pages.repository.interface";
import type { ISiteSettingsRepository } from "@/application/repositories/site-settings.repository.interface";
describe("marketingPagesContainer", () => {
beforeEach(() => {

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
import "reflect-metadata";
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";
const SEED_DATE = new Date("2026-01-01T00:00:00.000Z");

View File

@@ -1,5 +1,5 @@
import { describe, vi } from "vitest";
import { PayloadPagesRepository } from "@/infrastructure/repositories/payload-pages.repository";
import { PagesRepository } from "@/infrastructure/repositories/pages.repository";
import {
pagesRepositoryContract,
CONTRACT_PAGES_SEED,
@@ -71,13 +71,13 @@ vi.mock("payload", () => ({
// Contract suite
// ---------------------------------------------------------------------------
describe("PayloadPagesRepository", () => {
describe("PagesRepository", () => {
describe("contract", () => {
pagesRepositoryContract.run(async () => {
const stub = buildPayloadPagesStub(CONTRACT_PAGES_SEED);
const { getPayload } = await import("payload");
(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 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";
type PayloadPageDoc = {
@@ -55,7 +55,7 @@ function mapDoc(doc: PayloadPageDoc): Page {
}
@injectable()
export class PayloadPagesRepository implements IPagesRepository {
export class PagesRepository implements IPagesRepository {
private config: SanitizedConfig;
constructor(config: SanitizedConfig) {

View File

@@ -1,5 +1,5 @@
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";
describe("MockSiteSettingsRepository", () => {

View File

@@ -1,7 +1,7 @@
import "reflect-metadata";
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";
@injectable()

View File

@@ -1,5 +1,5 @@
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 { stubPayloadConfig } from "@repo/core-testing/payload/stub-config";
@@ -28,13 +28,13 @@ vi.mock("payload", () => ({
// Contract suite
// ---------------------------------------------------------------------------
describe("PayloadSiteSettingsRepository", () => {
describe("SiteSettingsRepository", () => {
describe("contract", () => {
siteSettingsRepositoryContract.run(async () => {
const stub = buildSiteSettingsStub();
const { getPayload } = await import("payload");
(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 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";
type PayloadSiteSettings = {
@@ -12,7 +12,7 @@ type PayloadSiteSettings = {
};
@injectable()
export class PayloadSiteSettingsRepository implements ISiteSettingsRepository {
export class SiteSettingsRepository implements ISiteSettingsRepository {
private config: SanitizedConfig;
constructor(config: SanitizedConfig) {

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
import { it, expect, beforeEach } from "vitest";
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";
/**

View File

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

View File

@@ -1,7 +1,7 @@
import type { Header } from "../../entities/models/header";
import { navigationContainer } from "../../di/container";
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> {
const repo = navigationContainer.get<IHeaderRepository>(

View File

@@ -1,7 +1,7 @@
import type { SanitizedConfig } from "payload";
import { navigationContainer } from "./container";
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 {
if (navigationContainer.isBound(NAVIGATION_SYMBOLS.IHeaderRepository)) {
@@ -9,5 +9,5 @@ export function bindProductionNavigation(config: SanitizedConfig): void {
}
navigationContainer
.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 { NAVIGATION_SYMBOLS } from "./symbols";
import { NavigationModule } from "./module";
import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository";
import type { IHeaderRepository } from "@/application/repositories/header-repository.interface";
import { MockHeaderRepository } from "@/infrastructure/repositories/header.repository.mock";
import type { IHeaderRepository } from "@/application/repositories/header.repository.interface";
describe("navigationContainer", () => {
beforeEach(() => {

View File

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

View File

@@ -1,5 +1,5 @@
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";
describe("MockHeaderRepository", () => {

View File

@@ -1,7 +1,7 @@
import "reflect-metadata";
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";
const DEFAULT_ITEMS: HeaderItem[] = [

View File

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

View File

@@ -3,7 +3,7 @@ import { injectable } from "inversify";
import { getPayload } 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";
type PayloadHeaderGlobal = {
@@ -16,7 +16,7 @@ type PayloadHeaderGlobal = {
};
@injectable()
export class PayloadHeaderRepository implements IHeaderRepository {
export class HeaderRepository implements IHeaderRepository {
private config: SanitizedConfig;
constructor(config: SanitizedConfig) {

View File

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