Skip to content

Commit 5ddd49e

Browse files
Add campaignId column to opportunities table
1 parent 31a13c0 commit 5ddd49e

3 files changed

Lines changed: 65 additions & 0 deletions

File tree

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import {
2+
createAxiosHeaders,
3+
getTableByName,
4+
makeOpenOpsTablesPost,
5+
resolveTokenProvider,
6+
TablesServerContext,
7+
} from '@openops/common';
8+
import { logger } from '@openops/server-shared';
9+
import { FlagEntity } from '../../flags/flag.entity';
10+
import { SEED_OPENOPS_TABLE_NAME } from '../../openops-tables/template-tables/create-opportunities-table';
11+
import { databaseConnection } from '../database-connection';
12+
import { applyToEachTablesDatabase } from './tables-database-iterator';
13+
14+
const OPPORTUNITIES_CAMPAIGN_ID_SEED = 'OPP_CAMPAIGN_ID_SEED';
15+
16+
const alreadyApplied = async (): Promise<boolean> => {
17+
const flagRepo = databaseConnection().getRepository(FlagEntity);
18+
const flag = await flagRepo.findOneBy({ id: OPPORTUNITIES_CAMPAIGN_ID_SEED });
19+
return flag?.value === true;
20+
};
21+
22+
const setFlag = async (): Promise<void> => {
23+
const flagRepo = databaseConnection().getRepository(FlagEntity);
24+
await flagRepo.save({ id: OPPORTUNITIES_CAMPAIGN_ID_SEED, value: true });
25+
};
26+
27+
export const seedOpportunitiesCampaignIdField = async (): Promise<void> => {
28+
await setFlag();
29+
return;
30+
if (await alreadyApplied()) {
31+
logger.info('Skip: Opportunities Campaign ID field already seeded', {
32+
name: 'seedOpportunitiesCampaignIdField',
33+
});
34+
return;
35+
}
36+
37+
await applyToEachTablesDatabase(
38+
async (tablesContext: TablesServerContext): Promise<void> => {
39+
const table = await getTableByName(
40+
SEED_OPENOPS_TABLE_NAME,
41+
tablesContext,
42+
);
43+
44+
if (!table) {
45+
return;
46+
}
47+
48+
const tokenOrResolver = await resolveTokenProvider(tablesContext);
49+
await makeOpenOpsTablesPost(
50+
`api/database/fields/table/${table.id}/`,
51+
{ name: 'Campaign ID', type: 'text' },
52+
createAxiosHeaders(tokenOrResolver),
53+
);
54+
},
55+
);
56+
57+
await setFlag();
58+
};

packages/server/api/src/app/openops-tables/template-tables/create-opportunities-table.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ export async function createOpportunitiesTable(
129129
type: 'long_text',
130130
});
131131

132+
await addField(tokenOrResolver, table.id, {
133+
name: 'Campaign ID',
134+
type: 'text',
135+
});
136+
132137
await addField(tokenOrResolver, table.id, {
133138
name: 'Creation time',
134139
type: 'created_on',

packages/server/api/src/main.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { ensureTablesMcpEndpointExists } from './app/database/seeds/ensure-table
1616
import { seedFocusDataAggregationTemplateTable } from './app/database/seeds/openops-aggregated-costs-seed';
1717
import * as analytics from './app/database/seeds/openops-analytics-seed';
1818
import { seedKnownCostTypesByApplicationTable } from './app/database/seeds/openops-known-cost-types-by-application-seed';
19+
import { seedOpportunitiesCampaignIdField } from './app/database/seeds/openops-opportunities-table-campaign-id-seed';
1920
import { seedOpportunitesTemplateTable } from './app/database/seeds/openops-opportunities-table-seed';
2021
import { seedTimeseriesTemplateTable } from './app/database/seeds/openops-timeseries-table-seed';
2122
import { upsertAdminUser } from './app/database/seeds/seed-admin';
@@ -97,6 +98,7 @@ const main = async (): Promise<void> => {
9798

9899
await seedTemplateTables();
99100
await seedOpportunitesTemplateTable();
101+
await seedOpportunitiesCampaignIdField();
100102
await seedFocusDataAggregationTemplateTable();
101103
await seedKnownCostTypesByApplicationTable();
102104
await seedAutoInstancesShutdownTable();

0 commit comments

Comments
 (0)