diff --git a/packages/backend/src/database.ts b/packages/backend/src/database.ts index 518bab6c..41a73b9d 100644 --- a/packages/backend/src/database.ts +++ b/packages/backend/src/database.ts @@ -590,14 +590,6 @@ export class Database { return newDomain; } - async getDeployerById (deployerId: string): Promise { - const deployerRepository = this.dataSource.getRepository(Deployer); - - const deployer = await deployerRepository.findOne({ where: { deployerId } }); - - return deployer; - } - async getDeployers(): Promise { const deployerRepository = this.dataSource.getRepository(Deployer); const deployers = await deployerRepository.find(); diff --git a/packages/backend/src/entity/Deployer.ts b/packages/backend/src/entity/Deployer.ts index bdb920e3..854ab1dd 100644 --- a/packages/backend/src/entity/Deployer.ts +++ b/packages/backend/src/entity/Deployer.ts @@ -4,10 +4,10 @@ import { Project } from './Project'; @Entity() export class Deployer { @PrimaryColumn('varchar') - deployerId!: string; + deployerLrn!: string; @Column('varchar') - deployerLrn!: string; + deployerId!: string; @Column('varchar') deployerApiUrl!: string; diff --git a/packages/backend/src/entity/Deployment.ts b/packages/backend/src/entity/Deployment.ts index 21bfb4e4..5efb28b4 100644 --- a/packages/backend/src/entity/Deployment.ts +++ b/packages/backend/src/entity/Deployment.ts @@ -129,7 +129,7 @@ export class Deployment { applicationDeploymentRemovalRecordData!: AppDeploymentRemovalRecordAttributes | null; @ManyToOne(() => Deployer) - @JoinColumn({ name: 'deployerId' }) + @JoinColumn({ name: 'deployerLrn' }) deployer!: Deployer; @Column({ diff --git a/packages/backend/src/schema.gql b/packages/backend/src/schema.gql index 5accd5a3..5cead09e 100644 --- a/packages/backend/src/schema.gql +++ b/packages/backend/src/schema.gql @@ -134,8 +134,8 @@ type EnvironmentVariable { } type Deployer { - deployerId: String! deployerLrn: String! + deployerId: String! deployerApiUrl: String! createdAt: String! updatedAt: String! diff --git a/packages/backend/src/service.ts b/packages/backend/src/service.ts index 258a99e6..2ee14e0a 100644 --- a/packages/backend/src/service.ts +++ b/packages/backend/src/service.ts @@ -21,6 +21,7 @@ import { AppDeploymentRecord, AppDeploymentRemovalRecord, AuctionParams, + DeployerRecord, EnvironmentVariables, GitPushEventPayload, } from './types'; @@ -309,35 +310,13 @@ export class Service { if (!deployerRecords) { log(`No winning deployer for auction ${project!.auctionId}`); } else { - const deployerIds = []; - - for (const record of deployerRecords) { - const deployerId = record.id; - const deployerLrn = record.names[0]; - - deployerIds.push(deployerId); - - const deployerApiUrl = record.attributes.apiUrl; - const baseDomain = deployerApiUrl.substring(deployerApiUrl.indexOf('.') + 1); - - const deployerData = { - deployerId, - deployerLrn, - deployerApiUrl, - baseDomain - }; - - // Store the deployer in the DB - const deployer = await this.db.addDeployer(deployerData); - + const deployers = await this.saveDeployersByDeployerRecords(deployerRecords); + for (const deployer of deployers) { + log(`Creating deployment for deployer ${deployer.deployerLrn}`); + await this.createDeploymentFromAuction(project, deployer); // Update project with deployer await this.updateProjectWithDeployer(project.id, deployer); } - - for (const deployerId of deployerIds) { - log(`Creating deployment for deployer ${deployerId}`); - await this.createDeploymentFromAuction(project, deployerId); - } } } @@ -649,7 +628,7 @@ export class Service { deployer = data.deployer; } - const newDeployment = await this.createDeploymentFromData(userId, data, deployer!.deployerId!, applicationRecordId, applicationRecordData); + const newDeployment = await this.createDeploymentFromData(userId, data, deployer!.deployerLrn!, applicationRecordId, applicationRecordData); const { repo, repoUrl } = await getRepoDetails(octokit, data.project.repository, data.commitHash); const environmentVariablesObj = await this.getEnvVariables(data.project!.id!); @@ -687,7 +666,7 @@ export class Service { async createDeploymentFromAuction( project: DeepPartial, - deployerId: string + deployer: Deployer ): Promise { const octokit = await this.getOctokit(project.ownerId!); const [owner, repo] = project.repository!.split('/'); @@ -713,7 +692,6 @@ export class Service { const applicationRecordId = record.id; const applicationRecordData = record.attributes; - const deployer = await this.db.getDeployerById(deployerId); const deployerLrn = deployer!.deployerLrn // Create deployment with prod branch and latest commit @@ -726,7 +704,7 @@ export class Service { commitMessage: latestCommit.commit.message, }; - const newDeployment = await this.createDeploymentFromData(project.ownerId!, deploymentData, deployerId, applicationRecordId, applicationRecordData); + const newDeployment = await this.createDeploymentFromData(project.ownerId!, deploymentData, deployerLrn, applicationRecordId, applicationRecordData); const environmentVariablesObj = await this.getEnvVariables(project!.id!); // To set project DNS @@ -767,7 +745,7 @@ export class Service { async createDeploymentFromData( userId: string, data: DeepPartial, - deployerId: string, + deployerLrn: string, applicationRecordId: string, applicationRecordData: ApplicationRecord, ): Promise { @@ -785,7 +763,7 @@ export class Service { id: userId, }), deployer: Object.assign(new Deployer(), { - deployerId, + deployerLrn, }), }); @@ -802,20 +780,9 @@ export class Service { return null; } - const deployerId = records[0].id; - const deployerApiUrl = records[0].attributes.apiUrl; - const baseDomain = deployerApiUrl.substring(deployerApiUrl.indexOf('.') + 1); + const deployer = await this.saveDeployersByDeployerRecords(records); - const deployerData = { - deployerId, - deployerLrn, - deployerApiUrl, - baseDomain - }; - - const deployer = await this.db.addDeployer(deployerData); - - return deployer; + return deployer[0]; } async updateProjectWithDeployer( @@ -1089,7 +1056,7 @@ export class Service { let newDeployment: Deployment; if (oldDeployment.project.auctionId) { - newDeployment = await this.createDeploymentFromAuction(oldDeployment.project, oldDeployment.deployer.deployerId); + newDeployment = await this.createDeploymentFromAuction(oldDeployment.project, oldDeployment.deployer); } else { newDeployment = await this.createDeployment(user.id, octokit, { @@ -1374,33 +1341,45 @@ export class Service { const dbDeployers = await this.db.getDeployers(); if (dbDeployers.length > 0) { + // Call asynchronously to fetch the records from the registry and update the DB this.updateDeployersFromRegistry(); return dbDeployers; } else { + // Fetch from the registry and populate empty DB return await this.updateDeployersFromRegistry(); } } async updateDeployersFromRegistry(): Promise { const deployerRecords = await this.laconicRegistry.getDeployerRecordsByFilter({}); - - for (const record of deployerRecords) { - const deployerId = record.id; - const deployerLrn = record.names[0]; - - const deployerApiUrl = record.attributes.apiUrl; - const baseDomain = deployerApiUrl.substring(deployerApiUrl.indexOf('.') + 1); - - const deployerData = { - deployerId, - deployerLrn, - deployerApiUrl, - baseDomain - }; - - await this.db.addDeployer(deployerData); - } + await this.saveDeployersByDeployerRecords(deployerRecords); return await this.db.getDeployers(); } + + async saveDeployersByDeployerRecords(deployerRecords: DeployerRecord[]): Promise { + const deployers: Deployer[] = []; + + for (const record of deployerRecords) { + if (record.names.length > 0) { + const deployerId = record.id; + const deployerLrn = record.names[0]; + const deployerApiUrl = record.attributes.apiUrl; + const baseDomain = deployerApiUrl.substring(deployerApiUrl.indexOf('.') + 1); + + const deployerData = { + deployerLrn, + deployerId, + deployerApiUrl, + baseDomain + }; + + // TODO: Update deployers table in a separate job + const deployer = await this.db.addDeployer(deployerData); + deployers.push(deployer); + } + } + + return deployers; + } } diff --git a/packages/frontend/src/components/projects/create/Configure.tsx b/packages/frontend/src/components/projects/create/Configure.tsx index cd4edb05..b57abc02 100644 --- a/packages/frontend/src/components/projects/create/Configure.tsx +++ b/packages/frontend/src/components/projects/create/Configure.tsx @@ -51,7 +51,7 @@ const Configure = () => { const client = useGQLClient(); const methods = useForm({ - defaultValues: { option: 'LRN' }, + defaultValues: { option: 'Auction' }, }); const selectedOption = methods.watch('option'); @@ -244,7 +244,7 @@ const Configure = () => { > {deployers.map((deployer) => ( - + {deployer.deployerLrn} ))} diff --git a/packages/gql-client/src/queries.ts b/packages/gql-client/src/queries.ts index 5f0f85ae..a1ac2af2 100644 --- a/packages/gql-client/src/queries.ts +++ b/packages/gql-client/src/queries.ts @@ -25,9 +25,9 @@ query ($projectId: String!) { prodBranch auctionId deployers { - deployerApiUrl - deployerId deployerLrn + deployerId + deployerApiUrl } fundsReleased framework @@ -81,9 +81,9 @@ query ($organizationSlug: String!) { framework auctionId deployers { - deployerApiUrl - deployerId deployerLrn + deployerId + deployerApiUrl } fundsReleased prodBranch @@ -145,9 +145,9 @@ query ($projectId: String!) { commitMessage url deployer { + deployerLrn deployerId - deployerLrn, - deployerApiUrl, + deployerApiUrl } environment isCurrent @@ -208,9 +208,9 @@ query ($searchText: String!) { framework auctionId deployers { - deployerApiUrl - deployerId deployerLrn + deployerId + deployerApiUrl } fundsReleased prodBranch @@ -311,9 +311,9 @@ query ($auctionId: String!) { export const getDeployers = gql` query { deployers { - deployerApiUrl - deployerId deployerLrn + deployerId + deployerApiUrl } } `; diff --git a/packages/gql-client/src/types.ts b/packages/gql-client/src/types.ts index 258aeff1..c06d9d4e 100644 --- a/packages/gql-client/src/types.ts +++ b/packages/gql-client/src/types.ts @@ -117,9 +117,9 @@ export type Deployment = { }; export type Deployer = { - deployerApiUrl: string; - deployerId: string; deployerLrn: string; + deployerId: string; + deployerApiUrl: string; } export type OrganizationMember = {