Skip to main content
Glama
analysis-run.repository.ts4.39 kB
/** * @fileoverview AnalysisRun repository interface * * This module defines the repository interface for the AnalysisRun aggregate. */ import { IRepository, PaginationOptions, PaginatedResult, } from '../../shared/repository.interface.js'; import { AnalysisRun } from './analysis-run.aggregate.js'; import { RunId, ProjectKey, BranchName, CommitOid } from '../../../types/branded.js'; import { RunStatus } from './analysis-run.types.js'; /** * Repository interface for AnalysisRun aggregates * * Provides methods for persisting and retrieving AnalysisRun aggregates. * * @example * ```typescript * class InMemoryAnalysisRunRepository implements IAnalysisRunRepository { * private runs = new Map<RunId, AnalysisRun>(); * * async findByRunId(id: RunId): Promise<AnalysisRun | null> { * return this.runs.get(id) || null; * } * * async findByProject( * projectKey: ProjectKey, * options: PaginationOptions * ): Promise<PaginatedResult<AnalysisRun>> { * const projectRuns = Array.from(this.runs.values()) * .filter(run => run.projectKey === projectKey); * * // Apply pagination * const start = (options.page - 1) * options.pageSize; * const items = projectRuns.slice(start, start + options.pageSize); * * return { * items, * page: options.page, * pageSize: options.pageSize, * totalCount: projectRuns.length, * totalPages: Math.ceil(projectRuns.length / options.pageSize), * hasNextPage: start + options.pageSize < projectRuns.length, * hasPreviousPage: options.page > 1 * }; * } * * async save(run: AnalysisRun): Promise<void> { * this.runs.set(run.runId, run); * } * } * ``` */ export interface IAnalysisRunRepository extends IRepository<AnalysisRun, RunId> { /** * Finds a run by its unique ID * * @param id - The run ID * @returns The run if found, null otherwise */ findByRunId(_id: RunId): Promise<AnalysisRun | null>; /** * Finds runs for a specific project with pagination * * @param projectKey - The project key * @param options - Pagination options * @returns Paginated analysis runs */ findByProject( _projectKey: ProjectKey, _options: PaginationOptions ): Promise<PaginatedResult<AnalysisRun>>; /** * Finds the most recent run for a project * * @param projectKey - The project key * @param branch - Optional branch filter * @returns The most recent run if found, null otherwise */ findMostRecent(_projectKey: ProjectKey, _branch?: BranchName): Promise<AnalysisRun | null>; /** * Finds a run by commit OID * * @param projectKey - The project key * @param commitOid - The commit OID * @returns The run if found, null otherwise */ findByCommit(_projectKey: ProjectKey, _commitOid: CommitOid): Promise<AnalysisRun | null>; /** * Finds runs by status * * @param projectKey - The project key * @param status - The run status * @param options - Pagination options * @returns Paginated analysis runs */ findByStatus( _projectKey: ProjectKey, _status: RunStatus, _options: PaginationOptions ): Promise<PaginatedResult<AnalysisRun>>; /** * Finds runs within a date range * * @param projectKey - The project key * @param startDate - Start date (inclusive) * @param endDate - End date (inclusive) * @param options - Pagination options * @returns Paginated analysis runs */ findByDateRange( _projectKey: ProjectKey, _startDate: Date, _endDate: Date, _options: PaginationOptions ): Promise<PaginatedResult<AnalysisRun>>; /** * Counts runs for a project * * @param projectKey - The project key * @returns The total number of runs */ countByProject(_projectKey: ProjectKey): Promise<number>; /** * Counts runs by status for a project * * @param projectKey - The project key * @param status - The run status * @returns The number of runs with the given status */ countByStatus(_projectKey: ProjectKey, _status: RunStatus): Promise<number>; /** * Checks if a run exists for a commit * * @param projectKey - The project key * @param commitOid - The commit OID * @returns True if a run exists, false otherwise */ existsForCommit(_projectKey: ProjectKey, _commitOid: CommitOid): Promise<boolean>; }

Latest Blog Posts

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/sapientpants/deepsource-mcp-server'

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