Skip to main content
Glama

News Aggregator API

saved-search.repository.ts3.39 kB
/** * SavedSearch repository implementation */ import { SavedSearch, SavedSearchCreateInput } from '../models/prisma.types'; import { prisma } from '../utils/db'; import { IRepository } from './base.repository'; import { logger } from '../utils/logger'; /** * Repository for saved search data access */ export class SavedSearchRepository implements IRepository<SavedSearch, number> { /** * Find saved search by ID * @param id SavedSearch ID * @returns SavedSearch or null if not found */ async findById(id: number): Promise<SavedSearch | null> { try { return await prisma.savedSearch.findUnique({ where: { id } }); } catch (error) { logger.error('Error finding saved search by ID:', error); throw error; } } /** * Find all saved searches * @returns Array of saved searches */ async findAll(): Promise<SavedSearch[]> { try { return await prisma.savedSearch.findMany(); } catch (error) { logger.error('Error finding all saved searches:', error); throw error; } } /** * Create a new saved search * @param data SavedSearch data * @returns Created saved search */ async create(data: Omit<SavedSearch, 'id' | 'createdAt' | 'updatedAt'>): Promise<SavedSearch> { try { // Convert data to proper input format with proper relation connections const { userId, ...rest } = data; return await prisma.savedSearch.create({ data: { ...rest, user: { connect: { id: userId } } } }); } catch (error) { logger.error('Error creating saved search:', error); throw error; } } /** * Update a saved search * @param id SavedSearch ID * @param data Updated saved search data * @returns Updated saved search */ async update(id: number, data: Partial<SavedSearch>): Promise<SavedSearch> { try { return await prisma.savedSearch.update({ where: { id }, data }); } catch (error) { logger.error('Error updating saved search:', error); throw error; } } /** * Delete a saved search * @param id SavedSearch ID * @returns True if deleted, false otherwise */ async delete(id: number): Promise<boolean> { try { await prisma.savedSearch.delete({ where: { id } }); return true; } catch (error) { logger.error('Error deleting saved search:', error); return false; } } /** * Find saved searches by user ID * @param userId User ID * @returns Array of saved searches */ async findByUserId(userId: number): Promise<SavedSearch[]> { try { return await prisma.savedSearch.findMany({ where: { userId }, orderBy: { updatedAt: 'desc' } }); } catch (error) { logger.error('Error finding saved searches by user ID:', error); throw error; } } /** * Update last run time for saved search * @param id SavedSearch ID * @returns Updated saved search */ async updateLastRunTime(id: number): Promise<SavedSearch> { try { return await prisma.savedSearch.update({ where: { id }, data: { lastRunAt: new Date() } }); } catch (error) { logger.error('Error updating saved search last run time:', error); throw error; } } }

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