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