diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/WasteController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/WasteController.java index c40c302cbb4be14b3834d3789ebc8d2506868e32..b7c0bc65b0e924f316cad1d172c5d7df16aa876e 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/WasteController.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/WasteController.java @@ -1,2 +1,42 @@ -package ntnu.idatt2016.v233.SmartMat.controller.group;public class WasteController { +package ntnu.idatt2016.v233.SmartMat.controller.group; + +import lombok.AllArgsConstructor; +import ntnu.idatt2016.v233.SmartMat.entity.Waste; +import ntnu.idatt2016.v233.SmartMat.service.group.WasteService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@AllArgsConstructor +@RestController +@RequestMapping("/api/waste") +public class WasteController { + + private final WasteService wasteService; + + /** + * Saves a new waste + * + * @param waste the waste to save + * @return a ResponseEntity containing the saved waste if it was saved successfully, or a 400 if it wasn't + */ + @PostMapping("/waste") + public ResponseEntity<Waste> createWaste(@RequestBody Waste waste) { + if(wasteService.getWasteById(waste.getWasteId()).isPresent()) { + return ResponseEntity.badRequest().build(); + } + return ResponseEntity.ok(wasteService.createWaste(waste)); + } + + /** + * Gets a waste by its id + * + * @param wasteId the id of the waste + * @return a ResponseEntity containing the waste if it exists, or a 404 if it doesn't + */ + @GetMapping("/waste/{wasteId}") + public ResponseEntity<Waste> getWasteById(@PathVariable("wasteId") long wasteId) { + return wasteService.getWasteById(wasteId) + .map(ResponseEntity::ok) + .orElseGet(() -> ResponseEntity.notFound().build()); + } } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Waste.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Waste.java index 61509ad6c785abc81d2b2baa390c6ea6d2bbe893..a41714a597901942f7672d1a0315bac3be44a673 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Waste.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Waste.java @@ -26,10 +26,10 @@ public class Waste { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "waste_id") - long wasteID; + long wasteId; @Column(name = "group_id") - long groupID; + long groupId; @Column(name = "ean") long ean; diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/WasteRepository.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/WasteRepository.java index dcb350ea2438a811f30ffd140585e59e8123a96e..3b683303023f8a28260bce61be48323d6da453c9 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/WasteRepository.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/WasteRepository.java @@ -1,2 +1,8 @@ -package ntnu.idatt2016.v233.SmartMat.repository.group;public interface WastesRepository { +package ntnu.idatt2016.v233.SmartMat.repository.group; + +import ntnu.idatt2016.v233.SmartMat.entity.Waste; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface WasteRepository extends JpaRepository<Waste, Long> { + } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/WasteService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/WasteService.java index 418e26b2ddd6a3091425d5853e1df90ec16c9447..e8bd9bc53de7d229a2985f2737a557f3976cea15 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/WasteService.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/WasteService.java @@ -1,12 +1,33 @@ package ntnu.idatt2016.v233.SmartMat.service.group; import lombok.AllArgsConstructor; +import ntnu.idatt2016.v233.SmartMat.entity.Waste; +import ntnu.idatt2016.v233.SmartMat.repository.group.WasteRepository; import org.springframework.stereotype.Service; +import java.util.Optional; + @Service @AllArgsConstructor -public class WasteRepository { +public class WasteService { private final WasteRepository wasteRepository; + /** + * Creates a new waste + * + * @param waste the waste to create + * @return the created waste + */ + public Waste createWaste(Waste waste) { + return wasteRepository.save(waste); + } + /** + * Gets a waste by its id + * @param id the id of the waste + * @return an optional containing the waste if it exists + */ + public Optional<Waste> getWasteById(long id) { + return wasteRepository.findById(id); + } } diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/WasteServiceTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/WasteServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..8678692da2132d776150fd4dbb027f6384a63d61 --- /dev/null +++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/WasteServiceTest.java @@ -0,0 +1,74 @@ +package ntnu.idatt2016.v233.SmartMat.service.group; + +import ntnu.idatt2016.v233.SmartMat.entity.Waste; +import ntnu.idatt2016.v233.SmartMat.repository.group.WasteRepository; +import ntnu.idatt2016.v233.SmartMat.service.group.WasteService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.sql.Timestamp; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.when; + +public class WasteServiceTest { + private WasteService wasteService; + + @Mock + private WasteRepository wasteRepository; + + @BeforeEach + public void setUp() { + MockitoAnnotations.openMocks(this); + wasteService = new WasteService(wasteRepository); + } + + @Test + public void testCreateWaste() { + Waste waste = Waste.builder() + .groupId(1L) + .ean(1234567890123L) + .timestamp(new Timestamp(System.currentTimeMillis())) + .amount(1.0) + .unit("kg") + .build(); + + Waste createdWaste = Waste.builder() + .wasteId(1L) + .groupId(1L) + .ean(1234567890123L) + .timestamp(waste.getTimestamp()) + .amount(1.0) + .unit("kg") + .build(); + + when(wasteRepository.save(waste)).thenReturn(createdWaste); + + Waste result = wasteService.createWaste(waste); + + assertEquals(createdWaste, result); + } + + @Test + public void testGetWasteById() { + Waste waste = Waste.builder() + .wasteId(1L) + .groupId(1L) + .ean(1234567890123L) + .timestamp(new Timestamp(System.currentTimeMillis())) + .amount(1.0) + .unit("kg") + .build(); + + when(wasteRepository.findById(1L)).thenReturn(Optional.of(waste)); + + Optional<Waste> result = wasteService.getWasteById(1L); + + assertTrue(result.isPresent()); + assertEquals(waste, result.get()); + } +} diff --git a/target/classes/application.properties b/target/classes/application.properties index f27fe6e4a1a54d1ad0ea483c42161a8973d6190f..b13fdb2403ba71eb04d48c3180a862f33be4f843 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -14,7 +14,8 @@ spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialec # Hibernate ddl auto (create, create-drop, validate, update) spring.jpa.hibernate.ddl-auto = update - +# Set CORS configuration origin address +domain.domain=https://smartmat.app ## info