-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSeedRepository.ts
More file actions
3 lines (3 loc) · 1.9 KB
/
Copy pathSeedRepository.ts
File metadata and controls
3 lines (3 loc) · 1.9 KB
1
2
3
import fs from "node:fs";import path from "node:path";import YAML from "yaml";import {dataSchemas} from "../schemas";import type {OpportunityBundle,OpportunityRepository} from "./OpportunityRepository";
function load<K extends keyof typeof dataSchemas>(name:K){const raw=YAML.parse(fs.readFileSync(path.join(process.cwd(),"data",`${name}.yaml`),"utf8"));return dataSchemas[name].parse(raw) as never}
export class SeedRepository implements OpportunityRepository{async list(){return(load("opportunities") as ReturnType<typeof dataSchemas.opportunities.parse>).opportunities}async getBySlug(slug:string):Promise<OpportunityBundle|null>{const opportunity=(await this.list()).find(item=>item.slug===slug);if(!opportunity)return null;const documents=(load("documents") as ReturnType<typeof dataSchemas.documents.parse>).documents.filter(item=>item.opportunity_id===opportunity.id);const facts=(load("facts") as ReturnType<typeof dataSchemas.facts.parse>).facts.filter(item=>item.opportunity_id===opportunity.id);const issues=(load("issues") as ReturnType<typeof dataSchemas.issues.parse>).issues.filter(item=>item.opportunity_id===opportunity.id);const events=(load("events") as ReturnType<typeof dataSchemas.events.parse>).events.filter(item=>item.opportunity_id===opportunity.id);const contacts=(load("contacts") as ReturnType<typeof dataSchemas.contacts.parse>).contacts.filter(item=>item.opportunity_id===opportunity.id);const scoreFile=load("scores") as ReturnType<typeof dataSchemas.scores.parse>;const chatResponses=(load("chat_responses") as ReturnType<typeof dataSchemas.chat_responses.parse>).chat_responses;const outputs=(load("generated_outputs") as ReturnType<typeof dataSchemas.generated_outputs.parse>).generated_outputs.filter(item=>item.opportunity_id===opportunity.id);return{opportunity,documents,facts,issues,events,contacts,scores:scoreFile.opportunities[opportunity.id]??{},weights:scoreFile.weights,chatResponses,outputs}}}