Quick Reference: Managing Training Provider Organizations
Adding a User to Tertiary Infotech
-- Step 1: Create user account (if not exists)INSERTINTOapp_user(id,email,password,password_hash,full_name,created_at,updated_at)VALUES(gen_random_uuid(),'user@example.com','password123','$2b$10$HASH_HERE','User Full Name',NOW(),NOW())ONCONFLICT(email)DONOTHINGRETURNINGid;-- Step 2: Grant Training Provider roleINSERTINTOuser_role_map(user_id,role)VALUES((SELECTidFROMapp_userWHEREemail='user@example.com'),'Training Provider')ONCONFLICT(user_id,role)DONOTHING;-- Step 3: Link user to Tertiary Infotech organizationINSERTINTOtraining_provider_member(provider_id,user_id)VALUES('55555555-5555-5555-8555-555555555555',-- Tertiary Infotech(SELECTidFROMapp_userWHEREemail='user@example.com'))ONCONFLICT(provider_id,user_id)DONOTHING;
Creating a New Training Provider Company
-- Step 1: Create the training provider organizationINSERTINTOtraining_provider(id,company_name,company_shortname,uen,company_address,contact_person_name,contact_tel,color_scheme,created_at,updated_at)VALUES(gen_random_uuid(),'New Company Pte Ltd','NewCo','202300001K','123 Business Street, Singapore 123456','John Doe','91234567','#1E40AF',-- Blue color schemeNOW(),NOW())RETURNINGid;-- Step 2: Create admin user for this companyINSERTINTOapp_user(id,email,password,password_hash,full_name,created_at,updated_at)VALUES(gen_random_uuid(),'admin@newcompany.com','password123','$2b$10$HASH_HERE','John Doe',NOW(),NOW())RETURNINGid;-- Step 3: Grant Training Provider roleINSERTINTOuser_role_map(user_id,role)VALUES((SELECTidFROMapp_userWHEREemail='admin@newcompany.com'),'Training Provider');-- Step 4: Link user to the new organizationINSERTINTOtraining_provider_member(provider_id,user_id)VALUES((SELECTidFROMtraining_providerWHEREuen='202300001K'),(SELECTidFROMapp_userWHEREemail='admin@newcompany.com'));
Checking User’s Organization
-- Find which organization a user belongs toSELECTau.email,au.full_name,tp.company_name,tp.company_shortname,tp.uenFROMapp_userauINNERJOINtraining_provider_membertpmONau.id=tpm.user_idINNERJOINtraining_providertpONtpm.provider_id=tp.idWHEREau.email='user@example.com';
Listing All Users in an Organization
-- List all users in Tertiary InfotechSELECTau.email,au.full_name,tpm.created_atasjoined_atFROMtraining_provider_membertpmINNERJOINapp_userauONtpm.user_id=au.idWHEREtpm.provider_id='55555555-5555-5555-8555-555555555555'ORDERBYtpm.created_at;
Moving a User to Different Organization
-- Remove from old organization and add to new oneBEGIN;-- Remove from old organizationDELETEFROMtraining_provider_memberWHEREuser_id=(SELECTidFROMapp_userWHEREemail='user@example.com');-- Add to new organizationINSERTINTOtraining_provider_member(provider_id,user_id)VALUES('NEW_PROVIDER_ID_HERE',(SELECTidFROMapp_userWHEREemail='user@example.com'));COMMIT;
Removing a User from Organization
-- Remove user's organization membership (but keep their account)DELETEFROMtraining_provider_memberWHEREuser_id=(SELECTidFROMapp_userWHEREemail='user@example.com');-- Optionally remove their Training Provider roleDELETEFROMuser_role_mapWHEREuser_id=(SELECTidFROMapp_userWHEREemail='user@example.com')ANDrole='Training Provider';