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.UserPrefsMapper;
import models.UserPreferenceModel;
import play.libs.Json;
import play.mvc.Http;
import play.mvc.Result;
import service.UserPreferenceService;
import java.io.IOException;
@ResponseTimeLoggingComposition.ResponseTimeLogging
@NoCacheComposition.NoCache
@ErrorHandlingComposition.ErrorHandling
@RequestLoggingComposition.RequestLogging
@CorsComposition.Cors
public class PreferenceControllerV1 extends PoseidonController {
public Result getPreferences(){
UserPreferences preferences = currentApiUser().preferences;
if ( preferences == null) {
preferences = new UserPreferences();
preferences.coordinateFormat = CoordinateFormat.DEGREES_MINUTES_SECONDS;
preferences.showGrid = true;
}
return ok(Json.toJson(preferences));
}
@TokenAuthorize(requiredPermission = PermissionType.READ)
public Result setPreferences(String callback){
JsonNode body = request().body().asJson();
ObjectMapper mapper = new ObjectMapper();
UserPreferences prefs;
try {
prefs = mapper.readValue(body.toString(),UserPreferences.class);
} catch (IOException e) {
return badRequest("json post parameter parsing failure: " + e.getMessage());
}
if ( prefs != null){
User currentApiUser = currentApiUser();
UserPreferenceModel model = new UserPreferenceService(currentApiUser.username)
.updatePreferences(currentApiUser,prefs);
prefs = new UserPrefsMapper().mapToApi(model);
currentApiUser.preferences = prefs;
Http.Context.current().args.put(PoseidonController.USER,currentApiUser);
}
//UserPreferenceModel model =
JsonNode jsonOut = Json.toJson(prefs);
return ok(callback,jsonOut);
}
}