Parcourir la source

use userId instead of username (#7)

Daniel Bohry il y a 8 mois
Parent
commit
939b3f975c

+ 2 - 2
src/main/java/com/danielbohry/stocks/api/portfolio/PortfolioController.java

@@ -22,8 +22,8 @@ public class PortfolioController {
     private final PortfolioService service;
 
     @GetMapping
-    public ResponseEntity<?> current(@RequestParam(required = false, defaultValue = "usd") String currency) {
-        List<Portfolio> response = service.getByUser(UserContextHolder.get().getUsername(), currency.toUpperCase());
+    public ResponseEntity<List<Portfolio>> current(@RequestParam(required = false, defaultValue = "usd") String currency) {
+        List<Portfolio> response = service.getByUser(UserContextHolder.get().getId(), currency.toUpperCase());
         return ResponseEntity.ok(response);
     }
 

+ 0 - 31
src/main/java/com/danielbohry/stocks/api/user/UserController.java

@@ -1,31 +0,0 @@
-package com.danielbohry.stocks.api.user;
-
-import com.danielbohry.stocks.api.user.dto.RegisterRequest;
-import com.danielbohry.stocks.domain.Login;
-import com.danielbohry.stocks.service.UserService;
-import lombok.AllArgsConstructor;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-@RestController
-@RequestMapping("api/users")
-@AllArgsConstructor
-@CrossOrigin
-public class UserController {
-
-    private final UserService service;
-
-    @PostMapping("register")
-    public ResponseEntity<?> register(@RequestBody RegisterRequest request) {
-        Login response = service.register(request.username(), request.password());
-        return ResponseEntity.status(HttpStatus.CREATED).body(response);
-    }
-
-    @PostMapping("login")
-    public ResponseEntity<?> login(@RequestBody RegisterRequest request) {
-        Login response = service.login(request.username(), request.password());
-        return ResponseEntity.ok(response);
-    }
-
-}

+ 0 - 4
src/main/java/com/danielbohry/stocks/api/user/dto/RegisterRequest.java

@@ -1,4 +0,0 @@
-package com.danielbohry.stocks.api.user.dto;
-
-public record RegisterRequest(String username, String password) {
-}

+ 0 - 7
src/main/java/com/danielbohry/stocks/api/user/dto/UserResponse.java

@@ -1,7 +0,0 @@
-package com.danielbohry.stocks.api.user.dto;
-
-import java.time.Instant;
-import java.util.List;
-
-public record UserResponse(String username, String description, List<String> followers, List<String> following, Instant createdAt, Instant updatedAt) {
-}

+ 3 - 1
src/main/java/com/danielbohry/stocks/client/AuthClient.java

@@ -74,7 +74,7 @@ public class AuthClient {
         }
     }
 
-    public CurrentUser getCurrent(String token) {
+    public CurrentUser current(String token) {
         HttpHeaders headers = new HttpHeaders();
         headers.add("Authorization", token);
 
@@ -99,6 +99,7 @@ public class AuthClient {
     @AllArgsConstructor
     @NoArgsConstructor
     public static class AuthenticatedUser {
+        private String id;
         private String username;
         private String token;
         private Instant expirationDate;
@@ -108,6 +109,7 @@ public class AuthClient {
     @AllArgsConstructor
     @NoArgsConstructor
     public static class CurrentUser {
+        private String id;
         private String username;
         private List<String> roles;
     }

+ 3 - 3
src/main/java/com/danielbohry/stocks/context/ServiceContextFilter.java

@@ -40,7 +40,7 @@ public class ServiceContextFilter extends OncePerRequestFilter {
             CurrentUser user = extractCurrentUser(request);
 
             if (user != null) {
-                UserContextHolder.set(new UserContext(user.getUsername(), user.getRoles()));
+                UserContextHolder.set(new UserContext(user.getId(), user.getUsername(), user.getRoles()));
 
                 try {
                     filterChain.doFilter(request, response);
@@ -59,8 +59,8 @@ public class ServiceContextFilter extends OncePerRequestFilter {
         String token = request.getHeader("Authorization");
 
         return token != null ?
-            authClient.getCurrent(token)
-            : new CurrentUser("anonymous", List.of("USER"));
+            authClient.current(token)
+            : new CurrentUser("1", "anonymous", List.of("USER"));
     }
 
 }

+ 1 - 0
src/main/java/com/danielbohry/stocks/context/UserContext.java

@@ -9,6 +9,7 @@ import java.util.List;
 @AllArgsConstructor
 public class UserContext {
 
+    private String id;
     private String username;
     private List<String> roles;
 

+ 2 - 2
src/main/java/com/danielbohry/stocks/domain/Portfolio.java

@@ -16,7 +16,7 @@ public class Portfolio {
     private List<Stock> stocks;
     private BigDecimal totalValue;
     private Integer totalAssets;
-    private String username;
+    private String user;
     private LocalDateTime createdAt;
     private LocalDateTime updatedAt;
 
@@ -38,7 +38,7 @@ public class Portfolio {
             .stocks(entity.getStocks().stream()
                 .map(stock -> new Stock(stock.getCode(), null, stock.getQuantity(), BigDecimal.ZERO, BigDecimal.ZERO))
                 .toList())
-            .username(entity.getUsername())
+            .user(entity.getUser())
             .createdAt(entity.getCreatedAt())
             .updatedAt(entity.getUpdatedAt())
 

+ 1 - 1
src/main/java/com/danielbohry/stocks/repository/PortfolioEntity.java

@@ -20,7 +20,7 @@ public class PortfolioEntity {
 
     private String id;
     private String encryptedStocks;
-    private String username;
+    private String user;
     private LocalDateTime createdAt;
     private LocalDateTime updatedAt;
 

+ 1 - 1
src/main/java/com/danielbohry/stocks/repository/PortfolioRepository.java

@@ -9,7 +9,7 @@ import java.util.List;
 @Repository
 public interface PortfolioRepository extends MongoRepository<PortfolioEntity, String> {
 
-    List<PortfolioEntity> findAllByUsername(String username);
+    List<PortfolioEntity> findAllByUser(String user);
 
     @Aggregation(pipeline = {
         "{ '$project': { '_id': 1 } }"

+ 5 - 7
src/main/java/com/danielbohry/stocks/service/PortfolioService.java

@@ -47,8 +47,8 @@ public class PortfolioService {
         return repository.findAllPortfolioIds();
     }
 
-    public List<Portfolio> getByUser(String username, String currency) {
-        return repository.findAllByUsername(username).stream()
+    public List<Portfolio> getByUser(String userId, String currency) {
+        return repository.findAllByUser(userId).stream()
             .map(entity -> get(entity.getId(), currency))
             .toList();
     }
@@ -94,7 +94,7 @@ public class PortfolioService {
         PortfolioEntity toSave = PortfolioEntity.builder()
             .id(id)
             .stocks(emptyList())
-            .username(UserContextHolder.get().getUsername())
+            .user(UserContextHolder.get().getId())
             .createdAt(now())
             .updatedAt(now())
             .build();
@@ -106,7 +106,7 @@ public class PortfolioService {
         log.info("Updating portfolio [{}]", id);
         PortfolioEntity toUpdate = repository.findById(id).orElseThrow(() -> new NotFoundException("Failed to update portfolio with id: " + id));
 
-        if (!Objects.equals(toUpdate.getUsername(), UserContextHolder.get().getUsername())) {
+        if (!Objects.equals(toUpdate.getUser(), UserContextHolder.get().getId()) || UserContextHolder.isAdmin()) {
             throw new UnauthorizedException("You do not have permission to update portfolio");
         }
 
@@ -133,9 +133,7 @@ public class PortfolioService {
 
     public void cleanup() {
         repository.findAll().forEach(portfolio -> {
-            if ((ObjectUtils.isEmpty(portfolio.getEncryptedStocks()) && ObjectUtils.isEmpty(portfolio.getStocks().isEmpty()))
-                || portfolio.getUsername() == null
-                || portfolio.getUsername().contains("test")) {
+            if ((ObjectUtils.isEmpty(portfolio.getEncryptedStocks()))) {
                 log.info("Removing empty portfolio [{}]", portfolio.getId());
                 repository.deleteById(portfolio.getId());
             }