Skip to content
Snippets Groups Projects
Commit d5afdc6c authored by Birk Øvstetun Narvhus's avatar Birk Øvstetun Narvhus
Browse files

added services for creating assosiation

parent 51ac233c
No related branches found
No related tags found
No related merge requests found
Showing with 120 additions and 20 deletions
......@@ -8,6 +8,8 @@ import ntnu.idatt2016.v233.SmartMat.service.group.FridgeService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.sql.Date;
/**
* Controller for fridges API, providing endpoints for fridge management
*
......@@ -64,6 +66,7 @@ public class FridgeController {
/**
* Removes a product from the fridge of a group
* todo: remove the date parameter when the frontend is done
*
* @param groupId the id of the group
* group must exist
......@@ -80,7 +83,7 @@ public class FridgeController {
}
try {
if (fridgeService.removeProductFromFridge(groupId, productId)) {
if (fridgeService.removeProductFromFridge(groupId, productId, Date.valueOf("2023-04-24"))) {
return ResponseEntity.ok("Success");
}
return ResponseEntity.badRequest().body("Product not found in the fridge");
......
......@@ -4,7 +4,7 @@ import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import ntnu.idatt2016.v233.SmartMat.entity.Fridge;
import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge;
import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
import java.sql.Date;
......@@ -27,6 +27,8 @@ public class FridgeProductAsso {
@JoinColumn(name = "ean")
private Product ean;
@Id
@MapsId("purchase_date")
@Column(name = "purchase_date")
private Date purchaseDate;
......
......@@ -6,6 +6,7 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.sql.Date;
/**
* This class represents a fridge product association id
......@@ -20,4 +21,6 @@ public class FridgeProductId implements Serializable {
private long fridgeId;
private long ean;
private Date purchaseDate;
}
......@@ -10,14 +10,13 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso;
import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
/**
* Fridge is an entity class representing a fridge in the system.
*
* @author Anders
* @version 1.1.002
* @since 15.04.2023
* @author Anders & Birk
* @version 1.2
* @since 25.04.2023
*/
@NoArgsConstructor
......@@ -34,17 +33,9 @@ public class Fridge{
@Column(name = "group_id")
long groupId;
<<<<<<< HEAD:src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Fridge.java
@OneToMany
@JoinColumn(name = "ean")
@JsonIgnoreProperties("fridge")
List<FridgeProductAsso> products;
=======
@ManyToMany
@JoinTable(name = "fridge_product",
joinColumns = @JoinColumn(name = "fridge_id"),
inverseJoinColumns = @JoinColumn(name = "ean"))
@JsonIgnoreProperties({"allergies", "fridges"})
List<Product> products;
>>>>>>> 538a2102fb1b5e656159ddd04dad3543ea253234:src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java
}
package ntnu.idatt2016.v233.SmartMat.repository.group;
import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso;
import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductId;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* FridgeProductAssoRepository is a repository class for fridge product associations
* @author Birk
* @version 1.0
* @since 25.04.2023
*/
public interface FridgeProductAssoRepository extends JpaRepository<FridgeProductAsso, FridgeProductId> {
}
package ntnu.idatt2016.v233.SmartMat.service.group;
import lombok.AllArgsConstructor;
import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso;
import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge;
import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
import ntnu.idatt2016.v233.SmartMat.repository.ProductRepository;
import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeProductAssoRepository;
import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeRepository;
import ntnu.idatt2016.v233.SmartMat.service.product.ProductService;
import org.springframework.stereotype.Service;
import java.sql.Date;
@Service
@AllArgsConstructor
public class FridgeProductAssoService {
FridgeProductAssoRepository fridgeProductAssoRepository;
FridgeRepository fridgeRepository;
ProductRepository productRepository;
/**
* Creates a fridge product association
* the FridgeProductAssosiation object needs to be added to the fridge and product
* @param fridge the fridge to add the product to
* @param product the product to add to the fridge
* @param purchaseDate the date the product was purchased
* @return the fridge product association
*/
public FridgeProductAsso createFridgeProductAsso(Fridge fridge, Product product, Date purchaseDate) {
FridgeProductAsso temp = new FridgeProductAsso();
temp.setFridgeId(fridge);
temp.setEan(product);
temp.setPurchaseDate(purchaseDate);
fridgeProductAssoRepository.save(temp);
return temp;
}
/**
* Deletes a fridge product association
* @param fridgeProductAsso the fridge product association to delete
*/
public void deleteFridgeProductAsso(FridgeProductAsso fridgeProductAsso) {
fridgeProductAsso.getFridgeId().getProducts().remove(fridgeProductAsso);
fridgeProductAsso.getEan().getFridges().remove(fridgeProductAsso);
fridgeProductAssoRepository.delete(fridgeProductAsso);
fridgeRepository.save(fridgeProductAsso.getFridgeId());
productRepository.save(fridgeProductAsso.getEan());
}
}
package ntnu.idatt2016.v233.SmartMat.service.group;
import lombok.AllArgsConstructor;
import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso;
import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge;
import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeRepository;
import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
import ntnu.idatt2016.v233.SmartMat.service.product.ProductService;
import org.springframework.stereotype.Service;
import java.sql.Date;
import java.time.LocalDate;
import java.util.Optional;
/**
......@@ -23,6 +26,8 @@ public class FridgeService {
private final FridgeRepository fridgeRepository;
private final ProductService productService;
private final FridgeProductAssoService fridgeProductAssoService;
/**
* Gets the fridge of a group
*
......@@ -47,10 +52,11 @@ public class FridgeService {
if (product.isPresent()) {
Product productToAdd = product.get();
if (fridge.getProducts().contains(productToAdd)) {
FridgeProductAsso temp = new FridgeProductAsso(fridge, productToAdd, new Date(LocalDate.now().toEpochDay()));
if (fridge.getProducts().contains(temp)) {
return false;
}
fridge.getProducts().add(productToAdd);
fridge.getProducts().add(temp);
fridgeRepository.save(fridge);
return true;
} else {
......@@ -66,20 +72,35 @@ public class FridgeService {
* @param ean the ean of the product
* @return true if the product was removed
*/
public boolean removeProductFromFridge(long groupId, long ean) {
public boolean removeProductFromFridge(long groupId, long ean, Date purchaseDate) {
Optional<Product> product = productService.getProductById(ean);
Fridge fridge = fridgeRepository.findByGroupId(groupId).orElseThrow(() -> new IllegalArgumentException("Fridge does not exist"));
if (product.isPresent()) {
Product productToRemove = product.get();
if (!fridge.getProducts().contains(productToRemove)) {
if (!fridge.getProducts().contains(
new FridgeProductAsso(fridge, productToRemove, purchaseDate))) {
return false;
}
fridge.getProducts().remove(productToRemove);
fridgeProductAssoService.deleteFridgeProductAsso(new FridgeProductAsso(fridge,
productToRemove, purchaseDate));
fridgeRepository.save(fridge);
return true;
} else {
return false;
}
}
/**
* Updates a fridge
* @param fridge the fridge to update
*/
public void updateFridge(Fridge fridge) {
if (fridgeRepository.findById(fridge.getFridgeId()).isEmpty())
return;
fridgeRepository.save(fridge);
}
}
......@@ -83,5 +83,16 @@ public class ProductService {
return ProductUtil.getVolumeFromProduct(productRepository.findById(id).get());
}
/**
* Updates a product
* @param product The product to update
*/
public void updateProduct(Product product) {
if(productRepository.findById(product.getEan()).isEmpty())
return;
productRepository.save(product);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment