package controllers;
import api.v1.PositionTag;
import auth.modules.TokenAuthorize;
import auth.types.PermissionType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import compositions.*;
import mapper.PositionTagMapper;
import models.PositionTagModel;
import play.libs.Json;
import play.mvc.Result;
import service.PositionService;
import java.io.IOException;
import java.util.List;
@ResponseTimeLoggingComposition.ResponseTimeLogging
@RequestLoggingComposition.RequestLogging
@NoCacheComposition.NoCache
@ErrorHandlingComposition.ErrorHandling
@CorsComposition.Cors
public class PositionTagControllerV1 extends PoseidonController {
@TokenAuthorize(requiredPermission = PermissionType.READ)
public Result getAll() {
PositionService service = new PositionService(currentApiUser().username);
List<PositionTagModel> positionTagModels = service.findAllTags();
List<PositionTag> tags = new PositionTagMapper().mapToApi(positionTagModels);
return ok(Json.toJson(tags));
}
@TokenAuthorize(requiredPermission = PermissionType.READ)
public Result get(Long id) {
PositionService service = new PositionService(currentApiUser().username);
PositionTagModel positionTagModel = service.getTagById(id);
if ( positionTagModel == null ) return notFound();
PositionTag tag = new PositionTagMapper().mapToApi(positionTagModel);
return ok(Json.toJson(tag));
}
@TokenAuthorize(requiredPermission = PermissionType.READ)
public Result getMatchingTags(String query) {
PositionService service = new PositionService(currentApiUser().username);
List<PositionTagModel> positionTagModels = service.findAllMatchingTags(query);
List<PositionTag> tags = new PositionTagMapper().mapToApi(positionTagModels);
return ok(Json.toJson(tags));
}
@TokenAuthorize(requiredPermission = PermissionType.WRITE)
public Result createOrUpdate(String callback) {
JsonNode body = request().body().asJson();
ObjectMapper mapper = new ObjectMapper();
PositionTag apiTag;
try {
apiTag = mapper.readValue(body.toString(),PositionTag.class);
} catch (IOException e) {
return badRequest("json post parameter parsing failure: " + e.getMessage());
}
PositionTagModel model = new PositionService(currentApiUser().username).createOrUpdateTag(apiTag);
PositionTag newTag= new PositionTagMapper().mapToApi(model);
JsonNode jsonOut = Json.toJson(newTag);
return ok(callback,jsonOut);
}
}