Skip to content

Commit

Permalink
feat(api): add campaign_feature table with externalid feature
Browse files Browse the repository at this point in the history
  • Loading branch information
lionelB committed Oct 7, 2024
1 parent 1ea921b commit 625f332
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 2 deletions.
22 changes: 22 additions & 0 deletions api/db/database-builder/factory/build-campaign-feature.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { databaseBuffer } from '../database-buffer.js';

const buildCampaignFeature = function buildCampaignFeature({
id = databaseBuffer.getNextId(),
campaignId,
featureId,
params,
} = {}) {
const values = {
id,
campaignId,
featureId,
params,
};

return databaseBuffer.pushInsertable({
tableName: 'campaign-features',
values,
});
};

export { buildCampaignFeature };
22 changes: 22 additions & 0 deletions api/db/migrations/20241001073207_add-campaign-features.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { CAMPAIGN_FEATURES } from '../../src/shared/domain/constants.js';

const TABLE_NAME = 'campaign-features';

const up = async function (knex) {
await knex.schema.createTable(TABLE_NAME, function (table) {
table.increments('id').primary();
table.integer('featureId').unsigned();
table.foreign('featureId').references('id').inTable('features');
table.integer('campaignId').unsigned();
table.foreign('campaignId').references('id').inTable('campaigns');
table.jsonb('params').defaultTo(null);
});
return knex('features').insert(CAMPAIGN_FEATURES.EXTERNAL_ID);
};

const down = async function (knex) {
await knex.schema.dropTable(TABLE_NAME);
return knex('features').where({ key: CAMPAIGN_FEATURES.EXTERNAL_ID.key }).delete();
};

export { down, up };
2 changes: 2 additions & 0 deletions api/db/seeds/data/common/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ const FEATURE_PLACES_MANAGEMENT_ID = COMMON_OFFSET_ID + 3;
const FEATURE_MISSIONS_MANAGEMENT_ID = COMMON_OFFSET_ID + 4;
const FEATURE_LEARNER_IMPORT_ID = COMMON_OFFSET_ID + 5;
const FEATURE_CAN_REGISTER_FOR_A_COMPLEMENTARY_CERTIFICATION_ALONE_ID = COMMON_OFFSET_ID + 6;
const FEATURE_CAMPAIGN_EXTERNAL_ID = COMMON_OFFSET_ID + 7;

//ORGANIZATIONS
const SCO_MANAGING_ORGANIZATION_ID = COMMON_OFFSET_ID;
Expand Down Expand Up @@ -78,6 +79,7 @@ export {
CFA_TAG,
COLLEGE_TAG,
DEFAULT_PASSWORD,
FEATURE_CAMPAIGN_EXTERNAL_ID,
FEATURE_CAN_REGISTER_FOR_A_COMPLEMENTARY_CERTIFICATION_ALONE_ID,
FEATURE_COMPUTE_ORGANIZATION_LEARNER_CERTIFICABILITY_ID,
FEATURE_LEARNER_IMPORT_ID,
Expand Down
8 changes: 7 additions & 1 deletion api/db/seeds/data/common/feature-builder.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { CERTIFICATION_FEATURES } from '../../../../src/certification/shared/domain/constants.js';
import { ORGANIZATION_FEATURE } from '../../../../src/shared/domain/constants.js';
import { CAMPAIGN_FEATURES, ORGANIZATION_FEATURE } from '../../../../src/shared/domain/constants.js';
import {
FEATURE_CAMPAIGN_EXTERNAL_ID,
FEATURE_CAN_REGISTER_FOR_A_COMPLEMENTARY_CERTIFICATION_ALONE_ID,
FEATURE_COMPUTE_ORGANIZATION_LEARNER_CERTIFICABILITY_ID,
FEATURE_LEARNER_IMPORT_ID,
Expand Down Expand Up @@ -40,6 +41,11 @@ const featuresBuilder = async function ({ databaseBuilder }) {
key: CERTIFICATION_FEATURES.CAN_REGISTER_FOR_A_COMPLEMENTARY_CERTIFICATION_ALONE.key,
description: CERTIFICATION_FEATURES.CAN_REGISTER_FOR_A_COMPLEMENTARY_CERTIFICATION_ALONE.description,
});
databaseBuilder.factory.buildFeature({
id: FEATURE_CAMPAIGN_EXTERNAL_ID,
key: CAMPAIGN_FEATURES.EXTERNAL_ID.key,
description: CAMPAIGN_FEATURES.EXTERNAL_ID.description,
});
await databaseBuilder.commit();
};

Expand Down
7 changes: 6 additions & 1 deletion api/src/prescription/shared/domain/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,9 @@ const CampaignTypes = {
PROFILES_COLLECTION: 'PROFILES_COLLECTION',
};

export { CampaignParticipationStatuses, CampaignTypes };
const ExternalIdTypes = {
STRING: 'STRING',
EMAIL: 'EMAIL',
};

export { CampaignParticipationStatuses, CampaignTypes, ExternalIdTypes };
8 changes: 8 additions & 0 deletions api/src/shared/domain/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@ const ORGANIZATION_FEATURE = {
},
};

const CAMPAIGN_FEATURES = {
EXTERNAL_ID: {
key: 'EXTERNAL_ID',
description: "Permet d'activer la saisie d'un identifiant externe lors de la participation à une campagne",
},
};

const VALIDATION_ERRORS = {
FIELD_DATE_FORMAT: 'FIELD_DATE_FORMAT',
FIELD_BAD_VALUES: 'FIELD_BAD_VALUES',
Expand Down Expand Up @@ -160,6 +167,7 @@ const constants = {

export {
ALL_TREATMENTS,
CAMPAIGN_FEATURES,
CERTIFICATION_CENTER_TYPES,
COMPETENCES_COUNT,
constants,
Expand Down

0 comments on commit 625f332

Please sign in to comment.