Skip to main content
Glama

News Aggregator API

index.ts3.46 kB
/** * Repository factory for accessing repositories */ import { PrismaClient } from '@prisma/client'; import { prisma } from '../utils/db'; import { logger } from '../utils/logger'; // Import repository classes import { ArticleRepository } from './article.repository'; import { UserRepository } from './user.repository'; import { TopicRepository } from './topic.repository'; import { EntityRepository } from './entity.repository'; import { UserArticleRepository } from './user-article.repository'; import { SavedSearchRepository } from './saved-search.repository'; /** * Repository factory for creating and accessing repositories */ export class RepositoryFactory { private static instance: RepositoryFactory; private repositories: Map<string, any> = new Map(); private constructor() { // Initialize repositories this.repositories.set('article', new ArticleRepository()); this.repositories.set('user', new UserRepository()); this.repositories.set('topic', new TopicRepository()); this.repositories.set('entity', new EntityRepository()); this.repositories.set('userArticle', new UserArticleRepository()); this.repositories.set('savedSearch', new SavedSearchRepository()); } /** * Get singleton instance of repository factory * @returns Repository factory instance */ public static getInstance(): RepositoryFactory { if (!RepositoryFactory.instance) { RepositoryFactory.instance = new RepositoryFactory(); } return RepositoryFactory.instance; } /** * Get article repository * @returns Article repository */ public getArticleRepository(): ArticleRepository { return this.repositories.get('article'); } /** * Get user repository * @returns User repository */ public getUserRepository(): UserRepository { return this.repositories.get('user'); } /** * Get topic repository * @returns Topic repository */ public getTopicRepository(): TopicRepository { return this.repositories.get('topic'); } /** * Get entity repository * @returns Entity repository */ public getEntityRepository(): EntityRepository { return this.repositories.get('entity'); } /** * Get user article repository * @returns User article repository */ public getUserArticleRepository(): UserArticleRepository { return this.repositories.get('userArticle'); } /** * Get saved search repository * @returns Saved search repository */ public getSavedSearchRepository(): SavedSearchRepository { return this.repositories.get('savedSearch'); } /** * Execute a function within a transaction * @param callback Function to execute within transaction * @returns Result of callback function */ public async transaction<T>(callback: (tx: PrismaClient) => Promise<T>): Promise<T> { try { return await prisma.$transaction(async (tx: any) => { return await callback(tx as PrismaClient); }); } catch (error) { logger.error('Transaction error:', error); throw error; } } } // Export singleton instance export const repositoryFactory = RepositoryFactory.getInstance(); // Export repository types export * from './base.repository'; export * from './article.repository'; export * from './user.repository'; export * from './topic.repository'; export * from './entity.repository'; export * from './user-article.repository'; export * from './saved-search.repository';

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Malachi-devel/the-news-api-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server