Makumbacz vor 3 Jahren
Ursprung
Commit
04212bd0fe

+ 14 - 14
src/main/java/com/example/plantsforyou/appuser/AppUserController.java

@@ -39,21 +39,21 @@ public class AppUserController {
                 JWTVerifier verifier = JWT.require(algorithm).build();
                 DecodedJWT decodedJWT = verifier.verify(refresh_token);
                 String username = decodedJWT.getSubject();
-                Optional<AppUser> opt = appUserService.getAppUser(username);
+                AppUser opt = appUserService.getAppUser(username);
                 AppUser user;
-                if(opt.isPresent()){
-                    user = opt.get();
-                    String access_token = JWT.create()
-                            .withSubject(user.getEmail())
-                            .withExpiresAt(new Date(System.currentTimeMillis() + 10 * 60 * 1000)) //10 mins
-                            .withIssuer(request.getRequestURL().toString())
-                            .sign(algorithm);
-                    Map<String, String> tokens = new HashMap<>();
-                    tokens.put("access_token", access_token);
-                    tokens.put("refresh_token", refresh_token);
-                    response.setContentType(APPLICATION_JSON_VALUE);
-                    new ObjectMapper().writeValue(response.getOutputStream(), tokens);
-                }
+
+                user = opt;
+                String access_token = JWT.create()
+                        .withSubject(user.getEmail())
+                        .withExpiresAt(new Date(System.currentTimeMillis() + 10 * 60 * 1000)) //10 mins
+                        .withIssuer(request.getRequestURL().toString())
+                        .sign(algorithm);
+                Map<String, String> tokens = new HashMap<>();
+                tokens.put("access_token", access_token);
+                tokens.put("refresh_token", refresh_token);
+                response.setContentType(APPLICATION_JSON_VALUE);
+                new ObjectMapper().writeValue(response.getOutputStream(), tokens);
+
             }catch (Exception exception){
                 response.setHeader("error", exception.getMessage());
                 response.setStatus(FORBIDDEN.value());

+ 13 - 2
src/main/java/com/example/plantsforyou/appuser/AppUserService.java

@@ -1,5 +1,9 @@
 package com.example.plantsforyou.appuser;
 
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.interfaces.DecodedJWT;
 import com.example.plantsforyou.registration.token.ConfirmationToken;
 import com.example.plantsforyou.registration.token.ConfirmationTokenService;
 import lombok.AllArgsConstructor;
@@ -11,7 +15,6 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
 import java.util.List;
-import java.util.Optional;
 import java.util.UUID;
 
 @Service
@@ -57,9 +60,17 @@ public class AppUserService implements UserDetailsService {
         return token;
     }
     public List<AppUser> getAppUsers(){ return appUserRepository.findAll(); }
-    public Optional<AppUser> getAppUser(String email){ return appUserRepository.findByEmail(email); }
+
+    public AppUser getAppUser(String email){ return appUserRepository.findByEmail(email).orElseThrow(() ->  new UsernameNotFoundException(String.format(USER_NOT_FOUND_MSG,email)));
+    }
 
     public int enableAppUser(String email) {
         return appUserRepository.enableAppUser(email);
     }
+
+    public AppUser getUserFromToken(String token){
+        JWTVerifier verifier = JWT.require(Algorithm.HMAC256("secret".getBytes())).build();
+        DecodedJWT decodedJWT = verifier.verify(token);
+        return getAppUser((String) decodedJWT.getSubject());
+    }
 }

+ 7 - 0
src/main/java/com/example/plantsforyou/appuser/LoginCredentials.java

@@ -1,5 +1,12 @@
 package com.example.plantsforyou.appuser;
 
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+@Getter
+@AllArgsConstructor
+@NoArgsConstructor
 public class LoginCredentials {
     private String username;
     private String password;

+ 42 - 1
src/main/java/com/example/plantsforyou/cart/Cart.java

@@ -1,2 +1,43 @@
-package com.example.plantsforyou.cart;public class Cart {
+package com.example.plantsforyou.cart;
+
+
+import com.example.plantsforyou.appuser.AppUser;
+import com.example.plantsforyou.plant.Plant;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@NoArgsConstructor
+@Getter
+@Setter
+@Entity
+public class Cart {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    private Date createdDate;
+    @ManyToOne
+    @JoinColumn(name = "plant_id", referencedColumnName = "id")
+    private Plant plant;
+    @JsonIgnore
+    @OneToOne(targetEntity = AppUser.class)
+    private AppUser appUser;
+
+    private int quantity;
+
+    public Cart(Date createdDate, Plant plant, AppUser appUser, int quantity) {
+        this.createdDate = createdDate;
+
+    }
+
+    public Cart(Plant plant, Integer quantity, AppUser appUser) {
+        this.plant = plant;
+        this.appUser = appUser;
+        this.quantity = quantity;
+        this.createdDate = new Date();
+    }
 }

+ 49 - 1
src/main/java/com/example/plantsforyou/cart/CartController.java

@@ -1,2 +1,50 @@
-package com.example.plantsforyou.cart;public class CartController {
+package com.example.plantsforyou.cart;
+
+import com.example.plantsforyou.appuser.AppUser;
+import com.example.plantsforyou.appuser.AppUserService;
+import com.example.plantsforyou.dto.AddToCartDto;
+import com.example.plantsforyou.exceptions.RejectedRequestException;
+import com.example.plantsforyou.plant.Plant;
+import com.example.plantsforyou.plant.PlantService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import java.util.Optional;
+
+@RestController
+@RequestMapping("api/v1/cart")
+public class CartController {
+    private final CartService cartService;
+    private final PlantService plantService;
+    private final AppUserService appUserService;
+
+    @Autowired
+    public CartController(CartService cartService, PlantService plantService, AppUserService appUserService) {
+        this.cartService = cartService;
+        this.plantService = plantService;
+        this.appUserService = appUserService;
+    }
+
+    @PostMapping
+    public ResponseEntity<Object> addToCart(@RequestBody AddToCartDto addToCartDto) throws RejectedRequestException {
+        String token = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("Authorization").substring("Bearer: ".length());
+        AppUser appUser = appUserService.getUserFromToken(token);
+        Plant plant = plantService.findPlantById(addToCartDto.getPlantId());
+        cartService.addToCart(addToCartDto, plant, appUser);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+
+
+
+
+
 }

+ 7 - 1
src/main/java/com/example/plantsforyou/cart/CartRepository.java

@@ -1,2 +1,8 @@
-package com.example.plantsforyou.cart;public interface CartRepository {
+package com.example.plantsforyou.cart;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface CartRepository extends JpaRepository<Cart, Long> {
 }

+ 23 - 1
src/main/java/com/example/plantsforyou/cart/CartService.java

@@ -1,2 +1,24 @@
-package com.example.plantsforyou.cart;public class CartService {
+package com.example.plantsforyou.cart;
+
+import com.example.plantsforyou.appuser.AppUser;
+import com.example.plantsforyou.dto.AddToCartDto;
+import com.example.plantsforyou.plant.Plant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Optional;
+
+@Service
+public class CartService {
+    private final CartRepository cartRepository;
+
+    @Autowired
+    public CartService(CartRepository cartRepository) {
+        this.cartRepository = cartRepository;
+    }
+
+    public void addToCart(AddToCartDto addToCartDto, Plant plant,AppUser appUser) {
+        Cart cart = new Cart(plant,addToCartDto.getQuantity(),appUser);
+        cartRepository.save(cart);
+    }
 }

+ 16 - 1
src/main/java/com/example/plantsforyou/dto/AddToCartDto.java

@@ -1,2 +1,17 @@
-package com.example.plantsforyou.dto;public class AddToCartDto {
+package com.example.plantsforyou.dto;
+
+import com.sun.istack.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@NoArgsConstructor
+@Setter
+@Getter
+@AllArgsConstructor
+public class AddToCartDto {
+    Long id;
+    private @NotNull Long plantId;
+    private @NotNull Integer quantity;
 }

+ 13 - 1
src/main/java/com/example/plantsforyou/exceptions/RejectedRequestException.java

@@ -1,2 +1,14 @@
-package com.example.plantsforyou.exceptions;public class RejectedRequestException {
+package com.example.plantsforyou.exceptions;
+
+import org.springframework.http.HttpStatus;
+
+
+public class RejectedRequestException extends Exception{
+    private final HttpStatus status;
+
+    public RejectedRequestException(String message, HttpStatus status) {
+        super(message);
+        this.status = status;
+    }
+
 }

+ 4 - 4
src/main/java/com/example/plantsforyou/plant/PlantManagementController.java

@@ -23,15 +23,15 @@ public class PlantManagementController {
     }
 
     @PostMapping
-    public ResponseEntity addNewPlant(@RequestBody Plant plant){
+    public ResponseEntity<Object> addNewPlant(@RequestBody Plant plant){
         plantService.addPlant(plant);
-        return new ResponseEntity(HttpStatus.OK);
+        return new ResponseEntity<>(HttpStatus.OK);
     }
 
     @DeleteMapping(path = "{plantID}")
-    public ResponseEntity deletePlant(@PathVariable("plantID") Long plantID){
+    public ResponseEntity<Object> deletePlant(@PathVariable("plantID") Long plantID){
         plantService.delete(plantID);
-        return new ResponseEntity(HttpStatus.OK);
+        return new ResponseEntity<>(HttpStatus.OK);
     }
 
     @PutMapping(path = "{plantID}/inStock")

+ 9 - 1
src/main/java/com/example/plantsforyou/plant/PlantService.java

@@ -1,6 +1,9 @@
 package com.example.plantsforyou.plant;
 
+import com.example.plantsforyou.exceptions.RejectedRequestException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.web.firewall.RequestRejectedException;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -18,7 +21,12 @@ public class PlantService {
     public List<Plant> getAllPlants(){
         return plantRepository.findAll();
     }
-    public Optional<Plant> findPlantById(Long plantID){ return plantRepository.findById(plantID); }
+    public Plant findPlantById(Long plantID) throws RejectedRequestException {
+        if(plantRepository.existsById(plantID)){
+            return plantRepository.getById(plantID);
+        }
+        throw new RejectedRequestException("Item does not exist",HttpStatus.BAD_REQUEST);
+    }
     public void addPlant(Plant plant){
         plantRepository.save(plant);
     }

+ 3 - 3
src/main/resources/application.properties

@@ -1,6 +1,6 @@
-spring.datasource.url=jdbc:postgresql://ec2-99-80-170-190.eu-west-1.compute.amazonaws.com:5432/dav1hstm1q97fa
-spring.datasource.username=avcbegattsywaa
-spring.datasource.password=d176f011dbb9eb34974327d668442fcd4c93e2f17b29c1c9591ddd06037f4f09
+spring.datasource.url=jdbc:postgresql://localhost:5432/plantsforyou
+spring.datasource.username=postgres
+spring.datasource.password=1234
 spring.jpa.hibernate.ddl-auto=create-drop
 spring.jpa.show-sql=true
 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect