Add projection userAllEmbedded to the whoami endpoint

This commit is contained in:
Marcel Schwarz 2020-05-13 15:50:54 +02:00
parent 89ba108078
commit 71ee4b9bd9
3 changed files with 27 additions and 4 deletions

View File

@ -1,7 +1,7 @@
package de.hft.geotime.controllers; package de.hft.geotime.controllers;
import de.hft.geotime.entities.TimetrackUser; import de.hft.geotime.entities.TimetrackUser;
import de.hft.geotime.entities.projections.UserWithRoleProjection; import de.hft.geotime.entities.projections.UserAllEmbeddedProjection;
import de.hft.geotime.repositories.TimetrackUserRepository; import de.hft.geotime.repositories.TimetrackUserRepository;
import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.projection.ProjectionFactory;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@ -27,9 +27,9 @@ public class UserController {
} }
@GetMapping("/whoami") @GetMapping("/whoami")
public UserWithRoleProjection getUsername(Authentication authentication) { public UserAllEmbeddedProjection getUsername(Authentication authentication) {
TimetrackUser user = userRepository.findFirstByUsername(authentication.getName()); TimetrackUser user = userRepository.findFirstByUsername(authentication.getName());
return projectionFactory.createProjection(UserWithRoleProjection.class, user); return projectionFactory.createProjection(UserAllEmbeddedProjection.class, user);
} }
@PostMapping("/sign-up") @PostMapping("/sign-up")

View File

@ -0,0 +1,23 @@
package de.hft.geotime.entities.projections;
import de.hft.geotime.entities.Location;
import de.hft.geotime.entities.Role;
import de.hft.geotime.entities.TimetrackUser;
import org.springframework.data.rest.core.config.Projection;
@Projection(name = "allEmbedded", types = TimetrackUser.class)
public interface UserAllEmbeddedProjection {
long getId();
String getFirstname();
String getLastname();
String getUsername();
Role getRole();
Location getLocation();
}

View File

@ -5,7 +5,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.rest.core.config.Projection; import org.springframework.data.rest.core.config.Projection;
@Projection(name = "onlyLocation", types = TimetrackUser.class) @Projection(name = "onlyLocation", types = TimetrackUser.class)
public interface UserOnlyLocation { public interface UserOnlyLocationProjection {
@Value("#{target.location.longitude}") @Value("#{target.location.longitude}")
double getLongitude(); double getLongitude();