import "reflect-metadata"; import { injectable } from "inversify"; import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; import type { Article } from "../../entities/article"; @injectable() export class MockArticlesRepository implements IArticlesRepository { private _articles: Article[] = []; async getArticle(id: string): Promise
{ return this._articles.find((a) => a.id === id); } async getArticleBySlug(slug: string): Promise
{ return this._articles.find((a) => a.slug === slug); } async getArticles(options?: { status?: string; authorId?: string; limit?: number; offset?: number; }): Promise { let result = [...this._articles]; if (options?.status) { result = result.filter((a) => a.status === options.status); } if (options?.authorId) { result = result.filter((a) => a.authorId === options.authorId); } const offset = options?.offset ?? 0; const limit = options?.limit ?? 50; return result.slice(offset, offset + limit); } async createArticle(input: Article): Promise
{ this._articles.push(input); return input; } async updateArticle( id: string, input: Partial
, ): Promise
{ const index = this._articles.findIndex((a) => a.id === id); if (index === -1) return undefined; const current = this._articles[index]; if (!current) return undefined; const updated: Article = { ...current, ...input, id: current.id }; this._articles[index] = updated; return updated; } }