Changes between Version 4 and Version 5 of UseCase0000PrototypeImplementationDB


Ignore:
Timestamp:
08/07/26 15:48:53 (24 hours ago)
Author:
231175
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCase0000PrototypeImplementationDB

    v4 v5  
    99== Предуслов: измени во DDL ==
    1010
    11 Регистрацијата е двофазна — прво се создава корисник само со мејл и лозинка, а личните податоци се пополнуваат подоцна. Во моменталната шема `name`, `work_position` и `company_size` се `NOT NULL`, што го прави тоа невозможно. Истото важи и за `account.name`.
     11Регистрацијата е двофазна — прво се создава сметка само со мејл и лозинка, а личните податоци се пополнуваат подоцна. Во моменталната шема `account.name`, `"user".work_position` и `"user".company_size` се `NOT NULL`, што го прави тоа невозможно.
    1212
    1313{{{
    1414ALTER TABLE account ALTER COLUMN name          DROP NOT NULL;
    15 ALTER TABLE "user"  ALTER COLUMN name          DROP NOT NULL;
    1615ALTER TABLE "user"  ALTER COLUMN work_position DROP NOT NULL;
    1716ALTER TABLE "user"  ALTER COLUMN company_size  DROP NOT NULL;
    1817
    19 -- is_profile_complete = true значи дека сите полиња се пополнети
     18-- is_profile_complete = true значи дека сите полиња на корисникот се пополнети
    2019ALTER TABLE "user" ADD CONSTRAINT ck_user_profile_complete CHECK (
    2120    NOT is_profile_complete
    22     OR (name IS NOT NULL AND work_position IS NOT NULL AND company_size IS NOT NULL)
     21    OR (work_position IS NOT NULL AND company_size IS NOT NULL)
    2322);
    2423}}}
     
    4948new_user AS (
    5049    INSERT INTO "user" (account_id,
    51                         email,
    52                         password_hash,
    5350                        login_provider,
    5451                        is_verified,
     
    5754                        points)
    5855    SELECT id,
    59            'borjan.gjorgjievski@students.finki.ukim.mk',
    60            'hashed_password_example',
    6156           'local',
    6257           FALSE,
     
    110105BEGIN;
    111106
     107-- името се чува во account, заедно со мејлот и лозинката
     108UPDATE account
     109SET name = 'Borjan Gjorgjievski'
     110WHERE id = (SELECT account_id FROM "user" WHERE user_id = :user_id);
     111
    112112UPDATE "user"
    113 SET name                = 'Borjan Gjorgjievski',
    114     work_position       = 'Sales & Digital Solutions',
     113SET work_position       = 'Sales & Digital Solutions',
    115114    company_size        = 'freelance',
    116115    is_profile_complete = TRUE
    117116WHERE user_id = :user_id;
    118 
    119 -- account.name е дупликат на "user".name и мора да се одржува рачно
    120 UPDATE account
    121 SET name = 'Borjan Gjorgjievski'
    122 WHERE id = (SELECT account_id FROM "user" WHERE user_id = :user_id);
    123117
    124118COMMIT;
     
    142136}}}
    143137
    144 Ограничувањата `uq_account_email` и `uq_user_email` го спречуваат дуплирањето и на ниво на база, па апликацијата мора да ја фати грешката `23505` доколку два барања стигнат истовремено.
     138Ограничувањето `uq_account_email` го спречува дуплирањето и на ниво на база, па апликацијата мора да ја фати грешката `23505` доколку два барања стигнат истовремено.
    145139
    146140* Доколку на корисникот му истекол токенот за валидација на неговата емаил адреса, тогаш откако ќе го кликне линкот за валидација ќе му се прикаже порака дека токенот е истечен и копче за повторно испраќање на нов токен за валидација.
     
    168162COMMIT;
    169163}}}
    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-то автоматски — не треба да се внесува рачно.