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 { 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";