ClientId from token in Wishlist controller

This commit is contained in:
2025-06-07 15:18:51 +02:00
parent 501121f235
commit 190083c133
3 changed files with 27 additions and 8 deletions

View File

@@ -2,32 +2,36 @@ package _11.asktpk.artisanconnectbackend.controller;
import _11.asktpk.artisanconnectbackend.dto.NoticeDTO;
import _11.asktpk.artisanconnectbackend.dto.RequestResponseDTO;
import _11.asktpk.artisanconnectbackend.dto.WishlistDTO;
import _11.asktpk.artisanconnectbackend.security.JwtUtil;
import _11.asktpk.artisanconnectbackend.service.ClientService;
import _11.asktpk.artisanconnectbackend.service.NoticeService;
import _11.asktpk.artisanconnectbackend.service.WishlistService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/api/v1/wishlist")
public class WishlistController {
private final WishlistService wishlistService;
private final ClientService clientService;
private final NoticeService noticeService;
private final JwtUtil jwtUtil;
public WishlistController(WishlistService wishlistService, ClientService clientService, NoticeService noticeService) {
public WishlistController(WishlistService wishlistService, ClientService clientService, NoticeService noticeService, JwtUtil jwtUtil) {
this.wishlistService = wishlistService;
this.clientService = clientService;
this.noticeService = noticeService;
this.jwtUtil = jwtUtil;
}
@PostMapping("/toggle/{noticeId}")
public ResponseEntity<RequestResponseDTO> toggleWishlist(@PathVariable Long noticeId) {
Long clientId = 1L;
public ResponseEntity<RequestResponseDTO> toggleWishlist(@PathVariable Long noticeId, HttpServletRequest request) {
Long clientId = getClientIdFromRequest(request);
NoticeDTO noticeDTO = noticeService.getNoticeById(noticeId);
if (noticeDTO == null) {
return ResponseEntity.badRequest().body(new RequestResponseDTO("Notice not found"));
@@ -51,9 +55,19 @@ public class WishlistController {
// }
@GetMapping("/")
public List<NoticeDTO> getWishlistForClient() {
// TODO: Replace with actual client ID from authentication context
Long clientId = 1L;
public List<NoticeDTO> getWishlistForClient(HttpServletRequest request) {
Long clientId = getClientIdFromRequest(request);
return wishlistService.getNoticesInWishlist(clientId);
}
private Long getClientIdFromRequest(HttpServletRequest request) {
String authorizationHeader = request.getHeader("Authorization");
if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {
Long clientId = jwtUtil.extractUserId(authorizationHeader.substring(7));
log.info("Client Id: {}", clientId);
return clientId;
} else {
return null;
}
}
}

View File

@@ -53,6 +53,7 @@ public class JwtRequestFilter extends OncePerRequestFilter {
} catch (ExpiredJwtException expiredJwtException) {
logger.error(expiredJwtException.getMessage());
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.getWriter().write(new RequestResponseDTO(expiredJwtException.getMessage()).toJSON());
return;
} catch (Exception e) {
logger.error(e.getMessage());

View File

@@ -82,6 +82,10 @@ public class JwtUtil {
return extractAllClaims(token).get("role", String.class);
}
public Long extractUserId(String token) {
return extractAllClaims(token).get("userId", Long.class);
}
public <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
final Claims claims = extractAllClaims(token);
return claimsResolver.apply(claims);