package controllers; import api.v1.*; import auth.modules.TokenAuthorize; import auth.types.PermissionType; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import compositions.*; import mapper.*; import models.*; import play.libs.Json; import play.mvc.Result; import service.OrderService; import service.ProductService; import service.PositionService; import service.RecipientService; import java.io.IOException; import java.util.List; @ResponseTimeLoggingComposition.ResponseTimeLogging @NoCacheComposition.NoCache @ErrorHandlingComposition.ErrorHandling @RequestLoggingComposition.RequestLogging @CorsComposition.Cors public class ProductControllerV1 extends PoseidonController { @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getAll() { ProductService service = new ProductService(currentApiUser().username); List<ProductModel> productModels = service.findAll(); List<Product> products = new ProductMapper().mapToApi(productModels); return ok(Json.toJson(products)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result get(Long id) { ProductService service = new ProductService(currentApiUser().username); ProductModel productModel = service.getById(id); if (productModel == null) return notFound(); Product product = new ProductMapper().mapToApi(productModel); return ok(Json.toJson(product)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getByName(String name) { ProductService service = new ProductService(currentApiUser().username); ProductModel productModel = service.findByName(name); if (productModel == null) return notFound(); Product product = new ProductMapper().mapToApi(productModel); return ok(Json.toJson(product)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getBySku(String name) { ProductService service = new ProductService(currentApiUser().username); ProductModel productModel = service.findBySku(name); if (productModel == null) return notFound(); Product product = new ProductMapper().mapToApi(productModel); return ok(Json.toJson(product)); } @TokenAuthorize(requiredPermission = PermissionType.WRITE) public Result createOrUpdate(String callback) { JsonNode body = request().body().asJson(); ObjectMapper mapper = new ObjectMapper(); Product apiProduct; try { apiProduct = mapper.readValue(body.toString(),Product.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } ProductModel model = new ProductService(currentApiUser().username).createOrUpdate(apiProduct); Product newProduct = new ProductMapper().mapToApi(model); JsonNode jsonOut = Json.toJson(newProduct); return ok(callback,jsonOut); } @TokenAuthorize(requiredPermission = PermissionType.WRITE) public Result deleteProduct(Long id) { ProductModel productModel = new ProductService(currentApiUser().username).deleteProduct(id); Product order = new ProductMapper().mapToApi(productModel); return ok(Json.toJson(order)); } }