| 10 | * @param {DataSource} orm - The ORM connection to use for database operations |
| 11 | */ |
| 12 | export default async function initModels(orm: DataSource) { |
| 13 | const existingProviders = await orm.createQueryBuilder().select("provider").from(Provider, "provider").getMany(); |
| 14 | |
| 15 | const existingModels = await orm.createQueryBuilder().select("model").from(Model, "model").getMany(); |
| 16 | |
| 17 | const filterdModels = models.filter( |
| 18 | model => !existingModels.find(existingModel => existingModel.name === model.name), |
| 19 | ); |
| 20 | |
| 21 | await orm |
| 22 | .createQueryBuilder() |
| 23 | .insert() |
| 24 | .into(Model) |
| 25 | .values( |
| 26 | filterdModels.map(model => ({ |
| 27 | name: model.name, |
| 28 | providerId: existingProviders.find(provider => provider.name === model.provider)?.id, |
| 29 | inputType: model.inputType, |
| 30 | order: model.order, |
| 31 | })), |
| 32 | ) |
| 33 | .execute(); |
| 34 | |
| 35 | const newModels = await orm.createQueryBuilder().select("model").from(Model, "model").getMany(); |
| 36 | |
| 37 | await orm |
| 38 | .createQueryBuilder() |
| 39 | .insert() |
| 40 | .into(ModelCost) |
| 41 | .values( |
| 42 | filterdModels.map(filterdModel => ({ |
| 43 | modelId: newModels.find(model => model.name === filterdModel.name)?.id, |
| 44 | providerId: newModels.find(model => model.name === filterdModel.name)?.providerId, |
| 45 | input: filterdModel?.inputCost, |
| 46 | output: filterdModel?.outputCost, |
| 47 | factor: filterdModel?.costFactor, |
| 48 | })), |
| 49 | ) |
| 50 | .execute(); |
| 51 | |
| 52 | existingModels.map(async existingModel => { |
| 53 | await orm |
| 54 | .createQueryBuilder() |
| 55 | .update(Model) |
| 56 | .where("id = :id", { id: existingModel.id }) |
| 57 | .set({ |
| 58 | inputType: models.find(m => m.name === existingModel.name)?.inputType, |
| 59 | order: models.find(m => m.name === existingModel.name)?.order, |
| 60 | providerId: existingProviders.find( |
| 61 | provider => provider.name === models.find(m => m.name === existingModel.name)?.provider, |
| 62 | )?.id, |
| 63 | }) |
| 64 | .execute(); |
| 65 | |
| 66 | await orm |
| 67 | .createQueryBuilder() |
| 68 | .update(ModelCost) |
| 69 | .where("modelId = :modelId", { modelId: existingModel.id }) |