| | 1 | == Функции == |
| | 2 | |
| | 3 | === '''fn_artist_average_rating(p_bookable_id INT)''' === |
| | 4 | Оваа функција ја пресметува просечната оцена за даден артист/бенд (bookable) така што ги зема сите рецензии (''Review'') за неговите букинзи и ја враќа средната вредност заокружена на две децимали. |
| | 5 | |
| | 6 | Со тоа се имплементира бизнис логиката за прикажување на рејтинг на артистите во апликацијата и за статистика/сортирање по оцена. |
| | 7 | |
| | 8 | === '''fn_artist_total_earnings(p_bookable_id INT)''' === |
| | 9 | Функцијата ја собира сумата на сите плаќања со статус ''PAID'' за сите букинзи поврзани со даден артист или бенд. |
| | 10 | |
| | 11 | Така се имплементира бизнис логиката за пресметка на вкупната заработка на артистот, која може да се прикаже во неговиот профил или во администраторскиот дел. |
| | 12 | |
| | 13 | === '''fn_check_artist_availability(p_bookable_id INT, p_date DATE)''' === |
| | 14 | Оваа функција проверува дали артистот има барем еден запис во ''AvailabilitySlot'' со статус ''AVAILABLE'' на дадениот датум и враќа TRUE/FALSE. |
| | 15 | |
| | 16 | Со тоа се имплементира логиката за проверка на достапност при креирање понуда или букинг – апликацијата прво проверува дали артистот е слободен на конкретниот датум. |
| | 17 | |
| | 18 | === '''fn_total_client_bookings(p_client_id INT)''' === |
| | 19 | Функцијата го брои бројот на букинзи за даден клиент преку поврзување на ''BookingRequest'', ''Offer'' и ''Booking'' и враќа цел број. |
| | 20 | |
| | 21 | Ова ја покрива бизнис логиката за статистика за клиентот (на пример колку настани има букирано), што може да се користи во неговиот профил или за аналитика. |
| | 22 | |
| | 23 | == Процедури == |
| | 24 | |
| | 25 | === '''sp_create_booking_request(p_client_id, p_duration_id, p_event_type, p_event_date, p_location_id)''' === |
| | 26 | Процедурата креира нов запис во ''BookingRequest'' со основните информации за настанот (клиент, траење, тип, датум, локација). |
| | 27 | |
| | 28 | На тој начин ја инкапсулира бизнис операцијата „клиентот испраќа барање за букинг“ и осигурува дека секогаш се пополнуваат потребните полиња на централизирано место. |
| | 29 | |
| | 30 | === '''sp_cancel_booking(p_booking_id INT)''' === |
| | 31 | Оваа процедура го ажурира полето ''booking_status'' на избраниот букинг во вредност ''CANCELLED''. |
| | 32 | |
| | 33 | На тој начин се имплементира логиката за откажување на букинг од страна на клиент или администратор, а преку тригерот за историја автоматски се логира и промената на статусот. |
| | 34 | |
| | 35 | === '''sp_create_payment(p_booking_id INT, p_amount NUMERIC)''' === |
| | 36 | Процедурата додава нов запис во ''Payment'' за одреден букинг, со зададена сума и статус ''PAID''. |
| | 37 | |
| | 38 | Така се имплементира делот од бизнис логиката за евиденција на успешно извршени плаќања, што потоа се користи и во функцијата за вкупна заработка на артистите. |
| | 39 | |
| | 40 | == Тригери == |
| | 41 | |
| | 42 | === '''fn_update_slot_status() / trg_update_slot_status''' === |
| | 43 | Овој тригер се активира по вметнување (AFTER INSERT) на нов букинг во ''Booking'' и преку функцијата ''fn_update_slot_status'' ги ажурира сите ''AvailabilitySlot'' записи за соодветниот артист на датумот на настанот во статус ''BOOKED''. |
| | 44 | |
| | 45 | Со тоа се имплементира бизнис правилото дека кога ќе се потврди букинг за одреден датум, слободните термини за тој датум повеќе не се достапни во календарот на артистот. |
| | 46 | |
| | 47 | === '''fn_prevent_double_booking() / trg_prevent_double_booking''' === |
| | 48 | Тригерот се активира пред вметнување (BEFORE INSERT) на нов букинг и во функцијата ''fn_prevent_double_booking'' проверува дали веќе постои букинг со статус ''CONFIRMED'' за истиот артист (bookable_id) и истиот датум на настан (event_date). |
| | 49 | |
| | 50 | Ако постои, се крева грешка „Artist already booked on that date!“ и се спречува внесот, со што директно се имплементира бизнис правилото дека артист може да има најмногу еден потврден настап во еден ден. |
| | 51 | |
| | 52 | === '''fn_booking_status_history() / trg_booking_status_history''' === |
| | 53 | Овој тригер се активира по ажурирање (AFTER UPDATE) на ''Booking'' кога статусот се менува и преку функцијата ''fn_booking_status_history'' внесува ред во ''BookingStatusHistory'' со новиот статус и времето на промена. |
| | 54 | |
| | 55 | Така се имплементира бизнис логиката за водење историја (audit trail) на статусите на букинзите, што е корисно за следење на целиот животен циклус на букинг (''CREATED → CONFIRMED → COMPLETED/CANCELLED''). |