package controllers;
import api.v1.StandardAccount;
import auth.modules.TokenAuthorize;
import auth.types.PermissionType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import compositions.*;
import mapper.StandardAccountMapper;
import models.StandardAccountModel;
import play.libs.Json;
import play.mvc.Result;
import service.StandardAccountService;
import java.io.IOException;
import java.util.List;
@ResponseTimeLoggingComposition.ResponseTimeLogging
@NoCacheComposition.NoCache
@ErrorHandlingComposition.ErrorHandling
@RequestLoggingComposition.RequestLogging
@CorsComposition.Cors
public class StandardAccountsControllerV1 extends PoseidonController {
@TokenAuthorize(requiredPermission = PermissionType.READ)
public Result getAll() {
StandardAccountService service = new StandardAccountService(currentApiUser().username);
List<StandardAccountModel> standardAccountModels = service.findAll();
List<StandardAccount> standardAccounts = new StandardAccountMapper().mapToApi(standardAccountModels);
return ok(Json.toJson(standardAccounts));
}
@TokenAuthorize(requiredPermission = PermissionType.READ)
public Result get(Long id) {
StandardAccountService service = new StandardAccountService(currentApiUser().username);
StandardAccountModel standardAccountModel = service.getById(id);
if (standardAccountModel == null) return notFound();
StandardAccount standardAccount = new StandardAccountMapper().mapToApi(standardAccountModel);
return ok(Json.toJson(standardAccount));
}
@TokenAuthorize(requiredPermission = PermissionType.READ)
public Result getByName(String name) {
StandardAccountService service = new StandardAccountService(currentApiUser().username);
StandardAccountModel standardAccountModel = service.findByName(name);
if (standardAccountModel == null) return notFound();
StandardAccount standardAccount = new StandardAccountMapper().mapToApi(standardAccountModel);
return ok(Json.toJson(standardAccount));
}
@TokenAuthorize(requiredPermission = PermissionType.READ)
public Result getByAccount(String account) {
StandardAccountService service = new StandardAccountService(currentApiUser().username);
StandardAccountModel standardAccountModel = service.findByAccount(account);
if (standardAccountModel == null) return notFound();
StandardAccount standardAccount = new StandardAccountMapper().mapToApi(standardAccountModel);
return ok(Json.toJson(standardAccount));
}
@TokenAuthorize(requiredPermission = PermissionType.WRITE)
public Result createOrUpdate(String callback) {
JsonNode body = request().body().asJson();
ObjectMapper mapper = new ObjectMapper();
StandardAccount apiStandardAccount;
try {
apiStandardAccount = mapper.readValue(body.toString(),StandardAccount.class);
} catch (IOException e) {
return badRequest("json post parameter parsing failure: " + e.getMessage());
}
StandardAccountModel model = new StandardAccountService(currentApiUser().username).createOrUpdate(apiStandardAccount);
StandardAccount newStandardAccount = new StandardAccountMapper().mapToApi(model);
JsonNode jsonOut = Json.toJson(newStandardAccount);
return ok(callback,jsonOut);
}
@TokenAuthorize(requiredPermission = PermissionType.WRITE)
public Result deleteStandardAccount(Long id) {
StandardAccountModel standardAccountModel = new StandardAccountService(currentApiUser().username).deleteStandardAccount(id);
StandardAccount order = new StandardAccountMapper().mapToApi(standardAccountModel);
return ok(Json.toJson(order));
}
}