@overture-stack/lyric
Version:
Data Submission system
93 lines (92 loc) • 4.18 kB
TypeScript
import type { ExtractTablesWithRelations } from 'drizzle-orm';
import type { PgTransaction } from 'drizzle-orm/pg-core';
import type { PostgresJsQueryResultHKT } from 'drizzle-orm/postgres-js';
import { NewSubmission, Submission } from '@overture-stack/lyric-data-model/models';
import { BaseDependencies } from '../config/config.js';
import { type PaginationOptions, SubmissionSummaryRepository } from '../utils/types.js';
declare const repository: (dependencies: BaseDependencies) => {
/**
* Save a new Active Submission in Database
* @param data An Active Submission object to be saved
* @returns The created Active Submission
*/
save: (data: NewSubmission) => Promise<Submission>;
/**
* Finds the current Active Submission by parameters
* @param {Object} params
* @param {number} params.categoryId Category ID
* @param {string} params.username Name of the user
* @param {string} params.organization Organization name
* @returns
*/
getActiveSubmission: ({ categoryId, username, organization, }: {
categoryId: number;
username: string;
organization: string;
}) => Promise<Submission | undefined>;
/**
* Finds a Submission by ID
* @param {number} submissionId Submission ID
* @returns The Submission found
*/
getSubmissionById: (submissionId: number) => Promise<Submission | undefined>;
/**
* Update a Submission record in database
* @param {number} submissionId Submission ID to update
* @param {Partial<Submission>} newData Set fields to update
* @param tx The transaction to use for the operation, optional
* @returns An updated record
*/
update: (submissionId: number, newData: Partial<Submission>, tx?: PgTransaction<PostgresJsQueryResultHKT, Submission, ExtractTablesWithRelations<Submission>>) => Promise<Submission>;
/**
* Get Submissions by category
* @param {number} categoryId - Category ID
* @param {Object} paginationOptions - Pagination properties
* @param {number} paginationOptions.page - Page number
* @param {number} paginationOptions.pageSize - Items per page
* @param {Object} filterOptions
* @param {boolean} filterOptions.onlyActive - Filter by Active status
* @param {string} filterOptions.username - Filter by creator's username
* @param {string} filterOptions.organization - Filter by Organization
* @returns One or many Active Submissions
*/
getSubmissionsWithRelationsByCategory: (categoryId: number, paginationOptions: PaginationOptions, filterOptions: {
onlyActive: boolean;
username?: string;
organization?: string;
}) => Promise<SubmissionSummaryRepository[] | undefined>;
/**
* Count Submissions by category ID
* @param {number} categoryId - Category ID
* @param {Object} filterOptions
* @param {boolean} filterOptions.onlyActive - Filter by Active status
* @param {string} filterOptions.username - Filter by creator's username
* @param {string} filterOptions.organization - Filter by Organization
* @returns One or many Active Submissions
*/
getTotalSubmissionsByCategory: (categoryId: number, filterOptions: {
onlyActive: boolean;
username?: string;
organization?: string;
}) => Promise<number>;
/**
* Get Active Submission by Organization
* @param {Object} filterParams
* @param {number} filterParams.categoryId Category ID
* @param {string} filterParams.username User Name
* @param {string} filterParams.organization Organization name
* @returns One Active Submission
*/
getActiveSubmissionWithRelationsByOrganization: ({ categoryId, username, organization, }: {
categoryId: number;
username: string;
organization: string;
}) => Promise<SubmissionSummaryRepository | undefined>;
/**
* Get Submission by ID
* @param {number} submissionId Submission ID
* @returns A Submission
*/
getSubmissionWithRelationsById: (submissionId: number) => Promise<SubmissionSummaryRepository | undefined>;
};
export default repository;