Changes between Version 26 and Version 27 of DatabaseProgramming


Ignore:
Timestamp:
06/15/26 22:22:15 (13 hours ago)
Author:
231119
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v26 v27  
    77**Процедура за почеток на смена на возач**
    88
    9 Процедурата проверува дали постои id-то на возачот и VIN бројот кај возилото и фрла соодветен исклучот. Доколку возачот и возилото се валидни се додава нов запис за смена во табелата `Driver_Vehicle`.
     9Процедурата проверува дали постои id-то на возачот и VIN бројот кај возилото и фрла соодветен исклучот. Доколку возачот и возилото се валидни се додава нов запис за смена во табелата `Driver_Vehicle`. Оваа процедура ја имплементира бизнис логиката за најава на возачите на системот, со што тие официјално стануваат активни и достапни за преземање на патници.
    1010
    1111{{{
     
    3434**Процедура за завршување на смена на возач**
    3535
    36 Процедурата проверува дали постои id-то на возачот, доколку не постои фрла соодветен исклучок. Потоа се проверува дали возачот има точно една активна смена која не е завршена. На крај се ажурира записот во табелата `Driver_Vehicle` на тој начин што се поставува тековното време во колоната `time_to`.
     36Процедурата проверува дали постои id-то на возачот, доколку не постои фрла соодветен исклучок. Потоа се проверува дали возачот има точно една активна смена која не е завршена. На крај се ажурира записот во табелата `Driver_Vehicle` на тој начин што се поставува тековното време во колоната `time_to`. Во апликацијата, оваа логика се повикува кога возачот сака да се одјави од системот, означувајќи го крајот на неговото работно време.
    3737
    3838{{{
     
    6565**Процедура за вработување на возач во компанија**
    6666
    67 Процедурата проверува дали id-то на возачот е валидно, доколку не постои фрла соодветен исклучок.
     67Процедурата проверува дали id-то на возачот е валидно, доколку не постои фрла соодветен исклучок. Оваа процедура е дел од административниот модул на апликацијата и овозможува менаџирање на човечки ресурси, односно формално поврзување на возачот со конкретна такси компанија.
    6868
    6969{{{
     
    8989**Процедура за вработување на диспечер во компанија**
    9090
    91 Процедурата проверува дали id-то на диспечерот е валидно, доколку не постои фрла соодветен исклучок.
     91Процедурата проверува дали id-то на диспечерот е валидно, доколку не постои фрла соодветен исклучок. Се користи за управување со кадар во рамките на компанијата. Ова овозможува диспечерот да добие овластување за креирање и испраќање на понуди во таа компанија.
    9292
    9393{{{
     
    113113**Процедура за отпуштање/завршување на договор на возач во компанија**
    114114
    115 Процедурата прави две проверки. Првата проверка ја пребарува табелата Driver за id-то на возачот, доколку истото не постои се фрла соодветен исклучок. Потоа се проверува дали постои соодветен запис во табелата `EmploymentHistory` кој потврдува дека возачот е тековно вработен во компанијата. На крај се променува записот од табелата `EmploymentHistory` на тој начин што се става краен датум.
     115Процедурата прави две проверки. Првата проверка ја пребарува табелата Driver за id-то на возачот, доколку истото не постои се фрла соодветен исклучок. Потоа се проверува дали постои соодветен запис во табелата `EmploymentHistory` кој потврдува дека возачот е тековно вработен во компанијата. На крај се променува записот од табелата `EmploymentHistory` на тој начин што се става краен датум. Оваа процедура служи за прекинување на соработката, оневозможувајќи му на возачот понатаму да вози за таа компанија.
    116116
    117117{{{
     
    147147**Процедура за отпуштање/завршување на договор на диспечер во компанија**
    148148
    149 Процедурата прави две проверки. Првата проверка ја пребарува табелата `Dispatcher` за id-то на диспечарот, доколку истото не постои се фрла соодветен исклучок. Потоа се проверува дали постои соодветен запис во табелата `EmploymentHistory` кој потврдува дека деспечерот е тековно вработен во компанијата. На крај се променува записот од табелата `EmploymentHistory` на тој начин што се става краен датум.
     149Процедурата прави две проверки. Првата проверка ја пребарува табелата `Dispatcher` за id-то на диспечарот, доколку истото не постои се фрла соодветен исклучок. Потоа се проверува дали постои соодветен запис во табелата `EmploymentHistory` кој потврдува дека деспечерот е тековно вработен во компанијата. На крај се променува записот од табелата `EmploymentHistory` на тој начин што се става краен датум. Се користи за администрирање на правата на вработените, по извршувањето диспечерот ги губи сите привилегии за менаџирање со барањата на таа компанија.
    150150
    151151{{{
     
    181181**Процедура за пишување на оцена**
    182182
    183 Оваа процедурата се повикува кога корисник испраќа свој коментар и рејтинг за возењето откако ќе пристигне на дестинацијата. Се проверува дали постои запис во табелата Ride за соодветните `id_ride` и `id_customer` доколку не постои се фрла исклучок `Customer can not give a rating on a ride they do not have.`.
    184 
     183Оваа процедурата се повикува кога корисник испраќа свој коментар и рејтинг за возењето откако ќе пристигне на дестинацијата. Се проверува дали постои запис во табелата Ride за соодветните `id_ride` и `id_customer` доколку не постои се фрла исклучок `Customer can not give a rating on a ride they do not have.`. Имплементира логика за корисничка повратна информација, која е клучна за евалуација на квалитетот на такси услугата.
     184 
    185185{{{
    186186create or replace procedure write_rating(rating numeric, comment text, id_ride int, id_customer int)
     
    205205**Процедура за испраќање порака**
    206206
    207 Пораките можат да бидат испратени од возачот или патникот и се однесуваат на едно возење. Доколку не постои возење за соодветните `id_ride` и `id_user` се фрла исклучок `User can not write a chat for a ride they do not have.`.
     207Пораките можат да бидат испратени од возачот или патникот и се однесуваат на едно возење. Доколку не постои возење за соодветните `id_ride` и `id_user` се фрла исклучок `User can not write a chat for a ride they do not have.`. Оваа процедура е главна во системот за чет помеѓу патникот и возачот за време на реализацијата на услугата.
    208208
    209209{{{
     
    229229**Процедура за поднесување пријава**
    230230
    231 Оваа процедура се повикува кога корисниците поднесуваат пријава за време на возењето. Тоа може да биде некоја поплака од типот брзо возење или скршнување од патот. Доколку не постои возење за соодветните `id_ride` и `user_id` се фрла исклучок `Customer can not write a report on a ride they do not have.`.
     231Оваа процедура се повикува кога корисниците поднесуваат пријава за време на возењето. Тоа може да биде некоја поплака од типот брзо возење или скршнување од патот. Доколку не постои возење за соодветните `id_ride` и `user_id` се фрла исклучок `Customer can not write a report on a ride they do not have.`. Се користи во модулот за безбедност и заштита на корисниците, овозможувајќи брза реакција на поддршката.
    232232
    233233{{{
     
    253253**Процедура за креирање на барање за превоз**
    254254
    255 Процедурата `make_request` се повикува кога корисникот креира ново барање за превоз. Најпрво се проверува дали постои корисникот со даденото `customer_id`, по што се валидираат координатите за почетната и крајната локација. Дополнително се проверуваат параметрите поврзани со бројот на патници, детски седишта и багаж, при што се фрлаат соодветни исклучоци доколку некоја вредност е невалидна. Исто така, процедурата проверува дали почетната и крајната локација не се исти. Доколку сите проверки се успешни, се додава нов запис во табелата `Request` со статус `pending`, а идентификаторот на новокреираното барање се враќа преку излезниот параметар `request_id`.
     255Процедурата се повикува кога корисникот иницира ново барање за превоз, при што детало се валидираат координатите, бројот на патници, седишта за деца и багаж. Доколку сите бизнис правила се исполнети, се генерира нов запис во `Request` со почетен статус `pending` и се враќа неговиот ID. Ова е почетната точка на главниот тек во апликацијата, процесот на повикување такси возило.
    256256
    257257{{{
     
    350350**Процедура за додавање на Waypoint на некое барање**
    351351
    352 Процедурата `add_waypoint` се повикува кога корисникот сака да додаде попатна точка на постоечко барање за превоз. Најпрво се проверува дали постои барањето со даденото `request_id`, по што се валидираат координатите на waypoint-от. Дополнително се проверува дали истиот `waypoint` веќе е додаден за конкретното барање, при што се фрла соодветен исклучок доколку постои дупликат. Потоа се пресметува редниот број (`seqno`) на новиот `waypoint` врз основа на бројот на веќе постоечки waypoints за тоа барање. Доколку сите проверки се успешни, се додава нов запис во табелата `Waypoints`.
     352Оваа процедура му овозможува на корисникот да додаде попатна дестинација (waypoint) на веќе креирано барање за превоз. Таа ги проверува географските опсези и спречува внес на дупликат локации, притоа автоматски пресметувајќи го редоследот (`seqno`). Ја имплементира бизнис логиката за сложени рути, овозможувајќи им на возачите однапред да го видат точниот план на движење.
    353353
    354354{{{
     
    394394**Процедура за зпочнување на возење со такси**
    395395
    396 Процедурата проверува дали постои id-то на понудата, доколку не постои фрла соодветен исклучок. Потоа се пронаоѓа најблискиот слободен возач кој е на активна смена. На крај се додава нов запис во табелата `Ride` со статус `in_progress`, а статусите на понудата и барањето се ажурираат во accepted и `in_progress`.
     396Процедурата проверува дали постои id-то на понудата, доколку не постои фрла соодветен исклучок. Потоа се пронаоѓа најблискиот слободен возач кој е на активна смена и на крај се додава нов запис во табелата `Ride` со статус `in_progress`, а статусите на понудата и барањето се ажурираат во accepted и `in_progress`. Ова е критичен дел од бизнис логиката кој го означува физичкиот почеток на патувањето и транзицијата на возилото во зафатена состојба.
    397397
    398398{{{
     
    473473** Процедура за креирање понуда за одредено барање **
    474474
    475 Процедурата се повикува кога диспечерот креира нова понуда за одредено барање за превоз. Најпрво се проверува дали постои барање со даденото `request_id` и дали истото е во статус pending, при што се фрла соодветен исклучок доколку условот не е исполнет. Потоа се валидираат влезните параметри: цената мора да биде поголема од нула, а проценетото време на пристигнување (eta) мора да биде во иднина во однос на тековното време. Дополнително, процедурата проверува дали диспечерот и возачот се тековно вработени во истата компанија преку пребарување на нивните активни договори во табелата `EmploymentHistory`. Доколку сите проверки се успешни, се додава нов запис во табелата `Offer` со иницијален статус pending.
     475Се повикува кога диспечерот креира понуда со цена и проценето време на пристигнување (`ETA`) за некое активно барање. Процедурата гарантира дека цената е позитивна, времето е во иднина и дека диспечерот и избраниот возач работат за иста компанија. Ја имплементира бизнис логиката за понуди, каде компаниите поднесуваат предлози кои патникот понатаму треба да ги разгледа.
    476476
    477477{{{
     
    515515** Процедура за прифаќање на понуда **
    516516
    517 Оваа процедура се повикува кога корисникот прифаќа одредена понуда за превоз. Таа го ажурира статусот на избраната понуда и на самото барање во `accepted`, додека сите останати конкурентни понуди за истото барање се одбиваат, односно нивниот статус се променува во `rejected`.
     517Оваа процедура се повикува кога корисникот прифаќа одредена понуда за превоз. Таа го ажурира статусот на избраната понуда и на самото барање во `accepted`, додека сите останати конкурентни понуди за истото барање се одбиваат, односно нивниот статус се променува во `rejected`. Ова ја завршува бизнис логиката на договарање на цената и условите за превоз.
    518518
    519519{{{
     
    543543**Функција и тригер за проверка на достапност на возач**
    544544
    545 Функцијата `ride_assign` враќа тригер кој фрла исклучок во случај возачот да е зафатен со друго возење во моментот на доделување на возач. Тригерот се извршува пред внес на запис во табелата `Ride`.
     545Функцијата `ride_assign` враќа тригер кој фрла исклучок во случај возачот да е зафатен со друго возење во моментот на доделување на возач. Тригерот се извршува пред внес на запис во табелата `Ride`. Во контекст на бизнис логиката, ова спречува преклопување на возењата и гарантира дека еден возач не може физички да извршува две патувања истовремено.
    546546
    547547{{{
     
    562562**Функција и тригер кој спречува два пати доделување на активна смена на ист возач**
    563563
    564 Функцијата проверува дали постои id-то на возачот и VIN бројот на возилото, при што фрла соодветен исклучок доколку некој од нив не е валиден. Дополнително, се проверува дали возачот е на смена. Тригерот се извршува пред внесување или ажурирање на запис во табелата Driver_Vehicle.
     564Функцијата проверува дали постои id-то на возачот и VIN бројот на возилото, при што фрла соодветен исклучок доколку некој од нив не е валиден. Дополнително, се проверува дали возачот е на смена. Тригерот се извршува пред внесување или ажурирање на запис во табелата Driver_Vehicle. Неговата намена е да ја одржи конзистентноста на работното време и да спречи логички грешки при најава во апликацијата.
    565565
    566566{{{
     
    596596** Функција и тригер за спречување на манипулација со цената **
    597597
    598 Функцијата враќа тригер кој спречува промена на цената на понудата откако истата ќе добие статус `accepted` или `completed`. Дополнително, се прави проверка дали внесената цена е поголема од нула, при што се фрла соодветен исклучок доколку овие услови не се исполнети.
     598Функцијата враќа тригер кој спречува промена на цената на понудата откако истата ќе добие статус `accepted` или `completed`. Дополнително, се прави проверка дали внесената цена е поголема од нула, при што се фрла соодветен исклучок доколку овие услови не се исполнети. Ова директно ја заштитува финансиската сигурност во системот и спречува неовластени или измамнички промени на трошоците по договарањето.
    599599
    600600{{{
     
    623623**Тригер и функција за проверка на единствена оценка**
    624624
    625 Секој корисник смее да остави максимум една оценка за секое возење. Функцијата враќа тригер кој доколку во табелата `Review` постои оценка од корисникот за тоа возење фрла соодветен исклучот. Тригерот се извршува пред внес на запис во табелата `Review`.
     625Секој корисник смее да остави максимум една оценка за секое возење. Функцијата враќа тригер кој доколку во табелата `Review` постои оценка од корисникот за тоа возење фрла соодветен исклучот и тригерот се извршува пред внес на запис во табелата `Review`. Ова бизнис правило спречува вештачко манипулирање со рејтинзите на возачите и гарантира фер статистика.
    626626
    627627{{{
     
    648648**Тригер и функција за проверка на бројот на слободни седишта**
    649649
    650 Секој корисник при испраќање на барање за превоз напоменува колку патници ќе има (деца, воздрасни и бебиња). Функцијата `check_available_seats` проверува дали во возилото кое се нуди во понудата има доволно седишта. Функцијата враќа тригер кои се извршува пред внес или промена на запис во табелата `Offer`.
     650Секој корисник при испраќање на барање за превоз напоменува колку патници ќе има (деца, воздрасни и бебиња). Функцијата `check_available_seats` проверува дали во возилото кое се нуди во понудата има доволно седишта и враќа тригер кои се извршува пред внес или промена на запис во табелата `Offer`. Ја спроведува клучната логика за логистичка компатибилност, со што системот оневозможува испраќање на возило кое физички не може да ги собере патниците.
    651651
    652652{{{
     
    677677**Функција и тригер за спречување на возење со неважечка возачка дозвола**
    678678
    679 Функцијата го пребарува датумот на истекување на возачката дозвола за соодветниот возач преку поврзување на табелите `Driver` и `DriverLicense`. Доколку дозволата е истечена во однос на тековниот датум, се фрла соодветен исклучок. Тригерот се извршува пред внес на нов запис во табелата `Ride`.
     679Функцијата го пребарува датумот на истекување на возачката дозвола за соодветниот возач преку поврзување на табелите `Driver` и `DriverLicense`. Доколку дозволата е истечена во однос на тековниот датум, се фрла соодветен исклучок, а тригерот се извршува пред внес на нов запис во табелата `Ride`. Целта на оваа рестрикција е правна и сигурносна заштита на платформата, осигурувајќи дека само лиценцирани возачи можат да превезуваат патници.
    680680
    681681{{{
     
    708708**Функција и тригер за спречување на промена на статус на завршена понуда**
    709709
    710 Функцијата проверува дали претходниот статус на понудата бил `completed`, при што фрла соодветен исклучок доколку се направи обид за негова промена во било кој друг статус. Тригерот се извршува пред ажурирање на запис во табелата `Offer`.
     710Функцијата проверува дали претходниот статус на понудата бил `completed`, при што фрла соодветен исклучок доколку се направи обид за негова промена во било кој друг статус. Тригерот се извршува пред ажурирање на запис во табелата `Offer`. Ова ја гарантира веродостојноста на архивските податоци во системот кои подоцна се користат за генерирање извештаи.
    711711
    712712{{{
     
    732732** Функција и тригер за контрола на времето на важност на понудата **
    733733
    734 Оваа функција враќа тригер кој спречува прифаќање на понуди кои се постари од 5 минути од моментот на нивното креирање. Доколку се направи обид за промена на статусот од `pending` во `accepted` по истекот на овој рок, статусот на понудата автоматски се менува во `expired` и истата не може да биде прифатена.
     734Оваа функција враќа тригер кој спречува прифаќање на понуди кои се постари од 5 минути од моментот на нивното креирање. Доколку се направи обид за промена на статусот од `pending` во `accepted` по истекот на овој рок, статусот на понудата автоматски се менува во `expired` и истата не може да биде прифатена. Оваа логика овозможува динамичност на пазарот, со цел возачите и диспечерите да не бидат долго блокирани чекајќи одговор од патникот.
    735735
    736736{{{
     
    759759**Функција и тригер за проверка на валидноста на email адреса и телефонски број**
    760760
    761 Функцијата проверува дали постои корисник со ист email или ист телефонски број и фрла исклучоци `User with this email already exists` и `User with this phone number already exists` соодветно. Функцијата враќа тригер кои се извршува пред секое додавање на нов запис-корисник во табелата `AppUser`.
     761Функцијата проверува дали постои корисник со ист email или ист телефонски број и фрла исклучоци `User with this email already exists` и `User with this phone number already exists` соодветно. Функцијата враќа тригер кои се извршува пред секое додавање на нов запис-корисник во табелата `AppUser`. Ова спречува дуплирање на идентитети и потенцијални злоупотреби во апликацијата при регистрација.
    762762
    763763{{{