@overture-stack/lyric
Version:
Data Submission system
381 lines (380 loc) • 25.2 kB
TypeScript
import { type DbConfig } from '@overture-stack/lyric-data-model';
import type { FeaturesConfig, IdServiceConfig, LoggerConfig, SchemaServiceConfig, SubmissionServiceConfig, ValidatorConfig } from '../../../src/config/config.js';
export type LyricProviderConfig = {
db: DbConfig;
schemaService: SchemaServiceConfig;
features?: FeaturesConfig;
idService?: IdServiceConfig;
logger?: LoggerConfig;
submissionService?: SubmissionServiceConfig;
validator?: ValidatorConfig;
};
export type LyricProvider = Awaited<ReturnType<typeof createLyricProvider>>;
export declare function createLyricProvider(config: LyricProviderConfig): Promise<{
disconnect: () => Promise<void>;
configs: import("../../../src/config/config.js").BaseDependencies;
routers: {
audit: import("express").Router;
category: import("express").Router;
dictionary: import("express").Router;
submission: import("express").Router;
submittedData: import("express").Router;
validator: import("express").Router;
};
controllers: {
audit: {
byCategoryIdAndOrganization: import("express-serve-static-core").RequestHandler<{
organization: string;
categoryId: string;
}, unknown, object, import("../../../src/utils/schemas.js").PaginationQueryParams & import("../../../src/utils/schemas.js").AuditQueryParams, Record<string, any>>;
};
category: {
getDetails: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, object, import("qs").ParsedQs, Record<string, any>>;
listAll: (req: import("express").Request, res: import("express").Response, next: import("express").NextFunction) => Promise<import("express").Response<any, Record<string, any>> | undefined>;
};
dictionary: {
registerDictionary: import("express-serve-static-core").RequestHandler<import("express-serve-static-core").ParamsDictionary, unknown, import("../../../src/utils/schemas.js").DictionaryRegisterBodyParams, import("qs").ParsedQs, Record<string, any>>;
downloadDataFileTemplates: import("express-serve-static-core").RequestHandler<{
categoryId: string;
}, unknown, unknown, {
fileType?: "csv" | "tsv" | undefined;
}, Record<string, any>>;
getDictionaryJson: (req: import("express").Request, res: import("express").Response, next: import("express").NextFunction) => Promise<import("express").Response<any, Record<string, any>> | undefined>;
};
submission: {
commit: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").submissionCommitPathParams, unknown, object, import("qs").ParsedQs, Record<string, any>>;
delete: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").submissionIdPathParam, unknown, object, import("../../../src/utils/schemas.js").SubmissionDeleteQueryParams, Record<string, any>>;
deleteEntityName: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").SubmissionDeleteEntityNameParams, unknown, object, import("../../../src/utils/schemas.js").SubmissionDeleteEntityNameQueryParams, Record<string, any>>;
deleteSubmittedDataBySystemId: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").DataDeleteBySystemIdPathParams, unknown, object, import("qs").ParsedQs, Record<string, any>>;
editSubmittedData: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, Record<string, unknown>[], {
entityName: string;
organization: string;
}, Record<string, any>>;
getSubmissionsByCategory: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, object, import("../../../src/utils/schemas.js").SubmissionsByCategoryQueryParams, Record<string, any>>;
getSubmissionById: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").submissionIdPathParam, unknown, object, import("qs").ParsedQs, Record<string, any>>;
getSubmissionDetailsById: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").submissionIdPathParam, unknown, object, import("../../../src/utils/schemas.js").SubmissionsDetailsQueryParams, Record<string, any>>;
getActiveByOrganization: import("express-serve-static-core").RequestHandler<{
organization: string;
categoryId: string;
}, unknown, object, import("qs").ParsedQs, Record<string, any>>;
submit: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, import("@overture-stack/lectern-client").DataRecord[], {
entityName: string;
organization: string;
}, Record<string, any>>;
submitFiles: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, {
filename: string;
entity: string;
}[] | undefined, {
organization: string;
}, Record<string, any>>;
};
submittedData: {
getSubmittedDataByCategory: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, object, import("../../../src/utils/schemas.js").DataQueryParams, Record<string, any>>;
getSubmittedDataByOrganization: import("express-serve-static-core").RequestHandler<{
organization: string;
categoryId: string;
}, unknown, object, import("../../../src/utils/schemas.js").DataQueryParams, Record<string, any>>;
getSubmittedDataByQuery: import("express-serve-static-core").RequestHandler<{
organization: string;
categoryId: string;
}, unknown, object, import("../../../src/utils/schemas.js").DataQueryParams, Record<string, any>>;
getSubmittedDataBySystemId: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").DataGetBySystemIdPathParams, unknown, object, import("../../../src/utils/schemas.js").GetDataQueryParams, Record<string, any>>;
getSubmittedDataByCategoryStream: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, object, import("../../../src/utils/schemas.js").DataQueryParams, Record<string, any>>;
};
validator: {
existsRecord: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").ValidationPathParams, unknown, object, import("../../../src/utils/schemas.js").ValidationQueryParam, Record<string, any>>;
};
};
services: {
audit: {
byCategoryIdAndOrganization: (categoryId: number, organization: string, filterOptions: import("../../../index.js").AuditFilterOptions) => Promise<{
data: import("../../../index.js").AuditDataResponse[];
metadata: {
totalRecords: number;
errorMessage?: string;
};
}>;
};
category: {
getDetails: (categoryId: number) => Promise<import("../../../index.js").CategoryDetailsResponse | undefined>;
listAll: () => Promise<import("../../../index.js").ListAllCategoriesResponse[]>;
};
dictionary: {
createDictionaryIfDoesNotExist: (dictionaryName: string, version: string, schemas: import("@overture-stack/lectern-client").Schema[], username?: string) => Promise<import("@overture-stack/lyric-data-model/models").Dictionary>;
fetchDictionaryByVersion: (dictionaryName: string, version: string) => Promise<import("@overture-stack/lectern-client").Dictionary>;
getActiveDictionaryByCategory: (categoryId: number) => Promise<import("@overture-stack/lyric-data-model/models").Dictionary | undefined>;
register: ({ categoryName, dictionaryName, dictionaryVersion, defaultCentricEntity, username, }: {
categoryName: string;
dictionaryName: string;
dictionaryVersion: string;
defaultCentricEntity?: string;
username?: string;
}) => Promise<{
dictionary: import("@overture-stack/lyric-data-model/models").Dictionary;
category: import("@overture-stack/lyric-data-model/models").Category;
}>;
};
submission: {
commitSubmission: (categoryId: number, submissionId: number, username: string) => Promise<import("../../../index.js").CommitSubmissionResult>;
deleteActiveSubmissionById: (submissionId: number, username: string, force: boolean) => Promise<import("../../../index.js").DeleteSubmissionResult>;
deleteActiveSubmissionEntity: (submissionId: number, username: string, filter: {
actionType: import("../../../index.js").SubmissionActionType;
entityName: string;
index: number | null;
}) => Promise<import("../../../index.js").SubmitDataResult>;
getSubmissionsByCategory: (categoryId: number, paginationOptions: import("../../../index.js").PaginationOptions, filterOptions: {
onlyActive: boolean;
username?: string;
organization?: string;
}) => Promise<{
result: import("../../../index.js").SubmissionSummary[];
metadata: {
totalRecords: number;
errorMessage?: string;
};
}>;
getSubmissionById: (submissionId: number) => Promise<import("../../../index.js").SubmissionSummary | undefined>;
getSubmissionDetailsById: ({ submissionId, paginationOptions, filterOptions, }: {
submissionId: number;
paginationOptions: import("../../../index.js").PaginationOptions;
filterOptions: {
entityNames: string[];
actionTypes: import("../../../index.js").SubmissionActionType[];
};
}) => Promise<{
data: import("../../../src/utils/submissionResponseParser.js").FlattenedSubmissionData[];
errors?: import("@overture-stack/lyric-data-model/models").SubmissionRecordErrorDetails[];
}>;
getActiveSubmissionByOrganization: ({ categoryId, username, organization, }: {
categoryId: number;
username: string;
organization: string;
}) => Promise<import("../../../index.js").SubmissionSummary | undefined>;
getOrCreateActiveSubmission: (params: {
username: string;
categoryId: number;
organization: string;
}) => Promise<number>;
submit: ({ data, categoryId, organization, username, }: {
data: import("../../../index.js").EntityData;
categoryId: number;
organization: string;
username: string;
}) => Promise<import("../../../index.js").SubmitDataResult | {
status: "UNKNOWN_CATEGORY";
description: string;
}>;
submitFiles: ({ files, categoryId, organization, username, fileEntityMap, }: {
files: Express.Multer.File[];
categoryId: number;
organization: string;
username: string;
fileEntityMap?: import("../../../src/utils/schemas.js").FilenameEntityPair[];
}) => Promise<import("../../../index.js").SubmitFileResult | {
status: "UNKNOWN_CATEGORY";
description: string;
}>;
};
submittedData: {
deleteSubmittedDataBySystemId: (categoryId: number, systemId: string, username: string) => Promise<{
description: string;
inProcessEntities: string[];
status: import("../../../index.js").ActiveSubmissionStatus;
submissionId?: string;
}>;
editSubmittedData: ({ categoryId, entityName, organization, records, username, }: {
categoryId: number;
entityName: string;
organization: string;
records: Record<string, unknown>[];
username: string;
}) => Promise<{
description?: string;
submissionId?: number;
status: string;
}>;
getSubmittedDataByCategory: (categoryId: number, paginationOptions: import("../../../index.js").PaginationOptions, filterOptions: {
entityName?: string[];
view: import("../../../index.js").ViewType;
organizations?: string[];
}) => Promise<{
result: import("../../../index.js").SubmittedDataResponse[];
metadata: {
totalRecords: number;
errorMessage?: string;
};
}>;
getSubmittedDataByOrganization: (categoryId: number, organization: string, paginationOptions: import("../../../index.js").PaginationOptions, filterOptions: {
sqon?: import("@overture-stack/sqon-builder").SQON;
entityName?: string[];
view: import("../../../index.js").ViewType;
}) => Promise<{
result: import("../../../index.js").SubmittedDataResponse[];
metadata: {
totalRecords: number;
errorMessage?: string;
};
}>;
getSubmittedDataBySystemId: (categoryId: number, systemId: string, filterOptions: {
view: import("../../../index.js").ViewType;
}) => Promise<{
result: import("../../../index.js").SubmittedDataResponse | undefined;
metadata: {
errorMessage?: string;
};
}>;
getSubmittedDataByCategoryStream: (categoryId: number, filterOptions: {
entityName?: string[];
view: import("../../../index.js").ViewType;
organizations?: string[];
}) => AsyncGenerator<import("../../../index.js").SubmittedDataResponse, {
result: [];
metadata: {
totalRecords: number;
errorMessage?: string;
};
} | undefined, unknown>;
};
validation: {
existsRecord: ({ categoryId, entityName, field, organization, value, }: {
categoryId: number;
entityName: string;
field: string;
organization: string;
value: string;
}) => Promise<boolean>;
};
};
repositories: {
audit: {
getRecordsByCategoryIdAndOrganizationPaginated: (categoryId: number, organization: string, filterOptions: import("../../../index.js").AuditFilterOptions) => Promise<import("../../../index.js").AuditRepositoryRecord[]>;
getTotalRecordsByCategoryIdAndOrganization: (categoryId: number, organization: string, filterOptions: import("../../../index.js").AuditFilterOptions) => Promise<number>;
};
category: {
save: (data: import("@overture-stack/lyric-data-model/models").NewCategory) => Promise<import("@overture-stack/lyric-data-model/models").Category>;
categoryIdExists: (categoryId: number) => Promise<boolean>;
getAllCategoryNames: () => Promise<import("../../../index.js").ListAllCategoriesResponse[]>;
getCategoryById: (id: number) => Promise<(import("@overture-stack/lyric-data-model/models").Category & {
activeDictionary: import("@overture-stack/lyric-data-model/models").Dictionary | null;
}) | undefined>;
getCategoryByName: (name: string) => Promise<import("@overture-stack/lyric-data-model/models").Category | undefined>;
getActiveDictionaryByCategory: (categoryId: number) => Promise<(import("@overture-stack/lectern-client").Dictionary & {
id: number;
}) | undefined>;
update: (categoryId: number, newData: Partial<import("@overture-stack/lyric-data-model/models").Category>) => Promise<import("@overture-stack/lyric-data-model/models").Category>;
};
dictionary: {
save: (data: import("@overture-stack/lyric-data-model/models").NewDictionary) => Promise<import("@overture-stack/lyric-data-model/models").Dictionary>;
getDictionary: (dictionaryName: string, version: string) => Promise<import("@overture-stack/lyric-data-model/models").Dictionary | undefined>;
getDictionaryById: (dictionaryId: number) => Promise<import("@overture-stack/lyric-data-model/models").Dictionary | undefined>;
};
submission: {
save: (data: import("@overture-stack/lyric-data-model/models").NewSubmission) => Promise<number>;
getActiveSubmissionDetails: ({ categoryId, organization, username, }: {
categoryId: number;
username: string;
organization: string;
}) => Promise<Pick<import("@overture-stack/lyric-data-model/models").Submission, "data" | "id"> | undefined>;
getActiveSubmissionSummary: ({ categoryId, username, organization, }: {
categoryId: number;
username: string;
organization: string;
}) => Promise<import("../../../index.js").SubmissionDataSummaryRepositoryRecord | undefined>;
getSubmissionById: (submissionId: number) => Promise<import("../../../index.js").SubmissionDataSummaryRepositoryRecord | undefined>;
getSubmissionDetailsById: (submissionId: number) => Promise<import("../../../index.js").SubmissionDataDetailsRepositoryRecord | undefined>;
update: (submissionId: number, newData: Partial<import("@overture-stack/lyric-data-model/models").Submission>, tx?: import("drizzle-orm/pg-core").PgTransaction<import("drizzle-orm/postgres-js").PostgresJsQueryResultHKT, import("@overture-stack/lyric-data-model/models").Submission, import("drizzle-orm").ExtractTablesWithRelations<import("@overture-stack/lyric-data-model/models").Submission>>) => Promise<number>;
getSubmissionsByCategory: (categoryId: number, paginationOptions: import("../../../index.js").PaginationOptions, filterOptions: {
onlyActive: boolean;
username?: string;
organization?: string;
}) => Promise<import("../../../index.js").SubmissionDataSummaryRepositoryRecord[] | undefined>;
getTotalSubmissionsByCategory: (categoryId: number, filterOptions: {
onlyActive: boolean;
username?: string;
organization?: string;
}) => Promise<number>;
};
submittedData: {
deleteBySystemId: (params: {
diff: import("@overture-stack/lyric-data-model/models").DataDiff;
submissionId: number;
systemId: string;
username: string;
} | {
diff: import("@overture-stack/lyric-data-model/models").DataDiff;
submissionId: number;
systemId: string;
username: string;
}[], tx?: import("drizzle-orm/pg-core").PgTransaction<import("drizzle-orm/postgres-js").PostgresJsQueryResultHKT, import("@overture-stack/lyric-data-model/models").SubmittedData, import("drizzle-orm").ExtractTablesWithRelations<import("@overture-stack/lyric-data-model/models").SubmittedData>>) => Promise<{
id: number;
createdAt: Date | null;
createdBy: string | null;
updatedAt: Date | null;
updatedBy: string | null;
data: import("@overture-stack/lectern-client").DataRecord;
dictionaryCategoryId: number;
entityName: string;
isValid: boolean;
lastValidSchemaId: number | null;
organization: string;
originalSchemaId: number;
systemId: string;
}[]>;
save: (data: import("@overture-stack/lyric-data-model/models").NewSubmittedData | import("@overture-stack/lyric-data-model/models").NewSubmittedData[], tx?: import("drizzle-orm/pg-core").PgTransaction<import("drizzle-orm/postgres-js").PostgresJsQueryResultHKT, import("@overture-stack/lyric-data-model/models").SubmittedData, import("drizzle-orm").ExtractTablesWithRelations<import("@overture-stack/lyric-data-model/models").SubmittedData>>) => Promise<{
id: number;
} | {
id: number;
}[]>;
getAllOrganizationsByCategoryId: (categoryId: number) => Promise<string[]>;
getSubmittedDataByCategoryIdAndOrganization: (categoryId: number, organization: string) => Promise<import("@overture-stack/lyric-data-model/models").SubmittedData[]>;
getSubmittedDataByCategoryIdPaginated: (categoryId: number, paginationOptions: import("../../../index.js").PaginationOptions, filter?: {
entityNames?: string[];
organizations?: string[];
}) => Promise<import("../../../index.js").SubmittedDataResponse[]>;
getSubmittedDataByCategoryIdAndOrganizationPaginated: (categoryId: number, organization: string, paginationOptions: import("../../../index.js").PaginationOptions, filter?: {
sql?: import("drizzle-orm").SQL;
entityNames?: string[];
}) => Promise<import("../../../index.js").SubmittedDataResponse[]>;
getTotalRecordsByCategoryIdAndOrganization: (categoryId: number, organization: string, filter?: {
sql?: import("drizzle-orm").SQL;
entityNames?: string[];
}) => Promise<number>;
getTotalRecordsByCategoryId: (categoryId: number, filter?: {
sql?: import("drizzle-orm").SQL;
entityNames?: string[];
organizations?: string[];
}) => Promise<number>;
update: (params: {
submittedDataId: number;
dataDiff: import("@overture-stack/lyric-data-model/models").DataDiff;
newData: Partial<import("@overture-stack/lyric-data-model/models").SubmittedData>;
oldIsValid: boolean;
submissionId: number;
} | {
submittedDataId: number;
dataDiff: import("@overture-stack/lyric-data-model/models").DataDiff;
newData: Partial<import("@overture-stack/lyric-data-model/models").SubmittedData>;
oldIsValid: boolean;
submissionId: number;
}[], tx?: import("drizzle-orm/pg-core").PgTransaction<import("drizzle-orm/postgres-js").PostgresJsQueryResultHKT, import("@overture-stack/lyric-data-model/models").SubmittedData, import("drizzle-orm").ExtractTablesWithRelations<import("@overture-stack/lyric-data-model/models").SubmittedData>>) => Promise<import("@overture-stack/lyric-data-model/models").SubmittedData | import("@overture-stack/lyric-data-model/models").SubmittedData[]>;
getSubmittedDataBySystemId: (systemId: string) => Promise<import("@overture-stack/lyric-data-model/models").SubmittedData | undefined>;
getSubmittedDataFiltered: (organization: string, filterData: {
entityName: string;
dataField: string;
dataValue: string | undefined;
}[]) => Promise<import("@overture-stack/lyric-data-model/models").SubmittedData[]>;
};
};
utils: {
audit: typeof import("../../../src/utils/auditUtils.js");
convertSqonToQuery: typeof import("../../../src/utils/convertSqonToQuery.js");
dictionarySchemaRelations: typeof import("../../../src/utils/dictionarySchemaRelations.js");
dictionary: typeof import("../../../src/utils/dictionaryUtils.js");
errors: typeof import("../../../src/utils/errors.js");
schema: typeof import("../../../src/utils/schemas.js");
submission: typeof import("../../../src/utils/submissionUtils.js");
submittedData: typeof import("../../../src/utils/submittedDataUtils.js");
type: typeof import("../../../src/utils/types.js");
};
shutdown: () => Promise<void>;
}>;