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

@@ -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", () => {