- Timestamp:
- 01/19/25 23:18:37 (4 months ago)
- Branches:
- main
- Children:
- f5b256e
- Parents:
- db39d9e
- Location:
- src/main
- Files:
-
- 2 added
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
src/main/java/com/example/rezevirajmasa/demo/bootstrap/ReservationInitializer.java
rdb39d9e r8ca35dc 1 package com.example.rezevirajmasa.demo.bootstrap;2 3 import com.example.rezevirajmasa.demo.model.Reservation;4 import com.example.rezevirajmasa.demo.model.Restaurant;5 import com.example.rezevirajmasa.demo.service.ReservationHistoryService;6 import com.example.rezevirajmasa.demo.service.ReservationService;7 import org.springframework.stereotype.Component;8 9 import jakarta.annotation.PostConstruct;10 import java.time.LocalDateTime;11 import java.util.List;12 import java.util.stream.Collectors;13 14 @Component15 public class ReservationInitializer {16 private final ReservationHistoryService reservationHistoryService;17 private final ReservationService reservationService;18 19 public ReservationInitializer(ReservationHistoryService reservationHistoryService, ReservationService reservationService) {20 this.reservationHistoryService = reservationHistoryService;21 this.reservationService = reservationService;22 }23 24 @PostConstruct25 public void initializePastReservations() {26 LocalDateTime currentTime = LocalDateTime.now();27 List<Reservation> reservationsToMove = reservationService.findReservationsToMove(currentTime);28 29 List<Restaurant.ReservationHistory> reservationHistories = reservationsToMove.stream()30 .map(reservation -> new Restaurant.ReservationHistory(31 reservation.getCustomer(),32 reservation.getTable(),33 reservation.getRestaurant(),34 reservation.getReservationDateTime(),35 reservation.getPartySize(),36 reservation.getSpecialRequests(),37 "Done",38 null, // You can set cancellation reason if needed, it's not clear from the code provided 39 reservation.getCheckInTime() // Use currentTime for check-in date 40 ))41 .collect(Collectors.toList());42 43 reservationHistoryService.moveReservationsToPast(reservationHistories);44 45 reservationsToMove.forEach(reservation -> reservationService.deleteReservation(reservation.getReservationID()));46 }47 48 }1 //package com.example.rezevirajmasa.demo.bootstrap; 2 // 3 //import com.example.rezevirajmasa.demo.model.Reservation; 4 //import com.example.rezevirajmasa.demo.model.Restaurant; 5 //import com.example.rezevirajmasa.demo.service.ReservationHistoryService; 6 //import com.example.rezevirajmasa.demo.service.ReservationService; 7 //import org.springframework.stereotype.Component; 8 // 9 //import jakarta.annotation.PostConstruct; 10 //import java.time.LocalDateTime; 11 //import java.util.List; 12 //import java.util.stream.Collectors; 13 // 14 //@Component 15 //public class ReservationInitializer { 16 // private final ReservationHistoryService reservationHistoryService; 17 // private final ReservationService reservationService; 18 // 19 // public ReservationInitializer(ReservationHistoryService reservationHistoryService, ReservationService reservationService) { 20 // this.reservationHistoryService = reservationHistoryService; 21 // this.reservationService = reservationService; 22 // } 23 // 24 // @PostConstruct 25 // public void initializePastReservations() { 26 // LocalDateTime currentTime = LocalDateTime.now(); 27 // List<Reservation> reservationsToMove = reservationService.findReservationsToMove(currentTime); 28 // 29 // List<Restaurant.ReservationHistory> reservationHistories = reservationsToMove.stream() 30 // .map(reservation -> new Restaurant.ReservationHistory( 31 // reservation.getUser(), 32 // reservation.getTable(), 33 // reservation.getRestaurant(), 34 // reservation.getReservationDateTime(), 35 // reservation.getPartySize(), 36 // reservation.getSpecialRequests(), 37 // "Done", 38 // null, 39 // reservation.getCheckInTime() 40 // )) 41 // .collect(Collectors.toList()); 42 // 43 // reservationHistoryService.moveReservationsToPast(reservationHistories); 44 // 45 // reservationsToMove.forEach(reservation -> reservationService.deleteReservation(reservation.getReservationID())); 46 // } 47 // 48 //} -
src/main/java/com/example/rezevirajmasa/demo/config/SecurityConfig.java
rdb39d9e r8ca35dc 7 7 import org.springframework.http.HttpMethod; 8 8 import org.springframework.security.authentication.AuthenticationManager; 9 import org.springframework.security.config.Customizer; 9 10 import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 10 11 import org.springframework.security.config.annotation.web.builders.HttpSecurity; … … 15 16 import org.springframework.security.core.userdetails.UserDetailsService; 16 17 import org.springframework.security.web.SecurityFilterChain; 18 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; 17 19 import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; 20 import org.springframework.security.web.util.matcher.AntPathRequestMatcher; 18 21 import org.springframework.web.servlet.config.annotation.CorsRegistry; 22 import org.springframework.context.annotation.Bean; 23 import org.springframework.context.annotation.Configuration; 24 import org.springframework.security.config.annotation.web.builders.HttpSecurity; 25 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 26 import org.springframework.security.web.SecurityFilterChain; 19 27 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 20 28 … … 40 48 public void addCorsMappings(CorsRegistry registry) { 41 49 registry.addMapping("/**") 50 .allowedOrigins("http://localhost:3000") 51 .allowedMethods("GET", "POST", "PUT", "DELETE") 52 .allowedHeaders("*") 42 53 .allowCredentials(true) 43 .allowedOrigins("http://localhost:3000") // Allow requests from this origin 44 .allowedMethods("GET", "POST", "PUT", "DELETE") // Allow these HTTP methods 45 .allowedHeaders("*") 46 .maxAge(3600L); // Allow all headers 54 .maxAge(3600L); 47 55 } 48 56 49 57 // @Bean 50 // public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { 51 // 58 // public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { 52 59 // http 60 // .exceptionHandling(exception -> exception.authenticationEntryPoint(customerAuthenticationEntryPoint)) 61 // .addFilterBefore(new JwtAuthFilter(userAuthProvider), BasicAuthenticationFilter.class) 53 62 // .csrf(AbstractHttpConfigurer::disable) 54 // . authorizeHttpRequests( (requests) -> requests55 // .requestMatchers(AntPathRequestMatcher.antMatcher("/"), AntPathRequestMatcher.antMatcher("/restaurants"))56 // . permitAll()57 // . anyRequest()58 // . hasAnyRole("ADMIN", "USER")63 // .sessionManagement(sess -> sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) 64 // .authorizeHttpRequests(requests -> requests 65 // .requestMatchers(HttpMethod.POST, "/api/login", "/api/register").permitAll() 66 // .requestMatchers("/", "/home").authenticated() // Restrict `/` to authenticated users 67 // .anyRequest().authenticated() 59 68 // ) 60 // .formLogin((form) -> form 61 // .permitAll() 62 // .failureUrl("/login?error=BadCredentials") 63 // .defaultSuccessUrl("/restaurants", true) 64 // ) 65 // .logout((logout) -> logout 69 // .logout(logout -> logout 66 70 // .logoutUrl("/logout") 67 71 // .clearAuthentication(true) 68 72 // .invalidateHttpSession(true) 69 73 // .deleteCookies("JSESSIONID") 70 // .logoutSuccessUrl("/ ")74 // .logoutSuccessUrl("/api/login") // Redirect to login page after logout 71 75 // ); 72 76 // … … 83 87 .authorizeHttpRequests((requests) -> requests 84 88 .requestMatchers(HttpMethod.POST, "/api/login", "/api/register").permitAll() 85 .anyRequest().authenticated() 86 ); 89 .anyRequest().authenticated()); 87 90 return http.build(); 88 91 } 92 89 93 @Bean 90 94 public AuthenticationManager authManager(HttpSecurity http) throws Exception { … … 95 99 } 96 100 } 101 // 102 //import com.example.rezevirajmasa.demo.web.filters.JwtAuthFilter; 103 //import org.springframework.context.annotation.Bean; 104 //import org.springframework.context.annotation.Configuration; 105 //import org.springframework.security.authentication.AuthenticationManager; 106 //import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 107 //import org.springframework.security.config.annotation.web.builders.HttpSecurity; 108 //import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 109 //import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; 110 //import org.springframework.security.config.http.SessionCreationPolicy; 111 //import org.springframework.security.core.userdetails.UserDetailsService; 112 //import org.springframework.security.web.SecurityFilterChain; 113 //import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; 114 // 115 //@Configuration 116 //@EnableWebSecurity 117 //public class SecurityConfig { 118 // 119 // private final UserDetailsService userDetailsService; 120 //// private final UserAuthProvider userAuthProvider; 121 // private final JwtAuthFilter jwtAuthFilter; 122 // 123 // public SecurityConfig(UserDetailsService userDetailsService) { 124 // this.userDetailsService = userDetailsService; 125 //// this.userAuthProvider = userAuthProvider; 126 // this.jwtAuthFilter = new JwtAuthFilter(userAuthProvider); 127 // } 128 // 129 // @Bean 130 // public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { 131 // http 132 // .csrf(AbstractHttpConfigurer::disable) 133 // .sessionManagement(sess -> sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) 134 // .authorizeHttpRequests((requests) -> requests 135 // .requestMatchers("/api/login", "/api/register").permitAll() 136 // .anyRequest().authenticated()) 137 // .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class); 138 // 139 // return http.build(); 140 // } 141 // 142 // @Bean 143 // public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception { 144 // AuthenticationManagerBuilder authenticationManagerBuilder = http.getSharedObject(AuthenticationManagerBuilder.class); 145 // authenticationManagerBuilder.userDetailsService(userDetailsService); 146 // return authenticationManagerBuilder.build(); 147 // } 148 //} -
src/main/java/com/example/rezevirajmasa/demo/config/UserAuthProvider.java
rdb39d9e r8ca35dc 7 7 import com.example.rezevirajmasa.demo.dto.UserDto; 8 8 import com.example.rezevirajmasa.demo.service.UserService; 9 import io.jsonwebtoken.Claims; 10 import io.jsonwebtoken.Jwts; 9 11 import jakarta.annotation.PostConstruct; 10 12 import lombok.RequiredArgsConstructor; … … 12 14 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; 13 15 import org.springframework.security.core.Authentication; 16 import org.springframework.security.core.userdetails.UserDetails; 14 17 import org.springframework.stereotype.Component; 15 18 16 import java.util.Base64; 17 import java.util.Collections; 18 import java.util.Date; 19 import java.util.*; 20 import java.util.function.Function; 19 21 20 22 @RequiredArgsConstructor … … 29 31 protected void init() { 30 32 secretKey = Base64.getEncoder().encodeToString(secretKey.getBytes()); 33 } 34 35 public String generateToken(UserDetails userDetails){ 36 Map<String, Object> claims = new HashMap<>(); 37 return createToken(userDetails.getUsername()); 31 38 } 32 39 … … 50 57 return new UsernamePasswordAuthenticationToken(user, null, Collections.emptyList()); 51 58 } 59 60 public String extractUsername(String token) { 61 return extractClaim(token, Claims::getSubject); 62 } 63 64 public Date extractExpiration(String token) { 65 return extractClaim(token, Claims::getExpiration); 66 } 67 68 public <T> T extractClaim(String token, Function<Claims, T> claimsResolver) { 69 final Claims claims = extractAllClaims(token); 70 return claimsResolver.apply(claims); 71 } 72 73 private Claims extractAllClaims(String token) { 74 return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody(); 75 } 76 77 private Boolean isTokenExpired(String token) { 78 return extractExpiration(token).before(new Date()); 79 } 52 80 } -
src/main/java/com/example/rezevirajmasa/demo/dto/CredentialsDto.java
rdb39d9e r8ca35dc 11 11 @Data 12 12 public class CredentialsDto { 13 private String login;13 private String email; 14 14 private char[] password; 15 15 } -
src/main/java/com/example/rezevirajmasa/demo/dto/SignUpDto.java
rdb39d9e r8ca35dc 15 15 private String email; 16 16 private char[] password; 17 private String phone; 18 private String address; 19 private String membershipLevel; 17 20 } -
src/main/java/com/example/rezevirajmasa/demo/dto/UserDto.java
rdb39d9e r8ca35dc 16 16 private String email; 17 17 private String token; 18 private String phone; 19 private String address; 20 private String membershipLevel; 18 21 } -
src/main/java/com/example/rezevirajmasa/demo/mappers/UserMapper.java
rdb39d9e r8ca35dc 14 14 @Mapping(target = "password", ignore = true) 15 15 User signUpToUser(SignUpDto userDto); 16 17 SignUpDto toSignUpDto(UserDto userDto); 18 User toUser(UserDto userDto); 16 19 } -
src/main/java/com/example/rezevirajmasa/demo/mappers/UserMapperImpl.java
rdb39d9e r8ca35dc 3 3 import com.example.rezevirajmasa.demo.dto.SignUpDto; 4 4 import com.example.rezevirajmasa.demo.dto.UserDto; 5 import com.example.rezevirajmasa.demo.model.MembershipLevel; 5 6 import com.example.rezevirajmasa.demo.model.User; 6 7 import org.springframework.stereotype.Component; … … 36 37 user.setFirstName(userDto.getFirstName()); 37 38 user.setLastName(userDto.getLastName()); 38 user.setPassword(Arrays.toString(userDto.getPassword())); 39 user.setPassword(Arrays.toString(userDto.getPassword())); // Assuming password is a char[] or string array. 40 41 return user; 42 } 43 44 @Override 45 public SignUpDto toSignUpDto(UserDto userDto) { 46 if (userDto == null) { 47 return null; 48 } 49 50 SignUpDto signUpDto = new SignUpDto(); 51 signUpDto.setEmail(userDto.getEmail()); 52 signUpDto.setFirstName(userDto.getFirstName()); 53 signUpDto.setLastName(userDto.getLastName()); 54 55 // Since SignUpDto has password field, you may set it if needed. 56 // Assuming a default value or handling empty password as required. 57 signUpDto.setPassword(new char[0]); // Empty password for now or assign actual value if required. 58 59 return signUpDto; 60 } 61 62 @Override 63 public User toUser(UserDto userDto) { 64 if(userDto == null) { 65 return null; 66 } 67 68 User user = new User(); 69 user.setLastName(userDto.getLastName()); 70 user.setFirstName(userDto.getFirstName()); 71 user.setPhone(userDto.getPhone()); 72 user.setMembershipLevel(MembershipLevel.valueOf(userDto.getMembershipLevel())); 73 user.setAddress(userDto.getAddress()); 74 user.setEmail(userDto.getEmail()); 75 user.setId(userDto.getId()); 39 76 40 77 return user; -
src/main/java/com/example/rezevirajmasa/demo/model/Reservation.java
rdb39d9e r8ca35dc 16 16 17 17 @ManyToOne 18 @JoinColumn(name = " CustomerID")19 private Customer customer;18 @JoinColumn(name = "UserID") 19 private User user; 20 20 21 21 @ManyToOne … … 68 68 } 69 69 70 public Reservation( Customer customer, TableEntity table, Restaurant restaurant, LocalDateTime reservationDateTime, int partySize, String specialRequests, String status, LocalDateTime checkInTime, LocalDateTime checkOutTime, String paymentStatus) {70 public Reservation(User user, TableEntity table, Restaurant restaurant, LocalDateTime reservationDateTime, int partySize, String specialRequests, String status, LocalDateTime checkInTime, LocalDateTime checkOutTime, String paymentStatus) { 71 71 // this.customer = customer; 72 72 this.table = table; 73 this.user = user; 73 74 this.restaurant = restaurant; 74 75 this.reservationDateTime = reservationDateTime; … … 81 82 } 82 83 84 public User getUser() { 85 return user; 86 } 87 88 public void setUser(User user) { 89 this.user = user; 90 } 91 83 92 public Long getReservationID() { 84 93 return reservationID; … … 89 98 } 90 99 91 public Customer getCustomer() {92 return customer;93 }94 95 public void setCustomer(Customer customer) {96 this.customer = customer;97 }98 100 99 101 public TableEntity getTable() { … … 173 175 return "Reservation{" + 174 176 "reservationID=" + reservationID + 175 ", customer=" + customer +177 ", customer=" + user + 176 178 ", table=" + table + 177 179 ", restaurant=" + restaurant + -
src/main/java/com/example/rezevirajmasa/demo/model/Restaurant.java
rdb39d9e r8ca35dc 151 151 @ManyToOne 152 152 @JoinColumn(name = "customer_id") 153 private Customer customer;153 private User user; 154 154 155 155 @ManyToOne … … 179 179 private LocalDateTime checkInDate; 180 180 181 public ReservationHistory( Customer customer, TableEntity table, Restaurant restaurant, LocalDateTime reservationDateTime, int partySize, String specialRequests, String status, String cancellationReason, LocalDateTime checkInDate) {182 this. customer = customer;181 public ReservationHistory(User user, TableEntity table, Restaurant restaurant, LocalDateTime reservationDateTime, int partySize, String specialRequests, String status, String cancellationReason, LocalDateTime checkInDate) { 182 this.user = user; 183 183 this.table = table; 184 184 this.restaurant = restaurant; … … 202 202 } 203 203 204 public Customer getCustomer() {205 return customer;206 } 207 208 public void set Customer(Customer customer) {209 this. customer = customer;204 public User getUser() { 205 return user; 206 } 207 208 public void setUser(User user) { 209 this.user = user; 210 210 } 211 211 … … 278 278 return "ReservationHistory{" + 279 279 "id=" + id + 280 ", customer=" + customer +280 ", user=" + user + 281 281 ", table=" + table + 282 282 ", restaurant=" + restaurant + -
src/main/java/com/example/rezevirajmasa/demo/model/User.java
rdb39d9e r8ca35dc 7 7 import lombok.NoArgsConstructor; 8 8 import org.springframework.web.bind.annotation.GetMapping; 9 10 import java.util.Date; 9 11 10 12 @AllArgsConstructor … … 31 33 @Column(nullable = false) 32 34 private String password; 35 36 @Enumerated(EnumType.STRING) 37 private Role role; 38 39 @Column(name = "Phone", length = 20) 40 private String phone; 41 42 @Column(name = "Address", columnDefinition = "TEXT") 43 private String address; 44 45 @Enumerated(EnumType.STRING) 46 @Column(name = "MembershipLevel", length = 20) 47 private MembershipLevel membershipLevel; 48 49 @Column(name = "RegistrationDate", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") 50 @Temporal(TemporalType.TIMESTAMP) 51 private Date registrationDate; 33 52 } -
src/main/java/com/example/rezevirajmasa/demo/repository/ReservationHistoryRepository.java
rdb39d9e r8ca35dc 4 4 import com.example.rezevirajmasa.demo.model.Reservation; 5 5 import com.example.rezevirajmasa.demo.model.Restaurant; 6 import com.example.rezevirajmasa.demo.model.User; 6 7 import org.springframework.cglib.core.Local; 7 8 import org.springframework.data.jpa.repository.JpaRepository; … … 11 12 12 13 public interface ReservationHistoryRepository extends JpaRepository<Restaurant.ReservationHistory, Long> { 13 List<Restaurant.ReservationHistory> findA llByCustomer(Customer customer);14 List<Restaurant.ReservationHistory> findALlByUser(User user); 14 15 List<Restaurant.ReservationHistory> findByCheckInDateBeforeAndStatus(LocalDateTime currentTime, String scheduled); 15 16 List<Restaurant.ReservationHistory> findAllByCheckInDateBefore(LocalDateTime currentTime); -
src/main/java/com/example/rezevirajmasa/demo/repository/ReservationRepository.java
rdb39d9e r8ca35dc 1 1 package com.example.rezevirajmasa.demo.repository; 2 2 3 import com.example.rezevirajmasa.demo.model.Customer; 4 import com.example.rezevirajmasa.demo.model.Reservation; 5 import com.example.rezevirajmasa.demo.model.Restaurant; 6 import com.example.rezevirajmasa.demo.model.TableEntity; 3 import com.example.rezevirajmasa.demo.model.*; 7 4 import org.springframework.data.jpa.repository.JpaRepository; 8 5 … … 11 8 12 9 public interface ReservationRepository extends JpaRepository<Reservation, Long> { 13 List<Reservation> findA llByCustomer(Customer customer);10 List<Reservation> findALlByUserAndCheckInTimeAfter(User user, LocalDateTime now); 14 11 List<Reservation> findByTableAndCheckInTimeBetween(TableEntity table, LocalDateTime startTime, LocalDateTime endTime); 15 12 … … 17 14 List<Reservation> findAllByCheckInTimeBefore(LocalDateTime currentTime); 18 15 List<Reservation> findByCheckInTimeAfterAndCheckInTimeBefore(LocalDateTime startTime, LocalDateTime endTime); 16 List<Reservation> findALlByUserAndCheckInTimeBefore(User user, LocalDateTime now); 19 17 } -
src/main/java/com/example/rezevirajmasa/demo/service/ReservationHistoryService.java
rdb39d9e r8ca35dc 4 4 import com.example.rezevirajmasa.demo.model.Reservation; 5 5 import com.example.rezevirajmasa.demo.model.Restaurant; 6 import com.example.rezevirajmasa.demo.model.User; 6 7 7 8 import java.time.LocalDateTime; … … 11 12 public void moveReservationToHistory(Reservation reservation, String status, String cancellationReason); 12 13 public void moveReservationsToPast(List<Restaurant.ReservationHistory> reservationsToMove); 13 List<Restaurant.ReservationHistory> findBy Customer(Customer customer);14 List<Restaurant.ReservationHistory> findByUser(User user); 14 15 List<Restaurant.ReservationHistory> findAll(); 15 16 List<Restaurant.ReservationHistory> findReservationsToMove(LocalDateTime currentTime); -
src/main/java/com/example/rezevirajmasa/demo/service/ReservationService.java
rdb39d9e r8ca35dc 1 1 package com.example.rezevirajmasa.demo.service; 2 2 3 import com.example.rezevirajmasa.demo.model.Customer; 4 import com.example.rezevirajmasa.demo.model.Reservation; 5 import com.example.rezevirajmasa.demo.model.Restaurant; 6 import com.example.rezevirajmasa.demo.model.TableEntity; 3 import com.example.rezevirajmasa.demo.model.*; 4 import org.springframework.security.core.userdetails.UserDetails; 7 5 8 6 import java.time.LocalDateTime; … … 10 8 11 9 public interface ReservationService { 12 public void makeReservation( Customer customer, TableEntity table, Restaurant restaurant, LocalDateTime localDateTime, LocalDateTime checkInTime, int partySize, String specialRequests);13 public Reservation makeReservationRest(Reservation reservation );10 public void makeReservation(User user, TableEntity table, Restaurant restaurant, LocalDateTime localDateTime, LocalDateTime checkInTime, int partySize, String specialRequests); 11 public Reservation makeReservationRest(Reservation reservation, User user); 14 12 public List<Reservation> listAll(); 15 13 public Reservation findById(Long id); 16 14 public Reservation getReservationById(Long reservationId); 17 15 public boolean cancelReservation(Long reservationId); 18 public List<Reservation> findReservationByCustomer(Customer customer); 16 public List<Reservation> findReservationByUser(User user); 17 public List<Reservation> findReservationsByUserPast(User user); 19 18 public List<Reservation> findReservationsByTableAndDateRange(TableEntity table, LocalDateTime startDateTime, LocalDateTime endDateTime); 20 19 List<Reservation> findReservationsToMove(LocalDateTime currentTime); -
src/main/java/com/example/rezevirajmasa/demo/service/UserService.java
rdb39d9e r8ca35dc 4 4 import com.example.rezevirajmasa.demo.dto.SignUpDto; 5 5 import com.example.rezevirajmasa.demo.dto.UserDto; 6 import com.example.rezevirajmasa.demo.model.User; 6 7 import lombok.RequiredArgsConstructor; 7 8 … … 9 10 public interface UserService { 10 11 public UserDto findByEmail(String email); 12 public User findByMail(String email); 11 13 public UserDto login(CredentialsDto credentialsDto); 12 14 public UserDto register(SignUpDto userDto); 15 public User findUserById(Long userId); 13 16 } -
src/main/java/com/example/rezevirajmasa/demo/service/impl/ReservationHistoryServiceImpl.java
rdb39d9e r8ca35dc 4 4 import com.example.rezevirajmasa.demo.model.Reservation; 5 5 import com.example.rezevirajmasa.demo.model.Restaurant; 6 import com.example.rezevirajmasa.demo.model.User; 6 7 import com.example.rezevirajmasa.demo.repository.ReservationHistoryRepository; 7 8 import com.example.rezevirajmasa.demo.service.ReservationHistoryService; … … 22 23 public void moveReservationToHistory(Reservation reservation, String status, String cancellationReason) { 23 24 Restaurant.ReservationHistory history = new Restaurant.ReservationHistory(); 24 history.set Customer(reservation.getCustomer());25 history.setUser(reservation.getUser()); 25 26 history.setTable(reservation.getTable()); 26 27 history.setReservationDateTime(reservation.getReservationDateTime()); … … 42 43 43 44 @Override 44 public List<Restaurant.ReservationHistory> findBy Customer(Customer customer) {45 return reservationHistoryRepository.findA llByCustomer(customer);45 public List<Restaurant.ReservationHistory> findByUser(User user) { 46 return reservationHistoryRepository.findALlByUser(user); 46 47 } 47 48 48 49 @Override 49 50 public void moveReservationsToPast(List<Restaurant.ReservationHistory> reservationsToMove) { 50 // Update the status of reservations to "Past"51 51 for (Restaurant.ReservationHistory reservation : reservationsToMove) { 52 52 reservation.setStatus("Past"); 53 53 } 54 54 55 // Save the updated reservations56 55 reservationHistoryRepository.saveAll(reservationsToMove); 57 56 } -
src/main/java/com/example/rezevirajmasa/demo/service/impl/ReservationImpl.java
rdb39d9e r8ca35dc 1 1 package com.example.rezevirajmasa.demo.service.impl; 2 2 3 import com.example.rezevirajmasa.demo.model.Customer; 4 import com.example.rezevirajmasa.demo.model.Reservation; 5 import com.example.rezevirajmasa.demo.model.Restaurant; 6 import com.example.rezevirajmasa.demo.model.TableEntity; 3 import com.example.rezevirajmasa.demo.dto.UserDto; 4 import com.example.rezevirajmasa.demo.mappers.UserMapper; 5 import com.example.rezevirajmasa.demo.model.*; 7 6 import com.example.rezevirajmasa.demo.model.exceptions.InvalidReservationException; 8 7 import com.example.rezevirajmasa.demo.model.exceptions.InvalidReservationIdException; … … 11 10 import com.example.rezevirajmasa.demo.repository.RestaurantRepository; 12 11 import com.example.rezevirajmasa.demo.repository.TableRepository; 12 import com.example.rezevirajmasa.demo.service.ReservationHistoryService; 13 13 import com.example.rezevirajmasa.demo.service.ReservationService; 14 import com.example.rezevirajmasa.demo.service.UserService; 14 15 import org.springframework.beans.factory.annotation.Autowired; 16 import org.springframework.cglib.core.Local; 17 import org.springframework.security.core.Authentication; 18 import org.springframework.security.core.annotation.AuthenticationPrincipal; 19 import org.springframework.security.core.context.SecurityContextHolder; 20 import org.springframework.security.core.userdetails.UserDetails; 15 21 import org.springframework.stereotype.Service; 22 import org.springframework.web.bind.annotation.RequestBody; 16 23 17 24 import javax.swing.text.html.Option; … … 27 34 private TableRepository tableRepository; 28 35 @Autowired 29 private RestaurantRepository restaurantRepository; 36 private ReservationHistoryService reservationHistoryService; 37 private final UserMapper userMapper; 30 38 @Autowired 31 private CustomerRepository customerRepository;39 private UserService userService; 32 40 @Autowired 33 41 private ReservationRepository reservationRepository; 42 43 public ReservationImpl(UserMapper userMapper) { 44 this.userMapper = userMapper; 45 } 34 46 35 47 @Override … … 39 51 40 52 @Override 41 public void makeReservation( Customer customer, TableEntity table, Restaurant restaurant, LocalDateTime localDateTime, LocalDateTime checkInTime, int partySize, String specialRequests) {53 public void makeReservation(User user, TableEntity table, Restaurant restaurant, LocalDateTime localDateTime, LocalDateTime checkInTime, int partySize, String specialRequests) { 42 54 if (!table.isAvailable(checkInTime)) { 43 55 // Handle unavailability (throw an exception, return a specific response, etc.) … … 46 58 47 59 Reservation reservation = 48 new Reservation( customer, table, restaurant, LocalDateTime.now(), partySize, specialRequests, "Reserved", checkInTime, checkInTime.plusHours(2), null);60 new Reservation(user, table, restaurant, LocalDateTime.now(), partySize, specialRequests, "Reserved", checkInTime, checkInTime.plusHours(2), null); 49 61 50 62 // // Update table status or perform additional logic if needed … … 56 68 57 69 @Override 58 public Reservation makeReservationRest(Reservation reservation ) {70 public Reservation makeReservationRest(Reservation reservation, User user) { 59 71 Optional<TableEntity> optionalTable = tableRepository.findById(reservation.getTable().getId()); 60 if (optionalTable.isPresent()) {72 if (optionalTable.isPresent()) { 61 73 TableEntity table = optionalTable.get(); 74 75 reservation.setUser(user); 62 76 63 77 LocalDateTime startTime = reservation.getCheckInTime().minusHours(2); … … 67 81 x -> x.isAfter(startTime) && x.isBefore(endTime) 68 82 ); 69 83 reservation.setReservationDateTime(LocalDateTime.now()); 70 84 return reservationRepository.save(reservation); 71 85 } else { 72 throw new InvalidReservationException("Unsuccessful reservation -> time slot not ava laible");86 throw new InvalidReservationException("Unsuccessful reservation -> time slot not available"); 73 87 } 74 88 } 89 75 90 76 91 @Override … … 109 124 from = from.plusMinutes(15); 110 125 } 126 reservationHistoryService.moveReservationToHistory(reservation, "Canceled", "Canceled by user"); 111 127 reservationRepository.delete(reservation); 112 return true; // Return true indicating successful cancellation128 return true; 113 129 } else { 114 return false; // Return false indicating reservation with the given ID not found130 return false; 115 131 } 116 132 } … … 118 134 119 135 @Override 120 public List<Reservation> findReservationByCustomer(Customer customer) { 121 return reservationRepository.findAllByCustomer(customer); 136 public List<Reservation> findReservationByUser(User user) { 137 LocalDateTime now = LocalDateTime.now(); 138 return reservationRepository.findALlByUserAndCheckInTimeAfter(user, now); 139 } 140 141 @Override 142 public List<Reservation> findReservationsByUserPast(User user) { 143 LocalDateTime now = LocalDateTime.now(); 144 return reservationRepository.findALlByUserAndCheckInTimeBefore(user, now); 122 145 } 123 146 -
src/main/java/com/example/rezevirajmasa/demo/service/impl/RestaurantServiceImpl.java
rdb39d9e r8ca35dc 175 175 .collect(Collectors.toList()); 176 176 } else { 177 List<Restaurant> restaurantList = restaurantRepository.findAllByNameLikeIgnoreCase(search); 177 String searchTerm = "%" + search + "%"; 178 List<Restaurant> restaurantList = restaurantRepository.findAllByNameLikeIgnoreCase(searchTerm); 178 179 if (restaurantList.isEmpty()) { 179 180 restaurantList = restaurantRepository.findAllByCuisineTypeContaining(search); -
src/main/java/com/example/rezevirajmasa/demo/service/impl/UserServiceImpl.java
rdb39d9e r8ca35dc 6 6 import com.example.rezevirajmasa.demo.mappers.UserMapper; 7 7 import com.example.rezevirajmasa.demo.mappers.UserMapperImpl; 8 import com.example.rezevirajmasa.demo.model.MembershipLevel; 9 import com.example.rezevirajmasa.demo.model.Role; 8 10 import com.example.rezevirajmasa.demo.model.User; 9 11 import com.example.rezevirajmasa.demo.model.exceptions.AppException; … … 12 14 import lombok.RequiredArgsConstructor; 13 15 import org.mapstruct.control.MappingControl; 16 import org.openqa.selenium.InvalidArgumentException; 14 17 import org.springframework.http.HttpStatus; 15 18 import org.springframework.security.crypto.password.PasswordEncoder; 16 19 import org.springframework.stereotype.Service; 17 20 import java.nio.CharBuffer; 21 import java.sql.Date; 22 import java.time.LocalDate; 18 23 import java.util.Optional; 19 24 … … 30 35 } 31 36 37 @Override 38 public User findByMail(String email) { 39 return userRepository.findByEmail(email).orElseThrow(() -> new AppException(("Unknown user"), HttpStatus.NOT_FOUND)); 40 } 41 32 42 public UserDto login(CredentialsDto credentialsDto) { 33 User user = userRepository.findByEmail(credentialsDto.get Login())43 User user = userRepository.findByEmail(credentialsDto.getEmail()) 34 44 .orElseThrow(() -> new AppException("Unknown user", HttpStatus.NOT_FOUND)); 35 45 … … 51 61 user.setPassword(passwordEncoder.encode(CharBuffer.wrap(userDto.getPassword()))); 52 62 63 user.setFirstName(userDto.getFirstName()); 64 user.setLastName(userDto.getLastName()); 65 user.setAddress(userDto.getAddress()); 66 user.setPhone(userDto.getPhone()); 67 user.setMembershipLevel(MembershipLevel.valueOf(userDto.getMembershipLevel())); 68 user.setRegistrationDate(Date.valueOf(LocalDate.now())); 69 user.setRole(Role.ROLE_USER); 70 53 71 User savedUser = userRepository.save(user); 54 72 55 return userMapper.toUserDto(user); 73 return userMapper.toUserDto(savedUser); 74 } 75 76 @Override 77 public User findUserById(Long userId) { 78 return userRepository.findById(userId).orElseThrow(()->new InvalidArgumentException("Invalid user Id")); 56 79 } 57 80 } -
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 } -
src/main/resources/application.properties
rdb39d9e r8ca35dc 9 9 spring.jpa.show-sql=true 10 10 spring.main.allow-bean-definition-overriding=true 11 12 server.port=8081
Note:
See TracChangeset
for help on using the changeset viewer.