wiki:UseCaseRealizations

Version 34 (modified by 191027, 2 years ago) ( diff )

--

UseCaseRealizations

0. Сите

ID 1
Случај на употреба Најава на кориснички профил
  • Се пристапува до почетната страна на апликацијата преку соодветното URL.
  • Се прикажува изгледот кој нуди 3 опции: Најава (како регистриран паркирач), Најава како гостин и Регистрирај се. (слика 1.1).
  • Се внесува емаил адресата и соодветниот пасворд од корисничкиот профил претходно креиран и се притиска на копчето за "Најава".
  • Доколку се работи за корисник кој нема профил, а не сака да се регистрира, во тој случај постои опција за "Најава како гостин" која директно го пушта во системот.
  • Со притискање на копчето за најава преку axios POST повик се праќа барање на /api/login за најава до бекендот.
  • Барањето за најава патува низ филтер chainot каде што е пречекано од нашиот CustomAuthenticationFilter кој од податоците за најава креира authenticationToken кој потоа се предава на authenticationManager да ја потврди точноста на лозинката и емаил адресата кои се наоѓаат во некој од нашите кориснички репозиториуми.
  • Доколку комбинацијата на лозинка и емаил адреса се покаже како валидна CustomAuthentication со повик на методот successfulAuthentication во зависност од типот на корисник кој се логирал ( односно од кој репозиториум се добила потврда за точноста на податоците ) се гради соодветен JsonWebToken кој се праќа до фронтот за авторизација на понатамошни повици до бекендот. Доколку е неуспешна најавата корисникот е вратен на почетната страна со соодветно известување за неуспешната најава.
  • Претходниве чекори 4-6 се идентични за секој тип на корисник освен за Guestot. По успешна најава Workerot и Administratorot се пренасочени на страната со приказ на картички за паркинг зони додека пак Guest и RegisteredUser се пренасочени на мапа со приказ на паркинг зоните и паркинг местата соодветно.


1. Регистриран Паркирач

ID 1
Случај на употреба Регистрација на кориснички профил
  • Се пристапува до почетната страна на апликацијата преку соодветното URL.
  • Се прикажува изгледот кој нуди 3 опции: "Најава" (како регистриран паркирач), "Најава како гостин" и "Регистрирај се". Се кликнува на "Регистрирај се" (слика 1.1)
  • Се отвара форма за регистрација (слика 1.2) со текст полиња во кои треба да се внесат соодветните лични податоци на корисникот за да го креира својот профил на нашата апликација, тоа се: име, презиме, телефонски број, емаил адреса и лозинка.
  • Откако ќе се внесат овие податоци се кликнува на копчето "Регистрирај се".
  • Се испраќа POST барање кое се прифаќа од RegisteredUserController на патеката /registriranParkirac/registration и како @RequestBody се вметнува request-от и се повикува функцијата register од registrationServiceRP која што прима еден аргумент, а тоа е request-от.
  • Во функцијата прво се проверува дали емаилот е валиден, потоа се гради token и се гради мејлот кој треба да се прати на емаил адресата која што корисникот ја навел.
  • Откако ќе се прати мејлот корисникот треба да потврди со кликнување на подвлечениот линкот обоен со сина боја (слика 1.3). Вака се испраќа ново GET барање на патеката /registriranParkirac/registration/confirm со параметар token и се повикува функцијата confirmToken(token) од registrationServiceRP. Во функцијата прво се проверува дали е постоечки токенот, дали веќе постои таа мејл адреса и дали времетрањето на токенот е поминато
  • По поминување на сите овие проверки ќе се постави тој токен со функцијата setConfirmedAtRP(token) од confirmationTokenService и ќе се дозволат привилегиите на регистрираниот паркирач за користење на апликацијата со функцијата enableRegistriranParkirac(confirmationTokenRP.getRegistriranParkirac().getEmail()) од registeredUserService.
  • Корисничкиот профил е успешно креиран и корисникот е редиректиран повторно на почетната страна на апликацијата (слика 1.1) и за да продолжи со користење треба да се најави со емаил адресата и пасвордот од ново креираниот кориснички профил.


слика 1.1


слика 1.2


слика1.3


ID 2
Случај на употреба Пребарување на паркинг место
  • Првично потребно е паркирачот да биде најавен во системот за да може да пребара и започне паркинг сесија. (овие чекори се веќе објаснети погоре)
  • Откако успешно ќе се најави паркирачот, му се отвара почетната страна (слика 5.1)
  • Паркирачот може да кликне на хамбургер менито (иконата горе лево) и да му се покажат повеќе опции (почетна го носи на почетната страна, мапа го носи на мапа со паркинг зони и паркинг места, сесија го носи на започнување на сесија, одјави се го одјавува корисникот). Во овој случај паркирачот клика на мапа. (слика 5.2)
  • Се праќа GET барање на патеката /parkingZone и ова барање е пречекано од ParkingZoneController контролерот.
  • Се повикува функцијата getAllParkingZones од сервисниот слој parkingZoneService при што на мапата се покажуваат сите паркинг зони со сите паркинг места соодветно обоени во зелено/црвено доколку се слободни/зафатени. (слика 5.3)
  • Може да се избере конкретна зона за која паркирачот сака да ја провери состојбата со избирање на име на паркинг зона како опција во drop down менито под мапата. (слика 5.4)
  • Откако ќе се избере одредена зона се испраќа GET барање на патеката /parkingZone/{parkingZoneId} каде што parkingZoneId е @PathVariable и претставува ID на паркинг зоната и ова барање е пречекано од ParkingZoneController контролерот.
  • Се повикува функцијата findById(parkingZoneId) од сервисниот слој parkingZoneService и се враќа конкретната паркинг зона со соодветното ИД.
  • Откако ќе се добие паркинг зоната, мапата се фокусира врз нејзиниот центар и се прикажува состојбата на паркинг зоната со преостанати слободни места како и информации за цена од час и работно време на паркинг зоната. (слика 5.5)


слика 5.1


слика 5.2


слика 5.3\ No image "5.3.JPG" attached to UseCaseRealizations

слика 5.4
No image "5.4.JPG" attached to UseCaseRealizations

слика 5.5
No image "5.5.JPG" attached to UseCaseRealizations

ID 3
Случај на употреба Паркирање

2. Guest

ID 1
Случај на употреба Пребарување на паркинг место
ID 2
Случај на употреба Паркирање

3. Вработен

ID 1
Случај на употреба Ажурирање на паркинг места со паркинг сесии
  • Првично потребно е вработениот да биде најавен во системот за да може да ги извршува овие привилегии.
  • Откако успешно ќе се најави се отвара паркинг зоната за која е одговорен вработениот и се листаат сите паркинг сесии за таа паркинг зона. Ова се случува така што се праќа GET барање на патеката /parkingSession/{parkingZoneId} каде што parkingZoneId е @PathVariable и претставува ID на паркинг зоната и ова барање е пречекано од ParkingSessionController контролерот.
  • Се повикува функцијата getAllParkingSessionsFromZone(parkingZoneId) од сервисниот слој parkingSessionService каде што ги враќа сите сесии што не се завршени и платени, односно сесии што го немаат статусот "ENDED_PAID".
  • За појаснување, секоја паркинг сесија може да се наоѓа во 4 состојби:
STARTED_UNVERIFIED - паркинг сесија започната од паркирачот, но вработениот не ја ажурирал во системот со соодветното паркинг место врз основа на паркираното возило (жолта боја).
STARTED_VERIFIED - паркинг сесија на која што вработениот и го ажурирал паркинг местото на кое што се наоѓа паркираното возило (зелена боја).
ENDED_UNPAID - паркинг сесија која што е прекината од паркирачот и времето е завршено (црвена боја).
ENDED_PAID - паркинг сесија која што е платена од страна на паркирачот и е целосно завршена.
  • На сликата 4.1 се наоѓа една паркинг сесија со статус STARTED_UNVERIFIED
  • На сликата 4.2 можеме да забележиме како вработениот ја ажурира паркинг сесијата така што го внесува бројот на паркинг местото на кое што е паркирано возилото на тој паркирач со соодветна регистарска табличка и ја кликнува зелената стрелка десно.
  • Ова се случува со праќање на PUT барање на патеката /parkingSession/verify/{parkingSessionId} каде што parkingSessionId е @PathVariable односно ID на паркинг сесијата, дополнително се праќа и името(бројот) на паркинг местото како параметар @RequestParam String parkingSpaceName, ова барање е пречекано од ParkingSessionController контролерот.
  • Потоа се повикува функцијата verifyParkingSession(parkingSessionId,parkingSpaceName), од сервисниот слој parkingSessionService, каде по проверка дали постои таква сесија идали веќе и е сменет статусот и дали паркинг местото е валидно, се менува статусот на паркинг сесијата во STARTED_VERIFIED и се означува дека паркинг местото е зафатено. слика 4.3
  • Откако корисникот ќе ја заврши сесијата, таа преминува во црвена боја и и се меннува статусот во ENDED_UNPAID и тоа може да се забележи на сликата 4.4
  • Откако корисникот ќе ја плати сесијата (зависно со кредитна картичка или мобилен телефон) таа преминува во статусот ENDED_PAID и соодветно исчезнува од активни сесии за паркинг зоната. слика 4.5
  • Исто така може да се забележат и статистичките податоци кои цело време се менуваат во зависност од состојбите во кои се наоѓаат и во кои преминуваат паркинг сесиите, а тие сe: слободни паркинг места, зафатени паркинг места, активни паркинг сесии, завршени паркинг сесии и неактивни паркинг сесии.


слика 4.1


слика 4.2


слика 4.3


слика 4.4


слика 4.5


4. Administrator

ID 1
Случај на употреба Додавање на нов вработен
  • Првично потребно е администраторот да биде најавен во системот за да може да ги извршува овие привилегии.
  • Откако успешно ќе се најави се кликнува иконата со 2 силуети што се наоѓа лево на странично мени и се прикажува листа на вработени со опција за пребарување, додавање на нов вработен и менување на статус на акаунтот.
  • Се клика на копчето Додади Вработен горе десно(слика 2.1)
  • Се прикажува форма за внес (слика 2.2) со повеќе информации за вработениот, тие се: име, презиме, емаил адреса, телефон, лозинка, потврди лозинка, одговорен за (се избираат зони за кои е одговорен), работен статус на вработениот (работи, не работи, на боледување, на одмор) и состојба на акаунтот (активен/неактивен).
  • По внесување на информациите се кликнува на копчето "Создади Вработен" доле десно.
  • Вака се праќа POST барање на патеката /vraboten и барањето е пречекано од WorkerController и во барањето е ставено @RequestBody од AddUpdateWorker vraboten кој што е изграден од сите внесени информации од претходната форма.
  • Потоа се повикува функцијата addWorker од workerService и му се предаваат сите атрибути од vraboten објектот.
  • Во функцијата се врши проверка дали веќе постои таков вработен со истиот мејл, доколку не станува збор за тоа се проверуваат сите останати атрибути, се поставува статусот на вработениот, се поставува за кои зони е одговорен и се зачувува во workerRepository со функцијата save што го прима новосоздадениот вработен кој всушност се зачувува и во базата на податоци.
  • Потоа следи редиректирање повторно кон страната со листа на сите вработени (слика 2.3)
  • Доколку сака администраторот да го деактивира акаунтот се кликнува на зеленото копче "Активен" и ќе стане "Неактивен" со црвена боја и обратно, соодветно се појавува и нотификација за активноста што била направена од страна на администраторот (слика 2.4)
  • Ова во позадина се одвива на следниот начин: се праќа PUT барање на патеката /vraboten/{vrabotenId} со @PathVariable vrabotenId што го претставува ID на вработениот и ова барање се пречекува исто така од WorkerController и се повикува функцијата lockWorkerAcc(vrabotenId) од сервисниот слој workerService.
  • Во функцијата се прави toggle на статусот како што е наведено горе и пред тоа се прави проверка дали воопшто постои вработен со соодветниот ID.


слика 2.1


слика 2.2


слика2.3


слика2.4


ID 2
Случај на употреба Едитирање на веќе постоечки вработен
  • Првично потребно е администраторот да биде најавен во системот за да може да ги извршува овие привилегии.
  • Администраторот го кликнува редот од табелата од листата на вработени за соодветниот вработен за кој сака да го ажурира неговиот профил (слика 2.1)
  • Потоа се прикажува формата на вработениот со неговите податоци со кои е регистриран во системот (слика 2.2)
  • Администратор соодветно ги менува оние податоци за кои сака да му го ажурира профилот на вработениот и може оваа активност да ја откаже со клик на копчето "Врати се назад" доле лево или да ја потврди активноста со клик на копчето "Создади вработен"
  • По кликнување на копчето "Создади вработен" се праќа PUT барање на патеката /vraboten/{vrabotenId} каде што {vrabotenId} претставува @PathVariable и е ID на вработениот и ова барање се пречекува од WorkerController, а дополнително се праќа и @RequestBody AddUpdateWorker vraboten.
  • Потоа се повикува функцијата updateWorker од сервисниот слој workerService на кој како параметри се праќаат сите атрибути од vraboten.
  • Во функцијата се врши проверка дали веќе постои таков мејл кај некој друг вработен, доколку не станува збор за тоа се проверуваат сите останати атрибути, се поставува статусот на вработениот, се поставува за кои зони е одговорен и се зачувува во workerRepository со функцијата save што го прима ажурираниот вработен кој всушност се зачувува и во базата на податоци.
  • Соодветно пак ќе биде редиректиран кон листата на вработени (слика 2.1)


ID 3
Случај на употреба Додавање и ажурирање на паркинг зона
  • Првично потребно е администраторот да биде најавен во системот за да може да ги извршува овие привилегии.
  • Откако успешно ќе се најави се кликнува иконата со 4 правоаголничиња што се наоѓа лево горе на страничното мени.
    Се праќа GET барање на патеката /parkingZone и ова барање се пречекува од ParkingZoneController и се повикува функцијата getAllParkingZones од сервисниот слој parkingZoneService при што се прикажуваат картички со постоечките паркинг зони, како и опција за сортирање на истите и опција за додавање на нова паркинг зона. (слика 3.1)
  • Се кликнува на белиот правоаголник со зелен плус за додавање на паркинг зона со внесување на називот на зоната (слика 3.2) и се кликнува на зеленото копче "Креирај зона".
  • Се праќа POST барање на патеката /parkingZoneName со @RequestBody String name што е името на зоната и ова барање исто така се пречекува од ParkingZoneController и се повикува функцијата addParkingZoneNameOnly(name) од сервисниот слој parkingZoneService и на овој начин се креира празна паркинг зона само со име и како таква се зачувува во базата.
  • Се прикажуваат повторно сите паркинг зони заедно со ново додадената, исто како втората точка погоре (слика 3.3)
  • Се кликнува картичката што ја претставува ново додадената паркинг зона за да може да се ажурираат податоците за истата. Се испраќа GET барање на патеката /parkingZone/{parkingZoneId} каде што parkingZoneId е @PathVariable односно ID на паркинг зоната и се прикажува соодветно формата за едитирање за таа паркинг зона(слика 3.4)
  • Се пополнуваат соодветните информации за зоната а тоа се: назив, цена од час, работни часови, боја на зона, темиња на центар на зона (објект од класа Location со атрибути латитуда и лонгитуда), темиња на зона (повеќе точки со латитуда и лонгитуда што ги претставуваат граничните точки на зоната), потоа се додаваат одговорни лица од листа на сите вработени, секако доколку постојат и потоа се додаваат паркинг местатa (латитуда, лонгитуда и број на паркинг место). (слика 3.9)
    ParkingZoneLocation е класа што содржи центар на зона (објект од класа Location) и темиња на зона (листа од објекти од класа Location).
  • При клик на копчето зачувај промени се прикажува прозорец за да ја потврдиме/откажеме нашата активност, соодветно кликнуваме на копчето "Да" (слика 3.6). Вака се праќа PUT барање на патеката /parkingZone/{parkingZoneId} каде што parkingZoneId е @PathVariable и е ID на паркинг зоната, а @RequestBody ParkingZoneAdminView parkingZone е новиот-ажуриран објект од паркинг зоната.
    Барањето секако се пречекува од контролерот ParkingZoneController и се повикува функцијата updateParkingZone од сервисниот слој parkingZoneService каде како параметри се предаваат сите атрибути од објектот parkingZone кој е изграден од сите информации кои претходно ги внесовме.
  • По успешно создавање на паркинг зоната се редиректира администраторот назад кон листа од сите паркинг зони и се прикажува ново ажурираната паркинг зона, всушност се прави истиот повик како кај точка 2 (слика 3.7)
  • Доколку сакаме да ја видиме паркинг зоната на мапата тогаш може да се кликне копчето со слика на мапа и да се отвори google maps со исцртаната зона во онаа боја во која што сме избрале (на сликата е црвена), заедно со сите паркинг места во зоната (обоени соодветно со зелено/црвено доколку се слободни/зафатени) (слика 3.8)


слика 3.1


слика 3.2


слика 3.3


слика 3.4


слика 3.5


слика 3.6


слика 3.7


слика 3.8


слика 3.9


5. Систем

ID 1
Функционалност Приказ на мапа
  • Прикажува мапа со означени паркинг зони како и паркинг места во самите зони кои се соодветно означени во зависност од тоа дали се зафатени или не. Ова е достапно за секој тип на корисник.


ID 2
Функционалност Приказ на состојби на паркинг зони
  • За Вработен и Администратор нуди приказ на моменталната состојба на паркинг зоните како вкупен број на места, зафатени места, слободни места.
  • Дополнително секој Вработен има преглед и на тековните паркинг сесии односно време кога се започнати, време кога се завршени (доколку се завршени), паркинг место на кое се одвива сесијата, како и регистарската табличка за која е сесијата.


Attachments (39)

Note: See TracWiki for help on using the wiki.