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.CSVDownloadService; import service.DistributionlistsService; import service.PoseidonPropertyService; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @ResponseTimeLoggingComposition.ResponseTimeLogging @NoCacheComposition.NoCache @ErrorHandlingComposition.ErrorHandling @RequestLoggingComposition.RequestLogging @CorsComposition.Cors public class DistributionlistsControllerV1 extends PoseidonController { public static final String CSV_URL = "/csv/distributionlist/"; public static final String CSV_DIR = "csvfile.distributionlist.dir"; @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getActiveCustomers(String callback) { JsonNode body = request().body().asJson(); ObjectMapper mapper = new ObjectMapper(); DistributionlistParams distributionlistParams; try { distributionlistParams = mapper.readValue(body.toString(), DistributionlistParams.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } DistributionlistsService service = new DistributionlistsService(currentApiUser().username); List<CustomerModel> customerModels = service.findActiveCustomers(distributionlistParams); List<Customer> customers = new CustomerMapper().mapToApi(customerModels); JsonNode jsonOut = Json.toJson(customers); return ok(callback, jsonOut); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getActiveOrders(String callback) { JsonNode body = request().body().asJson(); ObjectMapper mapper = new ObjectMapper(); DistributionlistParams distributionlistParams; try { distributionlistParams = mapper.readValue(body.toString(), DistributionlistParams.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } DistributionlistsService service = new DistributionlistsService(currentApiUser().username); List<OrderModel> orderModels = service.findActiveOrders(distributionlistParams); List<Order> orders = new OrderMapper().mapToApi(orderModels); JsonNode jsonOut = Json.toJson(orders); return ok(callback, jsonOut); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getRecipients(String callback) { JsonNode body = request().body().asJson(); ObjectMapper mapper = new ObjectMapper(); DistributionlistParams distributionlistParams; try { distributionlistParams = mapper.readValue(body.toString(), DistributionlistParams.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } DistributionlistsService service = new DistributionlistsService(currentApiUser().username); List<RecipientModel> recipientModels = service.findRecipients(distributionlistParams); List<Recipient> recipients= new RecipientMapper().mapToApi(recipientModels); JsonNode jsonOut = Json.toJson(recipients); return ok(callback, jsonOut); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result generateDistributionList(String callback) { JsonNode body = request().body().asJson(); ObjectMapper mapper = new ObjectMapper(); DistributionlistParams distributionlistParams; try { distributionlistParams = mapper.readValue(body.toString(), DistributionlistParams.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } DistributionlistsService service = new DistributionlistsService(currentApiUser().username); List<RecipientModel> recipientModels = service.findRecipients(distributionlistParams); String filename = service.writeRecipientsToDisk(distributionlistParams,recipientModels); CSVFile csvFile = new CSVFile(CSV_URL + filename, filename); return ok(Json.toJson(csvFile)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result listGeneratedFiles() { CSVDownloadService service = new CSVDownloadService(); List<CSVFile> csvFiles = service.getCsvFiles(CSV_DIR,CSV_URL); return ok(Json.toJson(csvFiles)); } }