Ignore:
Timestamp:
01/19/25 23:18:37 (4 months ago)
Author:
Aleksandar Panovski <apano77@…>
Branches:
main
Children:
f5b256e
Parents:
db39d9e
Message:

Done with stupid timeslots

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  
    11package com.example.rezevirajmasa.demo.web.controller;
    22
     3import com.example.rezevirajmasa.demo.dto.SignUpDto;
     4import com.example.rezevirajmasa.demo.dto.UserDto;
     5import com.example.rezevirajmasa.demo.mappers.UserMapper;
    36import com.example.rezevirajmasa.demo.model.*;
    47import com.example.rezevirajmasa.demo.model.exceptions.ExpiredReservationException;
     
    1922public class ReservationController {
    2023    private final ReservationService reservationService;
    21     private final CustomerService customerService;
     24    private final UserService userService;
    2225    private final TableService tableService;
    2326    private final ReservationHistoryService reservationHistoryService;
    2427
    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) {
    2631        this.reservationService = reservationService;
    27         this.customerService = customerService;
     32        this.userService = userService;
    2833        this.tableService = tableService;
    2934        this.reservationHistoryService = reservationHistoryService;
     35        this.userMapper = userMapper;
    3036    }
    3137
    3238    @GetMapping("/reservations")
    3339    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
    4148        model.addAttribute("bodyContent", "reservationList");
    4249        model.addAttribute("reservations", reservationList);
    4350        return "index";
    4451    }
     52
    4553
    4654    @GetMapping("/reservations/edit/{reservationId}")
     
    6270        Restaurant restaurant = table.getRestaurant();
    6371
    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);
    6577
    6678        if(!table.isAvailable(reservationDateTime)) {
     
    6880        }
    6981        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);
    7183        return "redirect:/reservations";
    7284    }
  • src/main/java/com/example/rezevirajmasa/demo/web/controller/ReservationHistoryController.java

    rdb39d9e r8ca35dc  
    11package com.example.rezevirajmasa.demo.web.controller;
    22
     3import com.example.rezevirajmasa.demo.dto.SignUpDto;
     4import com.example.rezevirajmasa.demo.dto.UserDto;
     5import com.example.rezevirajmasa.demo.mappers.UserMapper;
    36import com.example.rezevirajmasa.demo.model.Customer;
    47import com.example.rezevirajmasa.demo.model.Restaurant;
    58import com.example.rezevirajmasa.demo.model.Role;
     9import com.example.rezevirajmasa.demo.model.User;
    610import com.example.rezevirajmasa.demo.service.CustomerService;
    711import com.example.rezevirajmasa.demo.service.ReservationHistoryService;
     12import com.example.rezevirajmasa.demo.service.UserService;
    813import org.springframework.security.core.Authentication;
    914import org.springframework.stereotype.Controller;
     
    1823public class ReservationHistoryController {
    1924    private final ReservationHistoryService reservationHistoryService;
    20     private final CustomerService customerService;
     25    private final UserService userService;
     26    private final UserMapper userMapper;
    2127
    22     public ReservationHistoryController(ReservationHistoryService reservationHistoryService, CustomerService customerService) {
     28    public ReservationHistoryController(ReservationHistoryService reservationHistoryService, UserService userService, UserMapper userMapper) {
    2329        this.reservationHistoryService = reservationHistoryService;
    24         this.customerService = customerService;
     30        this.userService = userService;
     31        this.userMapper = userMapper;
    2532    }
    2633
     
    2835    public String showPastReservations(Authentication authentication, Model model) {
    2936        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//        }
    3649        model.addAttribute("historyReservations", reservationHistoryList);
    3750        model.addAttribute("bodyContent", "pastReservations");
  • src/main/java/com/example/rezevirajmasa/demo/web/filters/JwtAuthFilter.java

    rdb39d9e r8ca35dc  
    22
    33import com.example.rezevirajmasa.demo.config.UserAuthProvider;
     4import io.jsonwebtoken.ExpiredJwtException;
    45import jakarta.servlet.FilterChain;
    56import jakarta.servlet.ServletException;
     
    78import jakarta.servlet.http.HttpServletResponse;
    89import lombok.RequiredArgsConstructor;
     10import org.springframework.beans.factory.annotation.Autowired;
    911import org.springframework.http.HttpHeaders;
     12import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
    1013import org.springframework.security.core.context.SecurityContextHolder;
    1114import org.springframework.web.filter.OncePerRequestFilter;
     
    1720
    1821    private final UserAuthProvider userAuthProvider;
     22
    1923    @Override
    2024    protected void doFilterInternal(
     
    2428        String header = request.getHeader(HttpHeaders.AUTHORIZATION);
    2529
     30        String username = null;
     31        String jwt = null;
     32
    2633        if(header != null) {
     34            jwt = header.substring(7);
    2735            String[] elements = header.split(" ");
    2836
    2937            if(elements.length == 2 && "Bearer".equals(elements[0])) {
    3038                try {
     39                    username = userAuthProvider.extractUsername(jwt); // logikata vidi ja
    3140                    SecurityContextHolder.getContext().setAuthentication(
    3241                            userAuthProvider.validateToken(elements[1])
    3342                    );
     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
    3457                } catch (RuntimeException e) {
    3558                    SecurityContextHolder.clearContext();
     
    4063        filterChain.doFilter(request, response);
    4164    }
     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    }
    4272}
  • src/main/java/com/example/rezevirajmasa/demo/web/rest/AuthController.java

    rdb39d9e r8ca35dc  
    1414import org.springframework.http.ResponseEntity;
    1515import org.springframework.security.authentication.AuthenticationManager;
     16import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
     17import org.springframework.security.core.Authentication;
    1618import org.springframework.security.crypto.password.PasswordEncoder;
    1719import org.springframework.web.bind.annotation.CrossOrigin;
     
    3032    public ResponseEntity<UserDto> login(@RequestBody CredentialsDto credentialsDto) {
    3133        UserDto user = userService.login(credentialsDto);
    32         user.setToken(userAuthProvider.createToken(user.getEmail()));
     34        String token = userAuthProvider.createToken(user.getEmail());
     35        user.setToken(token);
     36
    3337        return ResponseEntity.ok(user);
    3438    }
     
    3842        UserDto user = userService.register(signUpDto);
    3943        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);
    4245    }
    4346}
  • src/main/java/com/example/rezevirajmasa/demo/web/rest/testController.java

    rdb39d9e r8ca35dc  
    22
    33import com.example.rezevirajmasa.demo.dto.CustomerDTO;
     4import com.example.rezevirajmasa.demo.dto.UserDto;
     5import com.example.rezevirajmasa.demo.mappers.UserMapper;
    46import 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;
     7import com.example.rezevirajmasa.demo.service.*;
     8import com.example.rezevirajmasa.demo.service.impl.TokenService;
     9import jakarta.servlet.http.HttpServletRequest;
    910import jdk.jfr.consumer.RecordingStream;
    1011import org.apache.coyote.Response;
     12import org.apache.http.protocol.HTTP;
    1113import org.springframework.format.annotation.DateTimeFormat;
    1214import org.springframework.http.HttpStatus;
    1315import org.springframework.http.ResponseEntity;
     16import org.springframework.security.core.Authentication;
     17import org.springframework.security.core.annotation.AuthenticationPrincipal;
     18import org.springframework.security.core.context.SecurityContextHolder;
     19import org.springframework.security.core.parameters.P;
     20import org.springframework.security.core.userdetails.UserDetails;
    1421import org.springframework.web.bind.annotation.*;
    1522
     23import java.nio.file.attribute.UserPrincipal;
     24import java.security.Principal;
    1625import java.time.LocalDateTime;
    1726import java.time.format.DateTimeFormatter;
     
    2635    private final RestaurantService restaurantService;
    2736    private final CustomerService customerService;
     37    private final UserService userService;
    2838    private final ReservationService reservationService;
     39    private final ReservationHistoryService reservationHistoryService;
    2940    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) {
    3244        this.restaurantService = restaurantService;
    3345        this.customerService = customerService;
     46        this.userService = userService;
    3447        this.reservationService = reservationService;
     48        this.reservationHistoryService = reservationHistoryService;
    3549        this.tableService = tableService;
     50        this.userMapper = userMapper;
     51        this.tokenService = tokenService;
    3652    }
    3753
     
    114130        );
    115131    }
     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
    116144
    117145    @PostMapping("/api/customers")
     
    137165//    Reservation Calls
    138166
    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
    148178        return new ResponseEntity<>(savedReservation, HttpStatus.CREATED);
    149179    }
     180
    150181
    151182    @GetMapping("/api/reservations/{reservationId}")
     
    159190    }
    160191
    161     @PostMapping("/api/reservations/{reservationId}")
     192    @PostMapping("/api/reservations/{reservationId}/{email}")
    162193    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
    164198        if (!reservation.getReservationID().equals(reservationId)) {
    165199            return ResponseEntity.badRequest().build();
    166200        }
    167201
    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());
    185223        return ResponseEntity.ok(updatedReservation);
    186224    }
     225
    187226
    188227    @DeleteMapping("/api/reservations/delete/{reservationId}")
     
    196235    }
    197236
     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
    198243//    TableEntity Calls
    199244
     
    203248    }
    204249
     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
    205258}
Note: See TracChangeset for help on using the changeset viewer.