feat(core-cms): compose @repo/blog/cms into payload config

This commit is contained in:
2026-05-04 22:29:50 +02:00
parent 1d59698ebe
commit a92341fb74
9 changed files with 93 additions and 24 deletions

View File

@@ -5,11 +5,9 @@ vi.mock("payload", () => ({
getPayload: vi.fn(),
}));
vi.mock("@repo/core-cms", () => ({
default: {} as never,
}));
describe("PayloadArticlesRepository", () => {
const mockConfig = {} as never;
it("maps a Payload doc to a domain Article on getArticleBySlug", async () => {
const { getPayload } = await import("payload");
const findMock = vi.fn().mockResolvedValue({
@@ -30,7 +28,7 @@ describe("PayloadArticlesRepository", () => {
find: findMock,
});
const repo = new PayloadArticlesRepository();
const repo = new PayloadArticlesRepository(mockConfig);
const result = await repo.getArticleBySlug("hello");
expect(findMock).toHaveBeenCalledWith({
@@ -52,7 +50,7 @@ describe("PayloadArticlesRepository", () => {
find: vi.fn().mockResolvedValue({ docs: [] }),
});
const repo = new PayloadArticlesRepository();
const repo = new PayloadArticlesRepository(mockConfig);
const result = await repo.getArticleBySlug("missing");
expect(result).toBeUndefined();
});

View File

@@ -1,8 +1,8 @@
import "reflect-metadata";
import { injectable } from "inversify";
import { getPayload } from "payload";
import type { SanitizedConfig } from "payload";
import config from "@repo/core-cms";
import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface";
import type { Article } from "@/entities/article";
@@ -38,8 +38,14 @@ function mapDoc(doc: PayloadArticleDoc): Article {
@injectable()
export class PayloadArticlesRepository implements IArticlesRepository {
private config: SanitizedConfig;
constructor(config: SanitizedConfig) {
this.config = config;
}
async getArticle(id: string): Promise<Article | undefined> {
const payload = await getPayload({ config });
const payload = await getPayload({ config: this.config });
try {
const doc = await payload.findByID({
collection: "articles",
@@ -53,7 +59,7 @@ export class PayloadArticlesRepository implements IArticlesRepository {
}
async getArticleBySlug(slug: string): Promise<Article | undefined> {
const payload = await getPayload({ config });
const payload = await getPayload({ config: this.config });
const result = await payload.find({
collection: "articles",
where: { slug: { equals: slug } },
@@ -70,7 +76,7 @@ export class PayloadArticlesRepository implements IArticlesRepository {
limit?: number;
offset?: number;
}): Promise<Article[]> {
const payload = await getPayload({ config });
const payload = await getPayload({ config: this.config });
const where: Record<string, { equals: string }> = {};
if (options?.status) where.status = { equals: options.status };
if (options?.authorId) where.author = { equals: options.authorId };
@@ -88,7 +94,7 @@ export class PayloadArticlesRepository implements IArticlesRepository {
}
async createArticle(input: Article): Promise<Article> {
const payload = await getPayload({ config });
const payload = await getPayload({ config: this.config });
const created = await payload.create({
collection: "articles",
data: {
@@ -107,7 +113,7 @@ export class PayloadArticlesRepository implements IArticlesRepository {
id: string,
input: Partial<Article>,
): Promise<Article | undefined> {
const payload = await getPayload({ config });
const payload = await getPayload({ config: this.config });
try {
const updated = await payload.update({
collection: "articles",