Skip to content

Commit

Permalink
latest
Browse files Browse the repository at this point in the history
  • Loading branch information
samcoydev committed Dec 17, 2023
1 parent c7f5cd0 commit 262f962
Show file tree
Hide file tree
Showing 21 changed files with 510 additions and 5 deletions.
7 changes: 7 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,13 @@
<version>21.0.1</version>
</dependency>

<!-- Open Food Facts -->
<dependency>
<groupId>pl.coderion</groupId>
<artifactId>openfoodfacts-java-wrapper</artifactId>
<version>0.9.3</version>
</dependency>

</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;


@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
@Slf4j
Expand Down Expand Up @@ -55,9 +56,8 @@ protected ResponseEntity<Object> handleUserNotAuthorized(UserNotAuthorizedExcept
protected ResponseEntity<Object> handleException(Exception ex) {
ApiError apiError = new ApiError(HttpStatus.INTERNAL_SERVER_ERROR);
apiError.setMessage(ex.getMessage());
ex.printStackTrace();
return buildResponseEntity(apiError);
}



}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.samcodesthings.shelfliferestapi.controller;

import com.samcodesthings.shelfliferestapi.dto.HouseholdDTO;
import com.samcodesthings.shelfliferestapi.dto.PantryItemDTO;
import com.samcodesthings.shelfliferestapi.dto.ProductDTO;
import com.samcodesthings.shelfliferestapi.service.PantryService;
import lombok.extern.slf4j.Slf4j;
import org.modelmapper.ModelMapper;
import org.modelmapper.TypeToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@Slf4j
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/pantry")
public class PantryController {

@Autowired
PantryService pantryService;

@Autowired
ModelMapper modelMapper;

@GetMapping(path = "/ping", produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String, String> ping() {
log.info("[GET] ping");
return Collections.singletonMap("response", "pong");
}

@GetMapping
public List<PantryItemDTO> getPantryItems() {
List<PantryItemDTO> list = modelMapper.map(pantryService.getPantryItemsByHousehold(), new TypeToken<List<PantryItemDTO>>() {}.getType());
log.info("Mapped items: " + list);
return list;
}

@PostMapping
public PantryItemDTO savePantryItem(@Valid @RequestBody PantryItemDTO pantryItemDTO) {
return modelMapper.map(pantryService.savePantryItem(pantryItemDTO), PantryItemDTO.class);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.samcodesthings.shelfliferestapi.controller;

import com.samcodesthings.shelfliferestapi.dto.ProductDTO;
import com.samcodesthings.shelfliferestapi.service.ProductService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@Slf4j
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/product")
public class ProductController {

@Autowired
ProductService productService;

@GetMapping("/scan{code}")
public ProductDTO scanItem(@PathVariable("code") String code) throws Exception {
log.info("[GET] Scan Item");
return productService.scanProduct(code);
}

@PostMapping("/request")
public ProductDTO requestProductToBeAdded(@RequestBody ProductDTO requestedProductDTO) throws Exception {
log.info("[POST] Adding Request for Product: " + requestedProductDTO.getName());
return productService.requestProductToBeAdded(requestedProductDTO);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.samcodesthings.shelfliferestapi.dao;

import com.samcodesthings.shelfliferestapi.model.Household;
import com.samcodesthings.shelfliferestapi.model.PantryItem;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;
import java.util.Set;

@Repository
public interface PantryDAO extends CrudRepository<PantryItem, String> {

Optional<PantryItem> findById(String id);
Set<PantryItem> findPantryItemsByHousehold(Household household);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.samcodesthings.shelfliferestapi.dao;

import com.samcodesthings.shelfliferestapi.model.PantryItem;
import com.samcodesthings.shelfliferestapi.model.Product;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;
import java.util.Set;

@Repository
public interface ProductDAO extends CrudRepository<Product, String> {

Optional<Product> findById(String id);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.samcodesthings.shelfliferestapi.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

@Data
public class OpenFoodFactsItemDTO {

@JsonProperty("code")
private String code;

@JsonProperty("product_name")
private String name;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.samcodesthings.shelfliferestapi.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;

@Data
public class OpenFoodFactsResponseDTO {

@JsonProperty("count")
private int count;

@JsonProperty("page")
private int page;

@JsonProperty("page_count")
private int pageCount;

@JsonProperty("page_size")
private int pageSize;

@JsonProperty("products")
private List<OpenFoodFactsItemDTO> products;

@JsonProperty("skip")
private int skip;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.samcodesthings.shelfliferestapi.dto;

import lombok.Data;

import java.util.Date;

@Data
public class PantryItemDTO {

private String id;

private ProductDTO product;

private Date expirationDate;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.samcodesthings.shelfliferestapi.dto;

import lombok.Data;

@Data
public class ProductDTO {

private String code;

private String name;

private boolean isPendingRequestGrant;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.samcodesthings.shelfliferestapi.exception;

public class NotFoundException extends Exception {
public NotFoundException(String errorMessage) {
super(errorMessage);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import jakarta.persistence.*;
import lombok.Data;

import java.util.List;

@Entity
@Table(name = "household")
@Data
Expand All @@ -14,4 +16,7 @@ public class Household {

@Column(name = "name")
private String name;

@OneToMany(fetch = FetchType.LAZY)
private List<PantryItem> pantryItems;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.samcodesthings.shelfliferestapi.model;

import jakarta.persistence.*;
import lombok.Data;

import java.util.Date;

@Entity
@Table(name = "pantry_items")
@Data
public class PantryItem {

@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;

@ManyToOne
private Product product;

@ManyToOne
private Household household;

private Date expirationDate;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.samcodesthings.shelfliferestapi.model;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;

@Entity
@Table(name = "products")
@Data
public class Product {

@Id
private String code;

private String name;

private boolean isPendingRequestGrant;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.samcodesthings.shelfliferestapi.service;

import com.samcodesthings.shelfliferestapi.dto.OpenFoodFactsItemDTO;

import java.util.Optional;

public interface OpenFoodFactsService {

Optional<OpenFoodFactsItemDTO> getItemByCode(String code);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.samcodesthings.shelfliferestapi.service;

import com.samcodesthings.shelfliferestapi.dto.PantryItemDTO;
import com.samcodesthings.shelfliferestapi.dto.ProductDTO;
import com.samcodesthings.shelfliferestapi.exception.NotFoundException;
import com.samcodesthings.shelfliferestapi.model.PantryItem;
import com.samcodesthings.shelfliferestapi.model.Product;

import java.util.List;

public interface PantryService {

PantryItem savePantryItem(PantryItemDTO productItemDTO);
List<PantryItem> getPantryItemsByHousehold();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.samcodesthings.shelfliferestapi.service;

import com.samcodesthings.shelfliferestapi.dto.OpenFoodFactsItemDTO;
import com.samcodesthings.shelfliferestapi.dto.ProductDTO;
import com.samcodesthings.shelfliferestapi.exception.NotFoundException;
import com.samcodesthings.shelfliferestapi.model.Product;

import java.util.Optional;

public interface ProductService {
Optional<Product> findProductByCode(String code);
Product saveFoodItem(OpenFoodFactsItemDTO foodItem);
ProductDTO scanProduct(String code) throws Exception;
ProductDTO requestProductToBeAdded(ProductDTO requestedProductDTO) throws Exception;
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package com.samcodesthings.shelfliferestapi.service;

import com.samcodesthings.shelfliferestapi.dto.AlertDTO;
import com.samcodesthings.shelfliferestapi.dto.FriendRequestDTO;
import com.samcodesthings.shelfliferestapi.dto.UserDTO;
import com.samcodesthings.shelfliferestapi.exception.AlertNotFoundException;
import com.samcodesthings.shelfliferestapi.exception.NotAValidRequestException;
import com.samcodesthings.shelfliferestapi.exception.UserNotAuthorizedException;
import com.samcodesthings.shelfliferestapi.exception.UserNotFoundException;
import com.samcodesthings.shelfliferestapi.model.Alert;
import com.samcodesthings.shelfliferestapi.model.Household;
import com.samcodesthings.shelfliferestapi.model.User;
import org.keycloak.representations.idm.UserRepresentation;

import java.util.List;

Expand Down
Loading

0 comments on commit 262f962

Please sign in to comment.