Set deployer LRN as the primary key for Deployer table

This commit is contained in:
IshaVenikar 2024-10-23 14:22:05 +05:30
parent 56c7ab166c
commit 3aee4ac6f8
8 changed files with 60 additions and 89 deletions

View File

@ -590,14 +590,6 @@ export class Database {
return newDomain; return newDomain;
} }
async getDeployerById (deployerId: string): Promise<Deployer | null> {
const deployerRepository = this.dataSource.getRepository(Deployer);
const deployer = await deployerRepository.findOne({ where: { deployerId } });
return deployer;
}
async getDeployers(): Promise<Deployer[]> { async getDeployers(): Promise<Deployer[]> {
const deployerRepository = this.dataSource.getRepository(Deployer); const deployerRepository = this.dataSource.getRepository(Deployer);
const deployers = await deployerRepository.find(); const deployers = await deployerRepository.find();

View File

@ -4,10 +4,10 @@ import { Project } from './Project';
@Entity() @Entity()
export class Deployer { export class Deployer {
@PrimaryColumn('varchar') @PrimaryColumn('varchar')
deployerId!: string; deployerLrn!: string;
@Column('varchar') @Column('varchar')
deployerLrn!: string; deployerId!: string;
@Column('varchar') @Column('varchar')
deployerApiUrl!: string; deployerApiUrl!: string;

View File

@ -129,7 +129,7 @@ export class Deployment {
applicationDeploymentRemovalRecordData!: AppDeploymentRemovalRecordAttributes | null; applicationDeploymentRemovalRecordData!: AppDeploymentRemovalRecordAttributes | null;
@ManyToOne(() => Deployer) @ManyToOne(() => Deployer)
@JoinColumn({ name: 'deployerId' }) @JoinColumn({ name: 'deployerLrn' })
deployer!: Deployer; deployer!: Deployer;
@Column({ @Column({

View File

@ -134,8 +134,8 @@ type EnvironmentVariable {
} }
type Deployer { type Deployer {
deployerId: String!
deployerLrn: String! deployerLrn: String!
deployerId: String!
deployerApiUrl: String! deployerApiUrl: String!
createdAt: String! createdAt: String!
updatedAt: String! updatedAt: String!

View File

@ -21,6 +21,7 @@ import {
AppDeploymentRecord, AppDeploymentRecord,
AppDeploymentRemovalRecord, AppDeploymentRemovalRecord,
AuctionParams, AuctionParams,
DeployerRecord,
EnvironmentVariables, EnvironmentVariables,
GitPushEventPayload, GitPushEventPayload,
} from './types'; } from './types';
@ -309,35 +310,13 @@ export class Service {
if (!deployerRecords) { if (!deployerRecords) {
log(`No winning deployer for auction ${project!.auctionId}`); log(`No winning deployer for auction ${project!.auctionId}`);
} else { } else {
const deployerIds = []; const deployers = await this.saveDeployersByDeployerRecords(deployerRecords);
for (const deployer of deployers) {
for (const record of deployerRecords) { log(`Creating deployment for deployer ${deployer.deployerLrn}`);
const deployerId = record.id; await this.createDeploymentFromAuction(project, deployer);
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);
// Update project with deployer // Update project with deployer
await this.updateProjectWithDeployer(project.id, 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; 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 { repo, repoUrl } = await getRepoDetails(octokit, data.project.repository, data.commitHash);
const environmentVariablesObj = await this.getEnvVariables(data.project!.id!); const environmentVariablesObj = await this.getEnvVariables(data.project!.id!);
@ -687,7 +666,7 @@ export class Service {
async createDeploymentFromAuction( async createDeploymentFromAuction(
project: DeepPartial<Project>, project: DeepPartial<Project>,
deployerId: string deployer: Deployer
): Promise<Deployment> { ): Promise<Deployment> {
const octokit = await this.getOctokit(project.ownerId!); const octokit = await this.getOctokit(project.ownerId!);
const [owner, repo] = project.repository!.split('/'); const [owner, repo] = project.repository!.split('/');
@ -713,7 +692,6 @@ export class Service {
const applicationRecordId = record.id; const applicationRecordId = record.id;
const applicationRecordData = record.attributes; const applicationRecordData = record.attributes;
const deployer = await this.db.getDeployerById(deployerId);
const deployerLrn = deployer!.deployerLrn const deployerLrn = deployer!.deployerLrn
// Create deployment with prod branch and latest commit // Create deployment with prod branch and latest commit
@ -726,7 +704,7 @@ export class Service {
commitMessage: latestCommit.commit.message, 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!); const environmentVariablesObj = await this.getEnvVariables(project!.id!);
// To set project DNS // To set project DNS
@ -767,7 +745,7 @@ export class Service {
async createDeploymentFromData( async createDeploymentFromData(
userId: string, userId: string,
data: DeepPartial<Deployment>, data: DeepPartial<Deployment>,
deployerId: string, deployerLrn: string,
applicationRecordId: string, applicationRecordId: string,
applicationRecordData: ApplicationRecord, applicationRecordData: ApplicationRecord,
): Promise<Deployment> { ): Promise<Deployment> {
@ -785,7 +763,7 @@ export class Service {
id: userId, id: userId,
}), }),
deployer: Object.assign(new Deployer(), { deployer: Object.assign(new Deployer(), {
deployerId, deployerLrn,
}), }),
}); });
@ -802,20 +780,9 @@ export class Service {
return null; return null;
} }
const deployerId = records[0].id; const deployer = await this.saveDeployersByDeployerRecords(records);
const deployerApiUrl = records[0].attributes.apiUrl;
const baseDomain = deployerApiUrl.substring(deployerApiUrl.indexOf('.') + 1);
const deployerData = { return deployer[0];
deployerId,
deployerLrn,
deployerApiUrl,
baseDomain
};
const deployer = await this.db.addDeployer(deployerData);
return deployer;
} }
async updateProjectWithDeployer( async updateProjectWithDeployer(
@ -1089,7 +1056,7 @@ export class Service {
let newDeployment: Deployment; let newDeployment: Deployment;
if (oldDeployment.project.auctionId) { if (oldDeployment.project.auctionId) {
newDeployment = await this.createDeploymentFromAuction(oldDeployment.project, oldDeployment.deployer.deployerId); newDeployment = await this.createDeploymentFromAuction(oldDeployment.project, oldDeployment.deployer);
} else { } else {
newDeployment = await this.createDeployment(user.id, octokit, newDeployment = await this.createDeployment(user.id, octokit,
{ {
@ -1374,33 +1341,45 @@ export class Service {
const dbDeployers = await this.db.getDeployers(); const dbDeployers = await this.db.getDeployers();
if (dbDeployers.length > 0) { if (dbDeployers.length > 0) {
// Call asynchronously to fetch the records from the registry and update the DB
this.updateDeployersFromRegistry(); this.updateDeployersFromRegistry();
return dbDeployers; return dbDeployers;
} else { } else {
// Fetch from the registry and populate empty DB
return await this.updateDeployersFromRegistry(); return await this.updateDeployersFromRegistry();
} }
} }
async updateDeployersFromRegistry(): Promise<Deployer[]> { async updateDeployersFromRegistry(): Promise<Deployer[]> {
const deployerRecords = await this.laconicRegistry.getDeployerRecordsByFilter({}); const deployerRecords = await this.laconicRegistry.getDeployerRecordsByFilter({});
await this.saveDeployersByDeployerRecords(deployerRecords);
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);
}
return await this.db.getDeployers(); return await this.db.getDeployers();
} }
async saveDeployersByDeployerRecords(deployerRecords: DeployerRecord[]): Promise<Deployer[]> {
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;
}
} }

View File

@ -51,7 +51,7 @@ const Configure = () => {
const client = useGQLClient(); const client = useGQLClient();
const methods = useForm<ConfigureFormValues>({ const methods = useForm<ConfigureFormValues>({
defaultValues: { option: 'LRN' }, defaultValues: { option: 'Auction' },
}); });
const selectedOption = methods.watch('option'); const selectedOption = methods.watch('option');
@ -244,7 +244,7 @@ const Configure = () => {
> >
{deployers.map((deployer) => ( {deployers.map((deployer) => (
<MenuItem key={deployer.deployerId} value={deployer.deployerLrn}> <MenuItem key={deployer.deployerLrn} value={deployer.deployerLrn}>
{deployer.deployerLrn} {deployer.deployerLrn}
</MenuItem> </MenuItem>
))} ))}

View File

@ -25,9 +25,9 @@ query ($projectId: String!) {
prodBranch prodBranch
auctionId auctionId
deployers { deployers {
deployerApiUrl
deployerId
deployerLrn deployerLrn
deployerId
deployerApiUrl
} }
fundsReleased fundsReleased
framework framework
@ -81,9 +81,9 @@ query ($organizationSlug: String!) {
framework framework
auctionId auctionId
deployers { deployers {
deployerApiUrl
deployerId
deployerLrn deployerLrn
deployerId
deployerApiUrl
} }
fundsReleased fundsReleased
prodBranch prodBranch
@ -145,9 +145,9 @@ query ($projectId: String!) {
commitMessage commitMessage
url url
deployer { deployer {
deployerLrn
deployerId deployerId
deployerLrn, deployerApiUrl
deployerApiUrl,
} }
environment environment
isCurrent isCurrent
@ -208,9 +208,9 @@ query ($searchText: String!) {
framework framework
auctionId auctionId
deployers { deployers {
deployerApiUrl
deployerId
deployerLrn deployerLrn
deployerId
deployerApiUrl
} }
fundsReleased fundsReleased
prodBranch prodBranch
@ -311,9 +311,9 @@ query ($auctionId: String!) {
export const getDeployers = gql` export const getDeployers = gql`
query { query {
deployers { deployers {
deployerApiUrl
deployerId
deployerLrn deployerLrn
deployerId
deployerApiUrl
} }
} }
`; `;

View File

@ -117,9 +117,9 @@ export type Deployment = {
}; };
export type Deployer = { export type Deployer = {
deployerApiUrl: string;
deployerId: string;
deployerLrn: string; deployerLrn: string;
deployerId: string;
deployerApiUrl: string;
} }
export type OrganizationMember = { export type OrganizationMember = {