From 503d483c262ec7c54f72eba4ba613e04a51511cf Mon Sep 17 00:00:00 2001 From: Brutus5000 Date: Mon, 4 Nov 2019 00:45:06 +0100 Subject: [PATCH] Refactor MeController to use Elides JsonApi classes --- .../com/faforever/api/user/MeController.java | 62 ++++++++----------- .../api/web/JsonApiResourceObject.java | 9 --- .../api/web/JsonApiResourceObjectProxy.java | 27 -------- .../api/web/JsonApiSingleResource.java | 19 ------ 4 files changed, 26 insertions(+), 91 deletions(-) delete mode 100644 src/main/java/com/faforever/api/web/JsonApiResourceObject.java delete mode 100644 src/main/java/com/faforever/api/web/JsonApiResourceObjectProxy.java delete mode 100644 src/main/java/com/faforever/api/web/JsonApiSingleResource.java diff --git a/src/main/java/com/faforever/api/user/MeController.java b/src/main/java/com/faforever/api/user/MeController.java index d383bec15..034faf91c 100644 --- a/src/main/java/com/faforever/api/user/MeController.java +++ b/src/main/java/com/faforever/api/user/MeController.java @@ -4,7 +4,10 @@ import com.faforever.api.data.domain.UserGroup; import com.faforever.api.player.PlayerService; import com.faforever.api.security.FafUserDetails; -import com.faforever.api.web.JsonApiSingleResource; +import com.google.common.collect.ImmutableMap; +import com.yahoo.elide.jsonapi.models.Data; +import com.yahoo.elide.jsonapi.models.JsonApiDocument; +import com.yahoo.elide.jsonapi.models.Resource; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import lombok.Builder; @@ -16,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -34,7 +38,7 @@ public MeController(PlayerService playerService) { @ApiOperation("Returns the authentication object of the current user") @ApiResponse(code = 200, message = "Success with JsonApi compliant MeResult") @Secured("ROLE_USER") - public JsonApiSingleResource me(@AuthenticationPrincipal FafUserDetails authentication) { + public JsonApiDocument me(@AuthenticationPrincipal FafUserDetails authentication) { Player player = playerService.getById(authentication.getId()); Set grantedAuthorities = authentication.getAuthorities().stream() @@ -45,41 +49,27 @@ public JsonApiSingleResource me(@AuthenticationPrincipal FafUserDetail .map(UserGroup::getTechnicalName) .collect(Collectors.toSet()); - return MeResult.builder() - .userId(player.getId()) - .userName(player.getLogin()) - .email(player.getEmail()) - .clan(player.getClan() == null ? null : Clan.builder() - .id(player.getClan().getId()) - .membershipId(player.getClanMembership().getId()) - .tag(player.getClan().getTag()) - .name(player.getClan().getName()) - .build() + return new JsonApiDocument(new Data<>( + new Resource("me", + "me", + ImmutableMap.builder() + .put("userId", player.getId()) + .put("userName", player.getLogin()) + .put("email", player.getEmail()) + .put("clan", player.getClan() == null ? Optional.empty() : Clan.builder() + .id(player.getClan().getId()) + .membershipId(player.getClanMembership().getId()) + .tag(player.getClan().getTag()) + .name(player.getClan().getName()) + .build()) + .put("groups", groups) + .put("permissions", grantedAuthorities) + .build(), + null, + null, + null ) - .groups(groups) - .permissions(grantedAuthorities) - .build() - .asJsonApi(); - } - - @Value - @Builder - public static class MeResult { - Integer userId; - String userName; - String email; - Clan clan; - Set groups; - Set permissions; - - @SuppressWarnings("unchecked") - JsonApiSingleResource asJsonApi() { - return JsonApiSingleResource.ofProxy( - () -> "me", - () -> "me", - () -> this - ); - } + )); } @Value diff --git a/src/main/java/com/faforever/api/web/JsonApiResourceObject.java b/src/main/java/com/faforever/api/web/JsonApiResourceObject.java deleted file mode 100644 index 8d2040152..000000000 --- a/src/main/java/com/faforever/api/web/JsonApiResourceObject.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.faforever.api.web; - -public interface JsonApiResourceObject { - String getType(); - - String getId(); - - Object getAttributes(); -} diff --git a/src/main/java/com/faforever/api/web/JsonApiResourceObjectProxy.java b/src/main/java/com/faforever/api/web/JsonApiResourceObjectProxy.java deleted file mode 100644 index 53778a5b1..000000000 --- a/src/main/java/com/faforever/api/web/JsonApiResourceObjectProxy.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.faforever.api.web; - -import java.util.function.Supplier; - -class JsonApiResourceObjectProxy implements JsonApiResourceObject { - private final Supplier typeExtractor; - private final Supplier idExtractor; - private final Supplier attributesExtractor; - - JsonApiResourceObjectProxy(Supplier typeExtractor, Supplier idExtractor, Supplier attributesExtractor) { - this.typeExtractor = typeExtractor; - this.idExtractor = idExtractor; - this.attributesExtractor = attributesExtractor; - } - - public String getType() { - return typeExtractor.get(); - } - - public String getId() { - return idExtractor.get(); - } - - public T getAttributes() { - return attributesExtractor.get(); - } -} diff --git a/src/main/java/com/faforever/api/web/JsonApiSingleResource.java b/src/main/java/com/faforever/api/web/JsonApiSingleResource.java deleted file mode 100644 index ef206ec07..000000000 --- a/src/main/java/com/faforever/api/web/JsonApiSingleResource.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.faforever.api.web; - -import lombok.Value; - -import java.util.function.Supplier; - -@Value -public class JsonApiSingleResource { - JsonApiResourceObject data; - - public static JsonApiSingleResource of(JsonApiResourceObject singleDataObject) { - return new JsonApiSingleResource(singleDataObject); - } - - public static JsonApiSingleResource ofProxy(Supplier typeExtractor, Supplier idExtractor, - Supplier attributesExtractor) { - return new JsonApiSingleResource(new JsonApiResourceObjectProxy<>(typeExtractor, idExtractor, attributesExtractor)); - } -}