Skip to main content
Glama

MCP Task Manager Server

by bsmi021
ProjectRepository.ts2.92 kB
import { Database as Db } from 'better-sqlite3'; import { logger } from '../utils/logger.js'; // Assuming logger exists export interface ProjectData { project_id: string; name: string; created_at: string; // ISO8601 format } export class ProjectRepository { private db: Db; // Pass the database connection instance constructor(db: Db) { this.db = db; } /** * Creates a new project record in the database. * @param project - The project data to insert. * @throws {Error} If the database operation fails. */ public create(project: ProjectData): void { const sql = ` INSERT INTO projects (project_id, name, created_at) VALUES (@project_id, @name, @created_at) `; try { const stmt = this.db.prepare(sql); const info = stmt.run(project); logger.info(`[ProjectRepository] Created project ${project.project_id}, changes: ${info.changes}`); } catch (error) { logger.error(`[ProjectRepository] Failed to create project ${project.project_id}:`, error); // Re-throw the error to be handled by the service layer throw error; } } /** * Finds a project by its ID. * @param projectId - The ID of the project to find. * @returns The project data if found, otherwise undefined. */ public findById(projectId: string): ProjectData | undefined { const sql = `SELECT project_id, name, created_at FROM projects WHERE project_id = ?`; try { const stmt = this.db.prepare(sql); const project = stmt.get(projectId) as ProjectData | undefined; return project; } catch (error) { logger.error(`[ProjectRepository] Failed to find project ${projectId}:`, error); throw error; // Re-throw } } /** * Deletes a project by its ID. * Relies on ON DELETE CASCADE in the schema to remove associated tasks/dependencies. * @param projectId - The ID of the project to delete. * @returns The number of projects deleted (0 or 1). * @throws {Error} If the database operation fails. */ public deleteProject(projectId: string): number { const sql = `DELETE FROM projects WHERE project_id = ?`; try { const stmt = this.db.prepare(sql); const info = stmt.run(projectId); logger.info(`[ProjectRepository] Attempted to delete project ${projectId}. Rows affected: ${info.changes}`); // Cascade delete handles tasks/dependencies in the background via schema definition. return info.changes; } catch (error) { logger.error(`[ProjectRepository] Failed to delete project ${projectId}:`, error); throw error; // Re-throw } } // Add other methods as needed (e.g., update, list) }

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/bsmi021/mcp-task-manager-server'

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