Changes between Version 4 and Version 5 of UseCase0000PrototypeImplementationDB
- Timestamp:
- 08/07/26 15:48:53 (24 hours ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
UseCase0000PrototypeImplementationDB
v4 v5 9 9 == Предуслов: измени во DDL == 10 10 11 Регистрацијата е двофазна — прво се создава корисник само со мејл и лозинка, а личните податоци се пополнуваат подоцна. Во моменталната шема `name`, `work_position` и `company_size` се `NOT NULL`, што го прави тоа невозможно. Истото важи и за `account.name`.11 Регистрацијата е двофазна — прво се создава сметка само со мејл и лозинка, а личните податоци се пополнуваат подоцна. Во моменталната шема `account.name`, `"user".work_position` и `"user".company_size` се `NOT NULL`, што го прави тоа невозможно. 12 12 13 13 {{{ 14 14 ALTER TABLE account ALTER COLUMN name DROP NOT NULL; 15 ALTER TABLE "user" ALTER COLUMN name DROP NOT NULL;16 15 ALTER TABLE "user" ALTER COLUMN work_position DROP NOT NULL; 17 16 ALTER TABLE "user" ALTER COLUMN company_size DROP NOT NULL; 18 17 19 -- is_profile_complete = true значи дека сите полиња се пополнети18 -- is_profile_complete = true значи дека сите полиња на корисникот се пополнети 20 19 ALTER TABLE "user" ADD CONSTRAINT ck_user_profile_complete CHECK ( 21 20 NOT is_profile_complete 22 OR ( name IS NOT NULL ANDwork_position IS NOT NULL AND company_size IS NOT NULL)21 OR (work_position IS NOT NULL AND company_size IS NOT NULL) 23 22 ); 24 23 }}} … … 49 48 new_user AS ( 50 49 INSERT INTO "user" (account_id, 51 email,52 password_hash,53 50 login_provider, 54 51 is_verified, … … 57 54 points) 58 55 SELECT id, 59 'borjan.gjorgjievski@students.finki.ukim.mk',60 'hashed_password_example',61 56 'local', 62 57 FALSE, … … 110 105 BEGIN; 111 106 107 -- името се чува во account, заедно со мејлот и лозинката 108 UPDATE account 109 SET name = 'Borjan Gjorgjievski' 110 WHERE id = (SELECT account_id FROM "user" WHERE user_id = :user_id); 111 112 112 UPDATE "user" 113 SET name = 'Borjan Gjorgjievski', 114 work_position = 'Sales & Digital Solutions', 113 SET work_position = 'Sales & Digital Solutions', 115 114 company_size = 'freelance', 116 115 is_profile_complete = TRUE 117 116 WHERE user_id = :user_id; 118 119 -- account.name е дупликат на "user".name и мора да се одржува рачно120 UPDATE account121 SET name = 'Borjan Gjorgjievski'122 WHERE id = (SELECT account_id FROM "user" WHERE user_id = :user_id);123 117 124 118 COMMIT; … … 142 136 }}} 143 137 144 Ограничувањ ата `uq_account_email` и `uq_user_email` го спречуваатдуплирањето и на ниво на база, па апликацијата мора да ја фати грешката `23505` доколку два барања стигнат истовремено.138 Ограничувањето `uq_account_email` го спречува дуплирањето и на ниво на база, па апликацијата мора да ја фати грешката `23505` доколку два барања стигнат истовремено. 145 139 146 140 * Доколку на корисникот му истекол токенот за валидација на неговата емаил адреса, тогаш откако ќе го кликне линкот за валидација ќе му се прикаже порака дека токенот е истечен и копче за повторно испраќање на нов токен за валидација. … … 168 162 COMMIT; 169 163 }}} 170 171 == Забелешки ==172 173 - `company_size` е PostgreSQL enum со мали букви (`freelance`, `micro`, `small`, `medium`, `mid_market`, `enterprise`, `other`). Вредноста `'Freelance'` предизвикува грешка.174 - Шемата нема колона `deleted` на `"user"` — не постои soft delete.175 - `email` и `password_hash` постојат и во `account` и во `"user"`. Регистрацијата ги запишува двапати, а секоја промена на лозинка мора да ажурира две табели. Ова треба да се реши на ниво на шема.176 - При повторно испраќање на токен, `gen_random_uuid()` го генерира UUID-то автоматски — не треба да се внесува рачно.
