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.CustomerService; 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 CustomerControllerV1 extends PoseidonController { @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getAll() { CustomerService service = new CustomerService(currentApiUser().username); List<CustomerModel> customerModels = service.findAll(); List<Customer> customers = new CustomerMapper().mapToApi(customerModels); return ok(Json.toJson(customers)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result get(Long id) { CustomerService service = new CustomerService(currentApiUser().username); CustomerModel customerModel = service.getById(id); if ( customerModel == null ) return notFound(); Customer customer = new CustomerMapper().mapToApi(customerModel); return ok(Json.toJson(customer)); } @TokenAuthorize(requiredPermission = PermissionType.WRITE) public Result createOrUpdate(String callback) { JsonNode body = request().body().asJson(); ObjectMapper mapper = new ObjectMapper(); Customer apiCustomer; try { apiCustomer = mapper.readValue(body.toString(),Customer.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } CustomerModel model = new CustomerService(currentApiUser().username).createOrUpdate(apiCustomer); Customer newCustomer = new CustomerMapper().mapToApi(model); JsonNode jsonOut = Json.toJson(newCustomer); return ok(callback,jsonOut); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getOrders(Long customerId) { CustomerService service = new CustomerService(currentApiUser().username); List<OrderModel> orderModel = service.getOrdersForCustomer(customerId); List<Order> orders= new OrderMapper().mapToApi(orderModel); return ok(Json.toJson(orders)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getPositions(Long customerId) { PositionService service= new PositionService(currentApiUser().username); List<PositionModel> positionModels = service.getPositionsForCustomer(customerId); List<Position> positions= new PositionMapper().mapToApi(positionModels); return ok(Json.toJson(positions)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getRecipients(Long customerId) { RecipientService service= new RecipientService(currentApiUser().username); List<RecipientModel> recipientModels = service.getRecipientsForCustomer(customerId); List<Recipient> recipients= new RecipientMapper().mapToApi(recipientModels); return ok(Json.toJson(recipients)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getTags(Long customerId) { PositionService service = new PositionService(currentApiUser().username); List<PositionTagCount> tagModels = service.getTagsForCustomer(customerId); List<PositionTag> tags = new PositionTagMapper().mapToApiWithCount(tagModels); return ok(Json.toJson(tags)); } /* Post inn et api.v1.Customer objekt. Hvis kunden ikke finnes i poseidon eller kundedb, returneres 404. Hvis kunden finnes i Poseidon eller Kundedb, returneres 400 (Bad request) med tilhørende forklaring */ @TokenAuthorize(requiredPermission = PermissionType.READ) public Result checkCustomerExists(String callback) { JsonNode body = request().body().asJson(); ObjectMapper mapper = new ObjectMapper(); Customer apiCustomer; try { apiCustomer = mapper.readValue(body.toString(),Customer.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } new CustomerService(currentApiUser().username).checkCustomerExists(apiCustomer); return notFound(); } }