From 9e6de316e5a23b38c29f61bd91e09fb1e5f26937 Mon Sep 17 00:00:00 2001 From: Tucker Siegel <tgsiegel@terpmail.umd.edu> Date: Mon, 17 Apr 2023 15:25:37 -0400 Subject: [PATCH] migrate user to common package to allow sharing across services --- .../umd/dawn/common/entities/Location.java | 34 +++++++ .../edu/umd/dawn/common/entities/User.java | 96 +++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 src/main/java/edu/umd/dawn/common/entities/Location.java create mode 100644 src/main/java/edu/umd/dawn/common/entities/User.java diff --git a/src/main/java/edu/umd/dawn/common/entities/Location.java b/src/main/java/edu/umd/dawn/common/entities/Location.java new file mode 100644 index 0000000..251b47b --- /dev/null +++ b/src/main/java/edu/umd/dawn/common/entities/Location.java @@ -0,0 +1,34 @@ +package edu.umd.dawn.common.entities; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; +import org.springframework.data.mongodb.core.mapping.Field; + +/** + * Location entity + */ +@Data +@Builder +@Deprecated +public class Location { + + @Field("id") + @NotEmpty + private String id; + + @NotNull + private Double latitude; + + @NotNull + private Double longitude; + + @NotEmpty + private String address; + + @Field("display_name") + @JsonProperty("display_name") + private String displayName; +} diff --git a/src/main/java/edu/umd/dawn/common/entities/User.java b/src/main/java/edu/umd/dawn/common/entities/User.java new file mode 100644 index 0000000..7a7eedc --- /dev/null +++ b/src/main/java/edu/umd/dawn/common/entities/User.java @@ -0,0 +1,96 @@ +package edu.umd.dawn.common.entities; + + +import edu.umd.dawn.common.exceptions.DawnException; +import edu.umd.dawn.common.exceptions.DawnExceptionParameters; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Field; +import org.springframework.data.mongodb.core.mapping.FieldType; + +/** + * User entity - shared across all services + */ +@Data +@Document("users") +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class User { + + @Id + @Field(targetType = FieldType.STRING) + private String id; + + private String name; + + private String email; + + private String salt; + + private byte[] hash; + + private String hashVersion; + + private Integer role; + + @Field("newsletter_opt_in") + private Boolean newsletterOptIn; + + @Field("last_logged_in") + private LocalDateTime lastLoggedIn; + + @Field("last_token_refresh") + private LocalDateTime lastTokenRefresh; + + @Field("created_at") + private LocalDateTime createdAt; + + @Field("default_location") + @Deprecated + private Location defaultLocation; + + @Field("favorite_locations") + @Deprecated + private List<Location> favoriteLocations; + + @Field("locations") + private List<String> locations; + + @Field("default_location_v2") + private String defaultLocationV2; + + private Set<String> migrations; + + public void addLocation(String locationId) { + List<String> aList = new ArrayList<>(locations); + aList.add(locationId); + setLocations(aList); + } + + /** + * Will throw if id does not exist + * @param id + */ + public String removeFavoriteLocation(String id) { + List<String> newList = + locations.stream().filter(location -> !location.equals(id)).collect(Collectors.toList()); + + if (newList.size() == locations.size()) { + throw new DawnException(new DawnExceptionParameters(400, "BAD_REQUEST", "location id provided does not exist", "")); + } + + setLocations(newList); + return id; + } +} \ No newline at end of file -- GitLab