| | 29 | |
| | 30 | |
| | 31 | ## Прегледи (Views) |
| | 32 | |
| | 33 | Базата на податоци содржи девет прегледи кои ги покриваат најчестите случаи на употреба на апликацијата. Секој преглед е дизајниран да го замени повторувачкиот `JOIN` код во апликацискиот слој и да обезбеди конзистентен приказ на податоците. |
| | 34 | |
| | 35 | ### v_available_rides |
| | 36 | |
| | 37 | Го прикажува списокот на сите возења со статус `scheduled` кои се достапни за резервација. За секое возење ги обединува податоците за возачот, возилото, марката и моделот, рутата, почетниот и крајниот град, и пресметува проценет вкупен трошок врз основа на должината на рутата и цената по километар. Просечната оцена на возачот е агрегирана директно во прегледот преку `LEFT JOIN` со `ratings`. Овој преглед го користи екранот за пребарување на возења — кога патникот внесува дестинација, апликацијата едноставно додава `WHERE origin_city = ...` или `WHERE departure_time >= ...` на овој преглед. |
| | 38 | |
| | 39 | ### v_driver_profile |
| | 40 | |
| | 41 | Обединет приказ на профилот на возачот — лични податоци, информации за возачката дозвола, примарното активно возило (ако има повеќе, се зема она со најмал `vehicle_id`), бројот на вкупни, завршени и откажани возења, како и агрегираната оцена. Дизајниран е за страницата на профилот на возачот, но истиот преглед го користи и патникот кога сака да провери со кого патува пред да резервира место. |
| | 42 | |
| | 43 | ### v_passenger_trip_history |
| | 44 | |
| | 45 | Целосна историја на патувања за секој патник — резервации со статус, имиња на возачот, почетен и краен град, потврди за качување и слегување, финалната сума и оценката што патникот ја дал. Редовите не се групирани — секоја резервација е посебен ред, па апликацијата може лесно да ги пагинира или филтрира по статус. Ги заменува сложените вгнездени упити кои инаку би биле потребни за приказот „Моите патувања“. |
| | 46 | |
| | 47 | ### v_ride_manifest |
| | 48 | |
| | 49 | Листа на сите потврдени, активни и завршени патници за секое возење, со нивните имиња, телефонски броеви, места на качување и слегување и финалната сума. Возачот го користи овој преглед пред поаѓање за да знае кого чека, каде да застане и колку да наплати. Прикажува само резервации со статус `confirmed`, `picked_up` или `completed` — откажаните резервации намерно се исклучени за да не го збунат возачот. |
| | 50 | |
| | 51 | ### v_driver_earnings |
| | 52 | |
| | 53 | Месечен преглед на приходите по возач, пресметан врз основа на завршените резервации и нивните финални суми. За секој месец ги прикажува бројот на возења, бројот на наплатени резервации, вкупниот приход, просечниот, максималниот и минималниот износ по резервација. Корисен е и за возачот (личен финансиски преглед) и за администраторот (следење на активноста на платформата по период). |
| | 54 | |
| | 55 | ### v_route_popularity |
| | 56 | |
| | 57 | Ги рангира сите рути според вкупниот број на резервации. Покрај бројките, прикажува и просечна цена по резервација и просечна цена по километар за секоја рута. Целта е двојна: прво, на почетниот екран да се прикажат најбараните рути како предлози; второ, да служи за аналитика — ако одредена рута има многу возења, но мал број на резервации, тоа е сигнал дека цената е превисока или дека постои проблем со достапноста. |
| | 58 | |
| | 59 | ### v_booking_details |
| | 60 | |
| | 61 | Комплетен детален запис за една резервација — сè на едно место: патник, возач, возило со регистарски таблички, места на качување и слегување со имиња на локациите и градовите, времето на поаѓање, статусот и финалниот износ. Наменет е за екранот со потврда на резервација и за генерирање на потврда/сметка. Поради тоа што содржи многу `JOIN`-ови, апликацијата секогаш го повикува со `WHERE booking_id = ?` — никогаш без филтер. |
| | 62 | |
| | 63 | ### v_unread_notifications |
| | 64 | |
| | 65 | Ги враќа само непрочитаните нотификации (каде `read_at IS NULL`), збогатени со името на корисникот и пресметаната „старост во минути“ (`age_mins`), за да може апликацијата да прикаже „пред 5 минути“ без дополнителна логика. Прегледот е наменет за ѕвончето за нотификации во мобилната апликација и секогаш се повикува со `WHERE user_id = ?` за конкретниот најавен корисник. |
| | 66 | |
| | 67 | ### v_incident_summary |
| | 68 | |
| | 69 | Административен преглед на сите пријавени инциденти со целосен контекст — тип и опис на инцидентот, времето на пријавување, личните податоци на пријавувачот и возачот (вклучувајќи го бројот на возачката дозвола) и рутата на возењето. Дизајниран е исклучиво за администраторскиот панел за безбедност и не е изложен кон патничкиот или возачкиот интерфејс. Прикажува инциденти за сите возења без разлика на нивниот статус, бидејќи инцидент може да биде пријавен и по завршено возење. |