Skip to content

Commit a6be389

Browse files
Add date field
1 parent 3083ee2 commit a6be389

4 files changed

Lines changed: 40 additions & 18 deletions

File tree

packages/server/api/src/app/database/seeds/openops-opportunities-table-campaign-id-seed.ts renamed to packages/server/api/src/app/database/seeds/openops-opportunities-table-new-fields-seed.ts

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,23 @@ import { SEED_OPENOPS_TABLE_NAME } from '../../openops-tables/template-tables/cr
1111
import { databaseConnection } from '../database-connection';
1212
import { applyToEachTablesDatabase } from './tables-database-iterator';
1313

14-
const OPPORTUNITIES_CAMPAIGN_ID_SEED = 'OPP_CAMPAIGN_ID_SEED';
14+
const OPPORTUNITIES_NEW_FIELDS_SEED = 'OPP_NEW_FIELDS_SEED';
1515

1616
const alreadyApplied = async (): Promise<boolean> => {
1717
const flagRepo = databaseConnection().getRepository(FlagEntity);
18-
const flag = await flagRepo.findOneBy({ id: OPPORTUNITIES_CAMPAIGN_ID_SEED });
18+
const flag = await flagRepo.findOneBy({ id: OPPORTUNITIES_NEW_FIELDS_SEED });
1919
return flag?.value === true;
2020
};
2121

2222
const setFlag = async (): Promise<void> => {
2323
const flagRepo = databaseConnection().getRepository(FlagEntity);
24-
await flagRepo.save({ id: OPPORTUNITIES_CAMPAIGN_ID_SEED, value: true });
24+
await flagRepo.save({ id: OPPORTUNITIES_NEW_FIELDS_SEED, value: true });
2525
};
2626

27-
export const seedOpportunitiesCampaignIdField = async (): Promise<void> => {
27+
export const seedOpportunitiesNewFields = async (): Promise<void> => {
2828
if (await alreadyApplied()) {
29-
logger.info('Skip: Opportunities Campaign ID field already seeded', {
30-
name: 'seedOpportunitiesCampaignIdField',
29+
logger.info('Skip: Opportunities new fields already seeded', {
30+
name: 'seedOpportunitiesNewFields',
3131
});
3232
return;
3333
}
@@ -44,11 +44,20 @@ export const seedOpportunitiesCampaignIdField = async (): Promise<void> => {
4444
}
4545

4646
const tokenOrResolver = await resolveTokenProvider(tablesContext);
47-
await makeOpenOpsTablesPost(
48-
`api/database/fields/table/${table.id}/`,
49-
{ name: 'Campaign ID', type: 'text' },
50-
createAxiosHeaders(tokenOrResolver),
51-
);
47+
const createField = (field: object) =>
48+
makeOpenOpsTablesPost(
49+
`api/database/fields/table/${table.id}/`,
50+
field,
51+
createAxiosHeaders(tokenOrResolver),
52+
);
53+
54+
await createField({ name: 'Campaign ID', type: 'text' });
55+
await createField({
56+
name: 'Last status change at',
57+
type: 'date',
58+
date_format: 'ISO',
59+
date_include_time: true,
60+
});
5261
},
5362
);
5463

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

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,6 @@ 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-
137132
await addField(tokenOrResolver, table.id, {
138133
name: 'Creation time',
139134
type: 'created_on',
@@ -148,6 +143,18 @@ export async function createOpportunitiesTable(
148143
date_include_time: true,
149144
});
150145

146+
await addField(tokenOrResolver, table.id, {
147+
name: 'Campaign ID',
148+
type: 'text',
149+
});
150+
151+
await addField(tokenOrResolver, table.id, {
152+
name: 'Last status change at',
153+
type: 'date',
154+
date_format: 'ISO',
155+
date_include_time: true,
156+
});
157+
151158
logger.debug(`[Seeding ${SEED_OPENOPS_TABLE_NAME} table] Done`);
152159
}
153160

packages/server/api/src/main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +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';
19+
import { seedOpportunitiesNewFields } from './app/database/seeds/openops-opportunities-table-new-fields-seed';
2020
import { seedOpportunitesTemplateTable } from './app/database/seeds/openops-opportunities-table-seed';
2121
import { seedTimeseriesTemplateTable } from './app/database/seeds/openops-timeseries-table-seed';
2222
import { upsertAdminUser } from './app/database/seeds/seed-admin';
@@ -98,7 +98,7 @@ const main = async (): Promise<void> => {
9898

9999
await seedTemplateTables();
100100
await seedOpportunitesTemplateTable();
101-
await seedOpportunitiesCampaignIdField();
101+
await seedOpportunitiesNewFields();
102102
await seedFocusDataAggregationTemplateTable();
103103
await seedKnownCostTypesByApplicationTable();
104104
await seedAutoInstancesShutdownTable();

packages/server/api/test/unit/openops-tables/create-opportunities-table.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,12 @@ describe('createOpportunityTable', () => {
129129
name: 'Campaign ID',
130130
type: 'text',
131131
},
132+
{
133+
name: 'Last status change at',
134+
type: 'date',
135+
date_format: 'ISO',
136+
date_include_time: true,
137+
},
132138
];
133139

134140
expect(openopsCommonMock.makeOpenOpsTablesPost).toHaveBeenCalledTimes(

0 commit comments

Comments
 (0)