Changeset 3041023
- Timestamp:
- 05/02/25 23:34:33 (13 hours ago)
- Branches:
- master
- Parents:
- dd7a2b6
- Location:
- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo
- Files:
-
- 5 added
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/Local.java
rdd7a2b6 r3041023 17 17 @NoArgsConstructor 18 18 public class Local { 19 public Local(String name, String description, String address, String workingHours, List<Service> availableServices, Map<Long, Integer> ratings, List<Event> events, List<String> localPhotos, String menuPhoto, String menuLink, Contact contact, List<Reservation> reservations, List<LocalWorker> workers) {20 this.name = name;21 this.description = description;22 this.address = address;23 this.workingHours = workingHours;24 this.availableServices = availableServices;25 this.ratings = ratings;26 this.events = events;27 this.localPhotos = localPhotos;28 this.menuPhoto = menuPhoto;29 this.menuLink = menuLink;30 this.contact = contact;31 this.reservations = reservations;32 this.workers = workers;33 }34 35 public Local(String name) {36 this.name = name;37 }38 39 40 19 @Id 41 20 @GeneratedValue(strategy = GenerationType.IDENTITY) … … 80 59 private String logoUrl; 81 60 82 public double calculateLocalAverageRating() { 83 if (ratings == null || ratings.isEmpty()) { 84 return 0.0; 85 } 86 double sum = 0.0; 87 for (Integer rating : ratings.values()) { 88 sum += rating; 89 } 90 return sum / ratings.size(); 61 public Local(String name, String description, String address, String workingHours, List<Service> availableServices, Map<Long, Integer> ratings, List<Event> events, List<String> localPhotos, String menuPhoto, String menuLink, Contact contact, List<Reservation> reservations, List<LocalWorker> workers) { 62 this.name = name; 63 this.description = description; 64 this.address = address; 65 this.workingHours = workingHours; 66 this.availableServices = availableServices; 67 this.ratings = ratings; 68 this.events = events; 69 this.localPhotos = localPhotos; 70 this.menuPhoto = menuPhoto; 71 this.menuLink = menuLink; 72 this.contact = contact; 73 this.reservations = reservations; 74 this.workers = workers; 91 75 } 92 76 77 public Local(String name) { 78 this.name = name; 79 } 80 81 public double getAverageRating() { 82 if (ratings == null || ratings.isEmpty()) { 83 return 0; 84 } 85 86 return ratings.values().stream() 87 .mapToInt(Integer::intValue) 88 .average() 89 .orElse(0.0); 90 } 93 91 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/LocalManager.java
rdd7a2b6 r3041023 2 2 3 3 import jakarta.persistence.Entity; 4 import jakarta.persistence.EnumType; 5 import jakarta.persistence.Enumerated; 6 import jakarta.persistence.ManyToOne; 7 import lombok.AllArgsConstructor; 4 8 import lombok.Data; 5 9 import lombok.EqualsAndHashCode; 6 10 import lombok.NoArgsConstructor; 11 import mk.ukim.finki.it.reservengo.model.enumerations.Position; 7 12 import mk.ukim.finki.it.reservengo.model.enumerations.Role; 8 13 … … 10 15 @Entity 11 16 @NoArgsConstructor 17 @AllArgsConstructor 12 18 @Data 13 public class LocalManager extends LocalWorker { 19 public class LocalManager extends User { 20 @ManyToOne 21 private Local local; 22 23 @Enumerated(EnumType.STRING) 24 private Position position; 25 14 26 public LocalManager(String firstName, String lastName, String email, String password, String phoneNumber, Role userRole) { 15 27 super(firstName, lastName, email, password, phoneNumber, userRole); 16 28 } 17 18 29 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/LocalWorker.java
rdd7a2b6 r3041023 27 27 super(firstName, lastName, email, password, phoneNumber, userRole); 28 28 } 29 30 29 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/EmailNotFoundException.java
rdd7a2b6 r3041023 3 3 public class EmailNotFoundException extends RuntimeException { 4 4 public EmailNotFoundException(String email) { 5 super("User with email: " + email + " not found ");5 super("User with email: " + email + " not found."); 6 6 } 7 7 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/ReservationIdNotFoundException.java
rdd7a2b6 r3041023 3 3 public class ReservationIdNotFoundException extends RuntimeException { 4 4 public ReservationIdNotFoundException(Long id) { 5 super("Reservation with id: " + id + " not found ");5 super("Reservation with id: " + id + " not found."); 6 6 } 7 7 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/UserEmailAlreadyExistsException.java
rdd7a2b6 r3041023 3 3 public class UserEmailAlreadyExistsException extends RuntimeException { 4 4 public UserEmailAlreadyExistsException(String email) { 5 super("User with email: " + email + " already exists ");5 super("User with email: " + email + " already exists."); 6 6 } 7 7 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AdminServiceImpl.java
rdd7a2b6 r3041023 3 3 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDTO; 4 4 import mk.ukim.finki.it.reservengo.service.intf.AdminService; 5 import mk.ukim.finki.it.reservengo.service.intf.CustomerService; 5 6 import mk.ukim.finki.it.reservengo.service.intf.LocalService; 6 7 import org.springframework.stereotype.Service; … … 11 12 private final LocalService localService; 12 13 13 public AdminServiceImpl(LocalService localService ) {14 public AdminServiceImpl(LocalService localService, CustomerService customerService) { 14 15 this.localService = localService; 15 16 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/CustomerServiceImpl.java
rdd7a2b6 r3041023 1 1 package mk.ukim.finki.it.reservengo.service.impl; 2 2 3 import mk.ukim.finki.it.reservengo.dto.localDTO.DisplayLocalDTO; 3 4 import mk.ukim.finki.it.reservengo.model.domain.Customer; 4 5 import mk.ukim.finki.it.reservengo.model.domain.Local; 5 6 import mk.ukim.finki.it.reservengo.model.exceptions.CustomerIdNotFoundException; 7 import mk.ukim.finki.it.reservengo.model.exceptions.LocalAlreadyFavouredException; 8 import mk.ukim.finki.it.reservengo.model.exceptions.LocalAlreadyUnfavouredException; 6 9 import mk.ukim.finki.it.reservengo.model.exceptions.UserEmailAlreadyExistsException; 7 10 import mk.ukim.finki.it.reservengo.repository.CustomerRepository; … … 26 29 27 30 @Override 28 public List< Local> listFavouriteLocals(Long id) {31 public List<DisplayLocalDTO> listFavouriteLocals(Long id) { 29 32 Customer customer = customerRepository.findById(id).orElseThrow(() -> new CustomerIdNotFoundException(id)); 30 return customer.getFavouriteLocals();33 return DisplayLocalDTO.fromLocals(customer.getFavouriteLocals()); 31 34 } 32 35 … … 36 39 Local local = localService.getLocalById(localId); 37 40 38 if ( !customer.getFavouriteLocals().contains(local)) {39 customer.getFavouriteLocals().add(local);41 if (customer.getFavouriteLocals().contains(local)) { 42 throw new LocalAlreadyFavouredException(localId); 40 43 } 41 44 45 customer.getFavouriteLocals().add(local); 42 46 customerRepository.save(customer); 43 47 } … … 48 52 Local local = localService.getLocalById(localId); 49 53 54 if (!customer.getFavouriteLocals().contains(local)) { 55 throw new LocalAlreadyUnfavouredException(localId); 56 } 57 50 58 customer.getFavouriteLocals().remove(local); 51 52 59 customerRepository.save(customer); 53 60 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalServiceImpl.java
rdd7a2b6 r3041023 39 39 localRepository.delete(local); 40 40 } 41 42 43 41 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/ReservationServiceImpl.java
rdd7a2b6 r3041023 1 1 package mk.ukim.finki.it.reservengo.service.impl; 2 2 3 import mk.ukim.finki.it.reservengo.model.domain.Reservation;4 import mk.ukim.finki.it.reservengo.model.exceptions.ReservationIdNotFoundException;5 import mk.ukim.finki.it.reservengo.repository.ReservationRepository;6 3 import mk.ukim.finki.it.reservengo.service.intf.ReservationService; 7 4 import org.springframework.stereotype.Service; 8 9 import java.util.List;10 5 11 6 12 7 @Service 13 8 public class ReservationServiceImpl implements ReservationService { 14 15 private final ReservationRepository reservationRepository;16 17 public ReservationServiceImpl(ReservationRepository reservationRepository) {18 this.reservationRepository = reservationRepository;19 }20 21 @Override22 public Reservation getReservationById(Long id) {23 return this.reservationRepository.findById(id).orElseThrow(() -> new ReservationIdNotFoundException(id));24 }25 26 @Override27 public List<Reservation> getCustomerReservations(Long id) {28 return this.reservationRepository.findAllByCustomerId(id);29 }30 31 9 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/UserServiceImpl.java
rdd7a2b6 r3041023 59 59 60 60 @Override 61 public StringchangePassword(Long userId, EditUserPasswordDTO editUserPasswordDTO) {61 public void changePassword(Long userId, EditUserPasswordDTO editUserPasswordDTO) { 62 62 User user = userRepository.findById(userId).orElseThrow(() -> new UserIdNotFoundException(userId)); 63 63 … … 68 68 user.setPassword(passwordEncoder.encode(editUserPasswordDTO.newPassword())); 69 69 userRepository.save(user); 70 71 return "Password updated successfully!";72 70 } 73 71 -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/CustomerService.java
rdd7a2b6 r3041023 1 1 package mk.ukim.finki.it.reservengo.service.intf; 2 2 3 import mk.ukim.finki.it.reservengo.dto.localDTO.DisplayLocalDTO; 3 4 import mk.ukim.finki.it.reservengo.model.domain.Customer; 4 5 import mk.ukim.finki.it.reservengo.model.domain.Local; … … 8 9 public interface CustomerService { 9 10 10 List< Local> listFavouriteLocals(Long id);11 List<DisplayLocalDTO> listFavouriteLocals(Long id); 11 12 12 13 void addFavouriteLocal(Long userId, Long localId); -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/ReservationService.java
rdd7a2b6 r3041023 1 1 package mk.ukim.finki.it.reservengo.service.intf; 2 2 3 import mk.ukim.finki.it.reservengo.model.domain.Reservation;4 5 import java.util.List;6 7 3 public interface ReservationService { 8 Reservation getReservationById(Long id);9 List<Reservation> getCustomerReservations(Long id);10 4 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/UserService.java
rdd7a2b6 r3041023 15 15 DisplayUserEmailDTO changeEmail(Long userId, EditUserEmailDTO editUserEmailDTO); 16 16 17 StringchangePassword(Long userId, EditUserPasswordDTO editUserPasswordDTO);17 void changePassword(Long userId, EditUserPasswordDTO editUserPasswordDTO); 18 18 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/advice/GlobalExceptionHandler.java
rdd7a2b6 r3041023 61 61 return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage()); 62 62 } 63 64 @ExceptionHandler(LocalAlreadyFavouredException.class) 65 public ResponseEntity<String> handleLocalAlreadyFavoured(LocalAlreadyFavouredException ex) { 66 return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage()); 67 } 68 69 @ExceptionHandler(LocalAlreadyUnfavouredException.class) 70 public ResponseEntity<String> handleLocalAlreadyUnfavoured(LocalAlreadyUnfavouredException ex) { 71 return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage()); 72 } 63 73 } 64 74 -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AdminController.java
rdd7a2b6 r3041023 20 20 21 21 @PostMapping("/add") 22 public ResponseEntity< ?> addLocal(@RequestBody CreateLocalDTO localDTO) {22 public ResponseEntity<Void> addLocal(@RequestBody CreateLocalDTO localDTO) { 23 23 adminService.addLocal(localDTO); 24 24 return new ResponseEntity<>(HttpStatus.OK); … … 26 26 27 27 @DeleteMapping("/delete/{id}") 28 public ResponseEntity< ?> deleteLocal(@PathVariable Long id) {28 public ResponseEntity<Void> deleteLocal(@PathVariable Long id) { 29 29 adminService.deleteLocal(id); 30 30 return new ResponseEntity<>(HttpStatus.OK); -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/CustomerController.java
rdd7a2b6 r3041023 1 1 package mk.ukim.finki.it.reservengo.web.controller; 2 2 3 import mk.ukim.finki.it.reservengo.model.domain.Local; 4 import mk.ukim.finki.it.reservengo.model.domain.Reservation; 3 import mk.ukim.finki.it.reservengo.dto.localDTO.DisplayLocalDTO; 5 4 import mk.ukim.finki.it.reservengo.model.domain.User; 6 5 import mk.ukim.finki.it.reservengo.service.intf.CustomerService; 7 import mk.ukim.finki.it.reservengo.service.intf.ReservationService;8 6 import org.springframework.http.HttpStatus; 9 7 import org.springframework.http.ResponseEntity; … … 20 18 21 19 private final CustomerService customerService; 22 private final ReservationService reservationService;23 20 24 public CustomerController(CustomerService customerService , ReservationService reservationService) {21 public CustomerController(CustomerService customerService) { 25 22 this.customerService = customerService; 26 this.reservationService = reservationService;27 }28 29 @GetMapping("/reservations")30 public ResponseEntity<?> getCustomerReservations(@AuthenticationPrincipal User user) {31 List<Reservation> customerReservations = reservationService.getCustomerReservations(user.getId());32 return new ResponseEntity<>(customerReservations, HttpStatus.OK);33 23 } 34 24 35 25 @GetMapping("/favourite-locals") 36 public ResponseEntity<?> listFavouriteLocals(@AuthenticationPrincipal User user) { 37 List<Local> favouriteLocals = customerService.listFavouriteLocals(user.getId()); 38 return new ResponseEntity<>(favouriteLocals, HttpStatus.OK); 26 public ResponseEntity<List<DisplayLocalDTO>> listFavouriteLocals(@AuthenticationPrincipal User user) { 27 return new ResponseEntity<>(customerService.listFavouriteLocals(user.getId()), HttpStatus.OK); 39 28 } 40 29 41 30 @PostMapping("/favourite-locals/add/{id}") 42 public ResponseEntity< ?> addFavouriteLocal(@AuthenticationPrincipal User user, @PathVariable Long id) {31 public ResponseEntity<Void> addFavouriteLocal(@AuthenticationPrincipal User user, @PathVariable Long id) { 43 32 customerService.addFavouriteLocal(user.getId(), id); 44 33 return new ResponseEntity<>(HttpStatus.OK); … … 46 35 47 36 @PostMapping("/favourite-locals/remove/{id}") 48 public ResponseEntity< ?> removeFavouriteLocal(@AuthenticationPrincipal User user, @PathVariable Long id) {37 public ResponseEntity<Void> removeFavouriteLocal(@AuthenticationPrincipal User user, @PathVariable Long id) { 49 38 customerService.removeFavouriteLocal(user.getId(), id); 50 39 return new ResponseEntity<>(HttpStatus.OK); -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalController.java
rdd7a2b6 r3041023 1 1 package mk.ukim.finki.it.reservengo.web.controller; 2 2 3 import mk.ukim.finki.it.reservengo.dto.localDTO.DisplayLocalDTO; 4 import mk.ukim.finki.it.reservengo.dto.localDTO.DisplayLocalDetailsDTO; 3 5 import mk.ukim.finki.it.reservengo.model.domain.Local; 4 6 import mk.ukim.finki.it.reservengo.service.intf.LocalService; … … 6 8 import org.springframework.http.ResponseEntity; 7 9 import org.springframework.web.bind.annotation.*; 10 11 import java.util.List; 8 12 9 13 @RestController … … 18 22 19 23 @GetMapping 20 public ResponseEntity<?> getLocals() { 21 return new ResponseEntity<>(localService.listAll(), HttpStatus.OK); 24 public ResponseEntity<List<DisplayLocalDTO>> getLocals() { 25 List<DisplayLocalDTO> displayLocalDTOList = DisplayLocalDTO.fromLocals(localService.listAll()); 26 return new ResponseEntity<>(displayLocalDTOList, HttpStatus.OK); 22 27 } 23 28 24 29 @GetMapping("/{id}") 25 public ResponseEntity< ?> getLocalInformation(@PathVariable Long id) {26 Local local = localService.getLocalById(id);30 public ResponseEntity<DisplayLocalDetailsDTO> getLocalDetails(@PathVariable Long id) { 31 DisplayLocalDetailsDTO local = DisplayLocalDetailsDTO.from(localService.getLocalById(id)); 27 32 return new ResponseEntity<>(local, HttpStatus.OK); 28 33 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/ReservationController.java
rdd7a2b6 r3041023 1 1 package mk.ukim.finki.it.reservengo.web.controller; 2 2 3 import mk.ukim.finki.it.reservengo.model.domain.Reservation; 4 import mk.ukim.finki.it.reservengo.model.enumerations.ReservationStatus; 5 import mk.ukim.finki.it.reservengo.service.intf.ReservationService; 6 import org.springframework.http.ResponseEntity; 7 import org.springframework.web.bind.annotation.*; 3 import org.springframework.web.bind.annotation.RequestMapping; 4 import org.springframework.web.bind.annotation.RestController; 8 5 9 6 @RestController 10 7 @RequestMapping("/api/reservations") 11 8 public class ReservationController { 12 private final ReservationService reservationService;13 14 public ReservationController(ReservationService reservationService) {15 this.reservationService = reservationService;16 }17 18 //TODO RE-EVALUATE RESERVATIONS ARCHITECTURE19 20 @GetMapping("/{id}")21 public ResponseEntity<?> getReservationInformation(@PathVariable Long id) {22 Reservation reservation = reservationService.getReservationById(id);23 return ResponseEntity.ok(reservation);24 }25 26 @PostMapping("/{id}/status")27 public ResponseEntity<?> updateReservationStatus(@PathVariable Long id, @RequestParam ReservationStatus status) {28 Reservation reservation = reservationService.getReservationById(id);29 reservation.setStatus(status);30 return ResponseEntity.ok(reservation);31 }32 33 9 } -
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/UserController.java
rdd7a2b6 r3041023 37 37 38 38 @PatchMapping("/change-password") 39 public ResponseEntity<String> changePassword(@AuthenticationPrincipal User user, @RequestBody EditUserPasswordDTO editUserPasswordDTO) { 40 return new ResponseEntity<>(userService.changePassword(user.getId(), editUserPasswordDTO), HttpStatus.OK); 39 public ResponseEntity<Void> changePassword(@AuthenticationPrincipal User user, @RequestBody EditUserPasswordDTO editUserPasswordDTO) { 40 userService.changePassword(user.getId(), editUserPasswordDTO); 41 return new ResponseEntity<>(HttpStatus.OK); 41 42 } 42 43 }
Note:
See TracChangeset
for help on using the changeset viewer.