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));
}
}