Changeset 8ca35dc for src/main/java/com/example/rezevirajmasa/demo/web
- Timestamp:
- 01/19/25 23:18:37 (4 months ago)
- Branches:
- main
- Children:
- f5b256e
- Parents:
- db39d9e
- Location:
- src/main/java/com/example/rezevirajmasa/demo/web
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/main/java/com/example/rezevirajmasa/demo/web/controller/ReservationController.java
rdb39d9e r8ca35dc 1 1 package com.example.rezevirajmasa.demo.web.controller; 2 2 3 import com.example.rezevirajmasa.demo.dto.SignUpDto; 4 import com.example.rezevirajmasa.demo.dto.UserDto; 5 import com.example.rezevirajmasa.demo.mappers.UserMapper; 3 6 import com.example.rezevirajmasa.demo.model.*; 4 7 import com.example.rezevirajmasa.demo.model.exceptions.ExpiredReservationException; … … 19 22 public class ReservationController { 20 23 private final ReservationService reservationService; 21 private final CustomerService customerService;24 private final UserService userService; 22 25 private final TableService tableService; 23 26 private final ReservationHistoryService reservationHistoryService; 24 27 25 public ReservationController(ReservationService reservationService, CustomerService customerService, TableService tableService, ReservationHistoryService reservationHistoryService) { 28 private final UserMapper userMapper; 29 30 public ReservationController(ReservationService reservationService, UserService userService, TableService tableService, ReservationHistoryService reservationHistoryService, UserMapper userMapper) { 26 31 this.reservationService = reservationService; 27 this. customerService = customerService;32 this.userService = userService; 28 33 this.tableService = tableService; 29 34 this.reservationHistoryService = reservationHistoryService; 35 this.userMapper = userMapper; 30 36 } 31 37 32 38 @GetMapping("/reservations") 33 39 public String showReservations(Model model, Authentication authentication) { 34 Customer customer = customerService.findByEmail(authentication.getName()); 35 List<Reservation> reservationList; 36 if(customer.getRole().equals(Role.ROLE_ADMIN)) { 37 reservationList = reservationService.listAll(); 38 } else { 39 reservationList = reservationService.findReservationByCustomer(customer); 40 } 40 UserDto userDto = userService.findByEmail(authentication.getName()); 41 42 SignUpDto signUpDto = userMapper.toSignUpDto(userDto); 43 44 User user = userMapper.signUpToUser(signUpDto); 45 46 List<Reservation> reservationList = reservationService.findReservationByUser(user); 47 41 48 model.addAttribute("bodyContent", "reservationList"); 42 49 model.addAttribute("reservations", reservationList); 43 50 return "index"; 44 51 } 52 45 53 46 54 @GetMapping("/reservations/edit/{reservationId}") … … 62 70 Restaurant restaurant = table.getRestaurant(); 63 71 64 Customer customer = customerService.findByEmail(authentication.getName()); 72 UserDto userDto = userService.findByEmail(authentication.getName()); 73 74 SignUpDto signUpDto = userMapper.toSignUpDto(userDto); 75 76 User user = userMapper.signUpToUser(signUpDto); 65 77 66 78 if(!table.isAvailable(reservationDateTime)) { … … 68 80 } 69 81 tableService.deleteTimeSlotsForReservation(tableNumber, reservationDateTime); 70 reservationService.makeReservation( customer, table, restaurant, LocalDateTime.now(), reservationDateTime, partySize, specialRequests);82 reservationService.makeReservation(user, table, restaurant, LocalDateTime.now(), reservationDateTime, partySize, specialRequests); 71 83 return "redirect:/reservations"; 72 84 } -
src/main/java/com/example/rezevirajmasa/demo/web/controller/ReservationHistoryController.java
rdb39d9e r8ca35dc 1 1 package com.example.rezevirajmasa.demo.web.controller; 2 2 3 import com.example.rezevirajmasa.demo.dto.SignUpDto; 4 import com.example.rezevirajmasa.demo.dto.UserDto; 5 import com.example.rezevirajmasa.demo.mappers.UserMapper; 3 6 import com.example.rezevirajmasa.demo.model.Customer; 4 7 import com.example.rezevirajmasa.demo.model.Restaurant; 5 8 import com.example.rezevirajmasa.demo.model.Role; 9 import com.example.rezevirajmasa.demo.model.User; 6 10 import com.example.rezevirajmasa.demo.service.CustomerService; 7 11 import com.example.rezevirajmasa.demo.service.ReservationHistoryService; 12 import com.example.rezevirajmasa.demo.service.UserService; 8 13 import org.springframework.security.core.Authentication; 9 14 import org.springframework.stereotype.Controller; … … 18 23 public class ReservationHistoryController { 19 24 private final ReservationHistoryService reservationHistoryService; 20 private final CustomerService customerService; 25 private final UserService userService; 26 private final UserMapper userMapper; 21 27 22 public ReservationHistoryController(ReservationHistoryService reservationHistoryService, CustomerService customerService) {28 public ReservationHistoryController(ReservationHistoryService reservationHistoryService, UserService userService, UserMapper userMapper) { 23 29 this.reservationHistoryService = reservationHistoryService; 24 this.customerService = customerService; 30 this.userService = userService; 31 this.userMapper = userMapper; 25 32 } 26 33 … … 28 35 public String showPastReservations(Authentication authentication, Model model) { 29 36 List<Restaurant.ReservationHistory> reservationHistoryList; 30 Customer customer = customerService.findByEmail(authentication.getName()); 31 if(customer.getRole().equals(Role.ROLE_ADMIN)) { 32 reservationHistoryList = reservationHistoryService.findAll(); 33 } else { 34 reservationHistoryList = reservationHistoryService.findByCustomer(customer); 35 } 37 UserDto userDto = userService.findByEmail(authentication.getName()); 38 39 SignUpDto signUpDto = userMapper.toSignUpDto(userDto); 40 41 User user = userMapper.signUpToUser(signUpDto); 42 43 reservationHistoryList = reservationHistoryService.findByUser(user); 44 // if(customer.getRole().equals(Role.ROLE_ADMIN)) { 45 // reservationHistoryList = reservationHistoryService.findAll(); 46 // } else { 47 // reservationHistoryList = reservationHistoryService.findByUser(User user); 48 // } 36 49 model.addAttribute("historyReservations", reservationHistoryList); 37 50 model.addAttribute("bodyContent", "pastReservations"); -
src/main/java/com/example/rezevirajmasa/demo/web/filters/JwtAuthFilter.java
rdb39d9e r8ca35dc 2 2 3 3 import com.example.rezevirajmasa.demo.config.UserAuthProvider; 4 import io.jsonwebtoken.ExpiredJwtException; 4 5 import jakarta.servlet.FilterChain; 5 6 import jakarta.servlet.ServletException; … … 7 8 import jakarta.servlet.http.HttpServletResponse; 8 9 import lombok.RequiredArgsConstructor; 10 import org.springframework.beans.factory.annotation.Autowired; 9 11 import org.springframework.http.HttpHeaders; 12 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; 10 13 import org.springframework.security.core.context.SecurityContextHolder; 11 14 import org.springframework.web.filter.OncePerRequestFilter; … … 17 20 18 21 private final UserAuthProvider userAuthProvider; 22 19 23 @Override 20 24 protected void doFilterInternal( … … 24 28 String header = request.getHeader(HttpHeaders.AUTHORIZATION); 25 29 30 String username = null; 31 String jwt = null; 32 26 33 if(header != null) { 34 jwt = header.substring(7); 27 35 String[] elements = header.split(" "); 28 36 29 37 if(elements.length == 2 && "Bearer".equals(elements[0])) { 30 38 try { 39 username = userAuthProvider.extractUsername(jwt); // logikata vidi ja 31 40 SecurityContextHolder.getContext().setAuthentication( 32 41 userAuthProvider.validateToken(elements[1]) 33 42 ); 43 if (username != null) { 44 System.out.println("Authenticated user: " + username); // Debug log 45 SecurityContextHolder.getContext().setAuthentication( 46 userAuthProvider.validateToken(jwt) // Ensure token validation works properly 47 ); 48 } 49 } catch (ExpiredJwtException e) { 50 String isRefreshToken = request.getHeader("isRefreshToken"); 51 String requestURL = request.getRequestURL().toString(); 52 if (isRefreshToken != null && isRefreshToken.equals("true") && requestURL.contains("refresh-token")) { 53 allowForRefreshToken(e, request); 54 } else 55 request.setAttribute("exception", e); 56 34 57 } catch (RuntimeException e) { 35 58 SecurityContextHolder.clearContext(); … … 40 63 filterChain.doFilter(request, response); 41 64 } 65 66 private void allowForRefreshToken(ExpiredJwtException ex, HttpServletRequest request) { 67 UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken( 68 null, null, null); 69 SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken); 70 request.setAttribute("claims", ex.getClaims()); 71 } 42 72 } -
src/main/java/com/example/rezevirajmasa/demo/web/rest/AuthController.java
rdb39d9e r8ca35dc 14 14 import org.springframework.http.ResponseEntity; 15 15 import org.springframework.security.authentication.AuthenticationManager; 16 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; 17 import org.springframework.security.core.Authentication; 16 18 import org.springframework.security.crypto.password.PasswordEncoder; 17 19 import org.springframework.web.bind.annotation.CrossOrigin; … … 30 32 public ResponseEntity<UserDto> login(@RequestBody CredentialsDto credentialsDto) { 31 33 UserDto user = userService.login(credentialsDto); 32 user.setToken(userAuthProvider.createToken(user.getEmail())); 34 String token = userAuthProvider.createToken(user.getEmail()); 35 user.setToken(token); 36 33 37 return ResponseEntity.ok(user); 34 38 } … … 38 42 UserDto user = userService.register(signUpDto); 39 43 user.setToken(userAuthProvider.createToken(user.getEmail())); 40 return ResponseEntity.created(URI.create("/users/" + user.getId())) 41 .body(user); 44 return ResponseEntity.created(URI.create("/users/" + user.getId())).body(user); 42 45 } 43 46 } -
src/main/java/com/example/rezevirajmasa/demo/web/rest/testController.java
rdb39d9e r8ca35dc 2 2 3 3 import com.example.rezevirajmasa.demo.dto.CustomerDTO; 4 import com.example.rezevirajmasa.demo.dto.UserDto; 5 import com.example.rezevirajmasa.demo.mappers.UserMapper; 4 6 import com.example.rezevirajmasa.demo.model.*; 5 import com.example.rezevirajmasa.demo.service.CustomerService; 6 import com.example.rezevirajmasa.demo.service.ReservationService; 7 import com.example.rezevirajmasa.demo.service.RestaurantService; 8 import com.example.rezevirajmasa.demo.service.TableService; 7 import com.example.rezevirajmasa.demo.service.*; 8 import com.example.rezevirajmasa.demo.service.impl.TokenService; 9 import jakarta.servlet.http.HttpServletRequest; 9 10 import jdk.jfr.consumer.RecordingStream; 10 11 import org.apache.coyote.Response; 12 import org.apache.http.protocol.HTTP; 11 13 import org.springframework.format.annotation.DateTimeFormat; 12 14 import org.springframework.http.HttpStatus; 13 15 import org.springframework.http.ResponseEntity; 16 import org.springframework.security.core.Authentication; 17 import org.springframework.security.core.annotation.AuthenticationPrincipal; 18 import org.springframework.security.core.context.SecurityContextHolder; 19 import org.springframework.security.core.parameters.P; 20 import org.springframework.security.core.userdetails.UserDetails; 14 21 import org.springframework.web.bind.annotation.*; 15 22 23 import java.nio.file.attribute.UserPrincipal; 24 import java.security.Principal; 16 25 import java.time.LocalDateTime; 17 26 import java.time.format.DateTimeFormatter; … … 26 35 private final RestaurantService restaurantService; 27 36 private final CustomerService customerService; 37 private final UserService userService; 28 38 private final ReservationService reservationService; 39 private final ReservationHistoryService reservationHistoryService; 29 40 private final TableService tableService; 30 31 public testController(RestaurantService restaurantService, CustomerService customerService, ReservationService reservationService, TableService tableService) { 41 private final UserMapper userMapper; 42 private final TokenService tokenService; 43 public testController(RestaurantService restaurantService, CustomerService customerService, UserService userService, ReservationService reservationService, ReservationHistoryService reservationHistoryService, TableService tableService, UserMapper userMapper, TokenService tokenService) { 32 44 this.restaurantService = restaurantService; 33 45 this.customerService = customerService; 46 this.userService = userService; 34 47 this.reservationService = reservationService; 48 this.reservationHistoryService = reservationHistoryService; 35 49 this.tableService = tableService; 50 this.userMapper = userMapper; 51 this.tokenService = tokenService; 36 52 } 37 53 … … 114 130 ); 115 131 } 132 @GetMapping("/api/user") 133 public ResponseEntity<?> getCurrentUser() { 134 Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 135 136 if (authentication == null || !authentication.isAuthenticated() || authentication.getPrincipal().equals("anonymousUser")) { 137 return new ResponseEntity<>("User is not authenticated", HttpStatus.UNAUTHORIZED); 138 } 139 140 Customer customer = (Customer) authentication.getPrincipal(); 141 return new ResponseEntity<>(customer, HttpStatus.OK); 142 } 143 116 144 117 145 @PostMapping("/api/customers") … … 137 165 // Reservation Calls 138 166 139 @GetMapping("/api/reservations") 140 public ResponseEntity<List<Reservation>> getReservations() { 141 return new ResponseEntity<List<Reservation>>(reservationService.listAll(), HttpStatus.OK); 142 } 143 144 @PostMapping("/api/reservations") 145 public ResponseEntity<Reservation> createReservation(@RequestBody Reservation reservation) { 146 reservation.setReservationDateTime(LocalDateTime.now()); 147 Reservation savedReservation = reservationService.makeReservationRest(reservation); 167 @GetMapping("/api/reservations/by/{email}") 168 public ResponseEntity<List<Reservation>> getReservations(@PathVariable String email) { 169 User user = userService.findByMail(email); 170 return new ResponseEntity<List<Reservation>>(reservationService.findReservationByUser(user), HttpStatus.OK); 171 } 172 173 @PostMapping("/api/reservations/{email}") 174 public ResponseEntity<Reservation> createReservation(@RequestBody Reservation reservation, @PathVariable String email) { 175 User user = userService.findByMail(email); 176 Reservation savedReservation = reservationService.makeReservationRest(reservation, user); 177 148 178 return new ResponseEntity<>(savedReservation, HttpStatus.CREATED); 149 179 } 180 150 181 151 182 @GetMapping("/api/reservations/{reservationId}") … … 159 190 } 160 191 161 @PostMapping("/api/reservations/{reservationId} ")192 @PostMapping("/api/reservations/{reservationId}/{email}") 162 193 public ResponseEntity<Reservation> editReservation(@PathVariable Long reservationId, 163 @RequestBody Reservation reservation) { 194 @RequestBody Reservation reservation, 195 @PathVariable String email) { 196 User user = userService.findByMail(email); 197 164 198 if (!reservation.getReservationID().equals(reservationId)) { 165 199 return ResponseEntity.badRequest().build(); 166 200 } 167 201 168 Reservation savedReservation = reservationService.findById(reservationId); 169 if(!reservation.getCheckInTime().equals(savedReservation.getCheckInTime())) { 170 tableService.canceledTimeSlots(savedReservation.getTable().getId(), savedReservation.getCheckInTime()); 171 } 172 173 savedReservation.setReservationDateTime(LocalDateTime.now()); 174 savedReservation.setCheckInTime(reservation.getCheckInTime()); 175 savedReservation.setCheckOutTime(reservation.getCheckInTime().plusHours(2)); 176 savedReservation.setPartySize(reservation.getPartySize()); 177 savedReservation.setSpecialRequests(reservation.getSpecialRequests()); 178 tableService.deleteTimeSlotsForReservation(reservation.getTable().getId(), reservation.getCheckInTime()); 179 180 //moze da se vovede sistem za ako od 4ca doagjaat samo 2ca da se najde pomala masa po moznost ako ima u toj moment 181 //listaj samo slotovi za taa masa vo toj moment ili da ima da odbere od novo ama taka bolje nova rezevacij 182 183 Reservation updatedReservation = reservationService.makeReservationRest(savedReservation); 184 System.out.println("Saved reservation time: " + savedReservation.getCheckInTime()); 202 // Fetch existing reservation 203 Reservation existingReservation = reservationService.findById(reservationId); 204 if (existingReservation == null) { 205 return ResponseEntity.notFound().build(); 206 } 207 208 if (!reservation.getCheckInTime().equals(existingReservation.getCheckInTime())) { 209 tableService.canceledTimeSlots(existingReservation.getTable().getId(), existingReservation.getCheckInTime()); 210 211 tableService.deleteTimeSlotsForReservation(reservation.getTable().getId(), reservation.getCheckInTime()); 212 } 213 214 existingReservation.setReservationDateTime(LocalDateTime.now()); 215 existingReservation.setCheckInTime(reservation.getCheckInTime()); 216 existingReservation.setCheckOutTime(reservation.getCheckInTime().plusHours(2)); 217 existingReservation.setPartySize(reservation.getPartySize()); 218 existingReservation.setSpecialRequests(reservation.getSpecialRequests()); 219 220 Reservation updatedReservation = reservationService.makeReservationRest(existingReservation, user); 221 222 System.out.println("Updated reservation time: " + updatedReservation.getCheckInTime()); 185 223 return ResponseEntity.ok(updatedReservation); 186 224 } 225 187 226 188 227 @DeleteMapping("/api/reservations/delete/{reservationId}") … … 196 235 } 197 236 237 @GetMapping("/api/reservations/past/{email}") 238 public ResponseEntity<List<Restaurant.ReservationHistory>> pastReservations(@PathVariable String email) { 239 User user = userService.findByMail(email); 240 return null; 241 } 242 198 243 // TableEntity Calls 199 244 … … 203 248 } 204 249 250 // past reservation calls 251 @GetMapping("/api/past-reservations/{email}") 252 public ResponseEntity<List<Restaurant.ReservationHistory>> findPastReservationsByUser(@PathVariable String email) { 253 User user = userService.findByMail(email); 254 List<Restaurant.ReservationHistory> reservations = reservationHistoryService.findByUser(user); 255 return new ResponseEntity<>(reservations, HttpStatus.OK); 256 } 257 205 258 }
Note:
See TracChangeset
for help on using the changeset viewer.