source: src/main/java/com/example/salonbella/service/reservation/ReservationService.java@ 4d7e387

Last change on this file since 4d7e387 was 4d7e387, checked in by makyjovanovsky <mjovanovski04@…>, 18 months ago

commit 1

  • Property mode set to 100644
File size: 7.2 KB
Line 
1package com.example.salonbella.service.reservation;
2
3import com.example.salonbella.entity.ReservationEntity;
4import com.example.salonbella.entity.UserEntity;
5import com.example.salonbella.repository.ReservationRepository;
6import com.example.salonbella.repository.UserRepository;
7import org.springframework.beans.factory.annotation.Autowired;
8import org.springframework.security.core.Authentication;
9import org.springframework.security.core.context.SecurityContextHolder;
10import org.springframework.stereotype.Service;
11
12import javax.transaction.Transactional;
13import java.time.LocalDate;
14import java.time.LocalDateTime;
15import java.time.LocalTime;
16import java.util.ArrayList;
17import java.util.List;
18import java.util.Optional;
19
20@Service
21public class ReservationService {
22
23 private final ReservationRepository reservationRepository;
24 private final UserRepository userRepository;
25
26 @Autowired
27 public ReservationService(ReservationRepository reservationRepository, UserRepository userRepository) {
28 this.reservationRepository = reservationRepository;
29 this.userRepository = userRepository;
30 }
31
32 // get all reservations for specified date and type
33 private List<ReservationEntity> getReservations(String date, String type) {
34 LocalDateTime start = stringToDateAndTime(date, "00:00");
35 LocalDateTime end = stringToDateAndTime(date, "23:59");
36 return reservationRepository.findByTypeAndDateTimeBetween(type, start, end);
37 }
38
39 // make reservation
40 public void makeReservation(String date, String time, String type) {
41 Authentication auth = SecurityContextHolder.getContext().getAuthentication();
42 String username = auth.getName();
43 UserEntity user = userRepository.findByUsername(username);
44 ReservationEntity reservationEntity = new ReservationEntity();
45 reservationEntity.setDateTime(stringToDateAndTime(date, time));
46 reservationEntity.setType(type);
47 reservationEntity.setUser(user);
48 reservationRepository.save(reservationEntity);
49 }
50
51 // convert string to localdatetime
52 private LocalDateTime stringToDateAndTime(String date, String time) {
53 int year = Integer.parseInt(date.split("-")[0]);
54 int month = Integer.parseInt(date.split("-")[1]);
55 int day = Integer.parseInt(date.split("-")[2]);
56 int hour = Integer.parseInt(time.split(":")[0]);
57 int minutes = Integer.parseInt(time.split(":")[1]);
58 LocalDate tempDate = LocalDate.of(year, month, day);
59 LocalTime tempTime = LocalTime.of(hour, minutes);
60 return LocalDateTime.of(tempDate, tempTime);
61 }
62
63 // get free reservations
64 public List<LocalTime> getFreeReservations(String date, String type) {
65
66 List<ReservationEntity> reservations = getReservations(date, type);
67 List<LocalTime> freeReservations = getWorkingHours();
68 for (ReservationEntity r : reservations) {
69 LocalTime temp = r.getDateTime().toLocalTime();
70 for (LocalTime l : freeReservations) {
71 if (temp.equals(l)) {
72 freeReservations.remove(l);
73 break;
74 }
75 }
76 }
77 return freeReservations;
78 }
79
80 // get all reservations for specified date and type
81 public List<ReservationResponse> getScheduledReservations(String date, String type) {
82 List<ReservationEntity> reservations = getReservations(date, type);
83 List<ReservationResponse> result = new ArrayList<>();
84 for (ReservationEntity r : reservations) {
85 ReservationResponse reservationResponse = new ReservationResponse(r.getId(), r.getDateTime(), r.getType(), r.isValid());
86 reservationResponse.setName(r.getUser().getName());
87 reservationResponse.setSurname(r.getUser().getSurname());
88 result.add(reservationResponse);
89 }
90 return result;
91 }
92
93 // get all user reservations, return another class for better security
94 public List<ReservationResponse> getUserReservations() {
95 UserEntity user = getUser();
96 List<ReservationEntity> reservationEntities = reservationRepository.findAllByUser(user);
97 List<ReservationResponse> result = new ArrayList<>();
98 for (ReservationEntity r : reservationEntities) {
99 result.add(new ReservationResponse(r.getId(), r.getDateTime(), r.getType(), r.isValid()));
100 }
101 return result;
102 }
103
104
105 // get current user
106 public UserEntity getUser() {
107 Authentication auth = SecurityContextHolder.getContext().getAuthentication();
108 String username = auth.getName();
109 UserEntity user = userRepository.findByUsername(username);
110 return user;
111 }
112
113 // cancel reservation - user
114 @Transactional
115 public void cancelReservation(Long id) {
116 Optional<ReservationEntity> reservationEntity = reservationRepository.findById(id);
117 if (reservationEntity.isPresent()) {
118 if (getUser().getId().equals(reservationEntity.get().getUser().getId())) {
119 reservationRepository.delete(reservationEntity.get());
120 }
121 }
122 }
123
124 // cancel reservation - user
125 @Transactional
126 public void cancelReservationAdmin(Long id) {
127 Optional<ReservationEntity> reservationEntity = reservationRepository.findById(id);
128 reservationEntity.ifPresent(reservationRepository::delete);
129 }
130
131 // block reservation
132
133 public void blockReservation(String date, String time, String type) {
134 Optional<ReservationEntity> reservationEntity = Optional.ofNullable(reservationRepository.findReservationEntityByDateTimeAndType(stringToDateAndTime(date, time), type));
135 if (reservationEntity.isPresent()) {
136 reservationEntity.get().setValid(false);
137 reservationRepository.save(reservationEntity.get());
138 } else {
139 ReservationEntity reservation = new ReservationEntity();
140 reservation.setDateTime(stringToDateAndTime(date, time));
141 reservation.setType(type);
142 reservation.setValid(false);
143 reservation.setUser(getUser());
144 reservationRepository.save(reservation);
145 }
146 }
147
148 // get blocked reservations
149 public List<ReservationResponse> getBlockedReservations() {
150 List<ReservationEntity> reservationEntities = reservationRepository.findAllByValid(false);
151 List<ReservationResponse> result = new ArrayList<>();
152 for (ReservationEntity r : reservationEntities) {
153 result.add(new ReservationResponse(r.getId(), r.getDateTime(), r.getType(), r.isValid()));
154 }
155 return result;
156 }
157
158 // unblock reservation
159 @Transactional
160 public void unblockReservation(Long id) {
161 Optional<ReservationEntity> reservationEntity = reservationRepository.findById(id);
162 if (reservationEntity.isPresent()) {
163 if (reservationEntity.get().getUser().getName().equals("admin")) {
164 reservationRepository.delete(reservationEntity.get());
165 } else {
166 reservationEntity.get().setValid(true);
167 }
168 }
169 }
170
171 // get working hours for salon
172 public List<LocalTime> getWorkingHours() {
173 List<LocalTime> temp = new ArrayList<>();
174 for (int i = 9; i <= 21; i++) {
175 temp.add(LocalTime.of(i, 0));
176 }
177 return temp;
178 }
179
180
181}
Note: See TracBrowser for help on using the repository browser.