= Имплементација на случаи на употреба == Закажување термин за терапија-корисник * Клиентски код Код преку кој се испраќаат податоци до серверот за закажување на термин. Кога корисникот кликнува на копчето „confirm-booking“, се активира функцијата поврзана со овој настан. Се креирање објект со податоци (termData), кој се зема од глобалната променлива window.selectedTime, која содржи избран термин.couponCode вредноста се зема од input полето со ID „coupon-type“, а medicalCondition се зема од input полето со ID „medical-condition“. На крај се испраќа POST барање кон серверот. Се повикува fetch('/api/requests/book'), што испраќа HTTP POST барање. [[Image(wiki:UseCaseImplementations:Screenshot (906).png)]] * Контролер Корисникот кликнува на копчето за потврда на закажување. Функцијата addEventListener реагира на клик на копчето "confirm-booking". Се собираат податоци од формата (term, couponCode, medicalCondition) и се испраќаат податоци до серверот преку fetch. Серверот ги прима и го обработува барањето во контролерот (@PostMapping("/book")). @RequestBody ги прима податоците (term, couponCode, medicalCondition). @CookieValue го вчитува username од колачињата. Методот bookAppointment од сервисот requestService се повикува со добиените податоци. Ако серверот врати успешен одговор, корисникот добива порака "Appointment booked successfully!". [[Image(wiki:UseCaseImplementations:Screenshot (907).png)]] * Сервис Функцијата bookAppointment обработува барање за резервација на термин. Се прави проверка на слободен термин преку appointmentRepository.findByTerm(dateTime) и се бара термин во базата со дадениот dateTime. Ако постои термин и неговиот статус е APPOINTMENT_STATUS.FREE, продолжува понатаму. Ако не постои термин или е веќе закажан, фрла исклучок: "Appointment not found or already booked.". userRepository.findByUsername(username).orElse(null) бара корисник со даденото корисничко име. Ако не се најде корисник, фрла исклучок: "User not found". requestRepository.save(request) го зачувува барањето во базата. На крај, ако сите проверки поминат, барањето успешно се зачувува и терминoт се резервира. [[Image(wiki:UseCaseImplementations:Screenshot (908).png)]] == Креирање слободни термини-администратор === Креирање еден слободен термин * Клиентски код Функцијата createSeparateAppointment испраќа барање до серверот за додавање нов термин. Со испраќање на POST барање и користење на fetch('/api/appointments/add') за да испрати барање до API-то, се испраќаат податоци на серверот.Податоците се испраќаат како JSON. Ако одговорот не е успешен (!response.ok), се повикува response.json() за да се извлече порака за грешка. Ако е успешен, return response.json(); го обработува одговорот. console.log(data.message); печати порака во конзолата. location.reload(); се праќа ново барање за страницата за да ги прикаже новите податоци. Ако се случи грешка при барањето, се печати во конзолата со console.error('Error:', error);. [[Image(wiki:UseCaseImplementations:Screenshot (918).png)]] * Контролер Методот addAppointment обработува барање за додавање нов термин. appointmentService.createAppointment(dateTimeStr); го повикува сервисниот слој за додавање на нов термин во системот. Ако нема грешки, методот враќа ResponseEntity.ok(new ApiResponse("Appointment added successfully.")), што значи дека терминот е успешно додаден. Ако се фати исклучок, се враќа ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ApiResponse("Failed to add appointment.")), означувајќи неуспешно додавање. [[Image(wiki:UseCaseImplementations:controller1.png)]] * Сервис Се креира термин Appointment appointment = new Appointment(appointmentDateTime); нов објект од класата Appointment, поставувајќи го времето на терминот и се зачувува во базата.appointmentRepository.save(appointment); го зачувува терминот во базата преку appointmentRepository. [[Image(wiki:UseCaseImplementations:service1.png)]] === Автоматско креирање на термини во одреден временски опсег * Клиентски код [[Image(wiki:UseCaseImplementations:Screenshot (921).png)]] * Контролер [[Image(wiki:UseCaseImplementations:controller2.png)]] * Сервис [[Image(wiki:UseCaseImplementations:Screenshot (923).png)]]