diff --git a/db-management/migrations/20260312103000-tdei-default-referral-code.js b/db-management/migrations/20260312103000-tdei-default-referral-code.js new file mode 100644 index 0000000..bb60a47 --- /dev/null +++ b/db-management/migrations/20260312103000-tdei-default-referral-code.js @@ -0,0 +1,49 @@ +'use strict'; + +var dbm; +var type; +var seed; +var fs = require('fs'); +var path = require('path'); +var Promise; + +exports.setup = function(options, seedLink) { + dbm = options.dbmigrate; + type = dbm.dataType; + seed = seedLink; + Promise = options.Promise; +}; + +exports.up = function(db) { + var filePath = path.join(__dirname, 'sqls', '20260312103000-tdei-default-referral-code-up.sql'); + return new Promise(function(resolve, reject) { + fs.readFile(filePath, { encoding: 'utf-8' }, function(err, data) { + if (err) return reject(err); + console.log('received data: ' + data); + + resolve(data); + }); + }) + .then(function(data) { + return db.runSql(data); + }); +}; + +exports.down = function(db) { + var filePath = path.join(__dirname, 'sqls', '20260312103000-tdei-default-referral-code-down.sql'); + return new Promise(function(resolve, reject) { + fs.readFile(filePath, { encoding: 'utf-8' }, function(err, data) { + if (err) return reject(err); + console.log('received data: ' + data); + + resolve(data); + }); + }) + .then(function(data) { + return db.runSql(data); + }); +}; + +exports._meta = { + 'version': 1 +}; diff --git a/db-management/migrations/sqls/20260312103000-tdei-default-referral-code-down.sql b/db-management/migrations/sqls/20260312103000-tdei-default-referral-code-down.sql new file mode 100644 index 0000000..5e204b5 --- /dev/null +++ b/db-management/migrations/sqls/20260312103000-tdei-default-referral-code-down.sql @@ -0,0 +1,5 @@ +DELETE FROM public.promo_referrals pr +USING public.project_group pg +WHERE pr.project_group_id = pg.project_group_id + AND pg.name = 'TDEI Default' + AND UPPER(pr.code) = UPPER('TD-R89-PILT-CA'); diff --git a/db-management/migrations/sqls/20260312103000-tdei-default-referral-code-up.sql b/db-management/migrations/sqls/20260312103000-tdei-default-referral-code-up.sql new file mode 100644 index 0000000..2fa90cb --- /dev/null +++ b/db-management/migrations/sqls/20260312103000-tdei-default-referral-code-up.sql @@ -0,0 +1,35 @@ +WITH default_pg AS ( + SELECT project_group_id + FROM public.project_group + WHERE name = 'TDEI Default' + LIMIT 1 +), +system_usr AS ( + SELECT id::uuid AS user_id + FROM keycloak.user_entity + WHERE email = 'admin@tdei.com' + LIMIT 1 +), +fallback_user AS ( + SELECT COALESCE((SELECT user_id FROM system_usr), gen_random_uuid()) AS user_id +) +INSERT INTO public.promo_referrals + (name, type, valid_from, code, valid_to, instructions_url, project_group_id, user_id, description, is_active, redirect_url) +SELECT + 'TDEI System Default Referral', + 1, + NOW(), + 'TD-R89-PILT-CA', + NULL, + NULL, + default_pg.project_group_id, + fallback_user.user_id, + 'Default referral code for TDEI default project group', + true, + NULL +FROM default_pg, fallback_user +WHERE NOT EXISTS ( + SELECT 1 + FROM public.promo_referrals + WHERE UPPER(code) = UPPER('TD-R89-PILT-CA') +); diff --git a/src/service/user-management-service.ts b/src/service/user-management-service.ts index 20b0960..c9f6e48 100644 --- a/src/service/user-management-service.ts +++ b/src/service/user-management-service.ts @@ -184,7 +184,8 @@ export class UserManagementService implements IUserManagement { let queryStr = format(`INSERT INTO user_roles (user_id, project_group_id, role_id) SELECT %L, project_group_id, role_id FROM roles, project_group - WHERE roles.name = %L AND project_group.name = %L`, userProfile.id, Role.TDEI_MEMBER, DEFAULT_PROJECT_GROUP); + WHERE roles.name = %L AND project_group.name = %L + ON CONFLICT ON CONSTRAINT unq_user_role_project_group DO NOTHING`, userProfile.id, Role.TDEI_MEMBER, DEFAULT_PROJECT_GROUP); await dbClient.query(queryStr); // }