♻️ Add DTOs and mappers
This commit is contained in:
parent
c5bccf477c
commit
d873d19a8c
9
src/main/java/dev/dinauer/maven/app/ArtifactDTO.java
Normal file
9
src/main/java/dev/dinauer/maven/app/ArtifactDTO.java
Normal file
@ -0,0 +1,9 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
import dev.dinauer.maven.user.User;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public record ArtifactDTO(String id, String groupId, String artifactId, List<VersionDTO> versions)
|
||||
{
|
||||
}
|
||||
45
src/main/java/dev/dinauer/maven/app/ArtifactMapper.java
Normal file
45
src/main/java/dev/dinauer/maven/app/ArtifactMapper.java
Normal file
@ -0,0 +1,45 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
import dev.dinauer.maven.maven.core.ArtifactId;
|
||||
import dev.dinauer.maven.maven.core.GroupId;
|
||||
import dev.dinauer.maven.shared.UserReferencing;
|
||||
import dev.dinauer.maven.user.User;
|
||||
import dev.dinauer.maven.user.UserClient;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import org.eclipse.microprofile.rest.client.inject.RestClient;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ApplicationScoped
|
||||
public class ArtifactMapper
|
||||
{
|
||||
@Inject
|
||||
VersionMapper versionMapper;
|
||||
|
||||
@RestClient
|
||||
UserClient userClient;
|
||||
|
||||
public List<ArtifactDTO> map(List<ArtifactId> input)
|
||||
{
|
||||
return input.stream().map(artifact -> this.map(artifact, userClient.get(UserReferencing.collect(input)))).toList();
|
||||
}
|
||||
|
||||
public List<ArtifactDTO> map(List<ArtifactId> input, Map<String, User> users)
|
||||
{
|
||||
return input.stream().map(artifact -> this.map(artifact, users)).toList();
|
||||
}
|
||||
|
||||
public ArtifactDTO map(ArtifactId input)
|
||||
{
|
||||
return map(input, userClient.get(input.getUserIds()));
|
||||
}
|
||||
|
||||
public ArtifactDTO map(ArtifactId input, Map<String, User> users)
|
||||
{
|
||||
return new ArtifactDTO(input.getId(), input.getGroup().getGroupId(), input.getArtifactId(), versionMapper.map(input.getVersions(), users));
|
||||
}
|
||||
}
|
||||
@ -23,23 +23,20 @@ public class ArtifactResource
|
||||
@Inject
|
||||
ArtifactRepo artifactRepo;
|
||||
|
||||
@RestClient
|
||||
UserClient userClient;
|
||||
|
||||
@Inject
|
||||
ResponseEnhancementService responseEnhancementService;
|
||||
ArtifactMapper artifactMapper;
|
||||
|
||||
@GET
|
||||
public EnhancedResponse get()
|
||||
public List<ArtifactDTO> get()
|
||||
{
|
||||
return find();
|
||||
return artifactMapper.map(artifactRepo.listAll());
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/{id}")
|
||||
public ArtifactId getById(@PathParam("id") String id)
|
||||
public ArtifactDTO getById(@PathParam("id") String id)
|
||||
{
|
||||
return artifactRepo.findById(id);
|
||||
return artifactMapper.map(artifactRepo.findById(id));
|
||||
}
|
||||
|
||||
@DELETE
|
||||
@ -49,9 +46,4 @@ public class ArtifactResource
|
||||
{
|
||||
artifactRepo.deleteById(id);
|
||||
}
|
||||
|
||||
private EnhancedResponse find()
|
||||
{
|
||||
return responseEnhancementService.enhance(artifactRepo.listAll());
|
||||
}
|
||||
}
|
||||
|
||||
7
src/main/java/dev/dinauer/maven/app/GroupDTO.java
Normal file
7
src/main/java/dev/dinauer/maven/app/GroupDTO.java
Normal file
@ -0,0 +1,7 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public record GroupDTO(String id, String groupId, List<ArtifactDTO> artifacts)
|
||||
{
|
||||
}
|
||||
34
src/main/java/dev/dinauer/maven/app/GroupMapper.java
Normal file
34
src/main/java/dev/dinauer/maven/app/GroupMapper.java
Normal file
@ -0,0 +1,34 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
import dev.dinauer.maven.maven.core.GroupId;
|
||||
import dev.dinauer.maven.shared.UserReferencing;
|
||||
import dev.dinauer.maven.user.User;
|
||||
import dev.dinauer.maven.user.UserClient;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import org.eclipse.microprofile.rest.client.inject.RestClient;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ApplicationScoped
|
||||
public class GroupMapper
|
||||
{
|
||||
@Inject
|
||||
ArtifactMapper artifactMapper;
|
||||
|
||||
@RestClient
|
||||
UserClient userClient;
|
||||
|
||||
public List<GroupDTO> map(List<GroupId> input)
|
||||
{
|
||||
return input.stream().map(group -> this.map(group, userClient.get(UserReferencing.collect(input)))).toList();
|
||||
}
|
||||
|
||||
public GroupDTO map(GroupId input, Map<String, User> users)
|
||||
{
|
||||
return new GroupDTO(input.getId(), input.getGroupId(), artifactMapper.map(input.getArtifacts(), users));
|
||||
}
|
||||
}
|
||||
@ -29,10 +29,13 @@ public class GroupResource
|
||||
@Inject
|
||||
SecurityIdentity securityIdentity;
|
||||
|
||||
@Inject
|
||||
GroupMapper groupMapper;
|
||||
|
||||
@GET
|
||||
public List<GroupId> get()
|
||||
public List<GroupDTO> get()
|
||||
{
|
||||
return groupRepo.listAll();
|
||||
return groupMapper.map(groupRepo.listAll());
|
||||
}
|
||||
|
||||
@GET
|
||||
|
||||
5
src/main/java/dev/dinauer/maven/app/JarDTO.java
Normal file
5
src/main/java/dev/dinauer/maven/app/JarDTO.java
Normal file
@ -0,0 +1,5 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
public record JarDTO(String filename, String classifier, String md5, String sha1)
|
||||
{
|
||||
}
|
||||
20
src/main/java/dev/dinauer/maven/app/JarMapper.java
Normal file
20
src/main/java/dev/dinauer/maven/app/JarMapper.java
Normal file
@ -0,0 +1,20 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
import dev.dinauer.maven.maven.core.release.ReleaseJar;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ApplicationScoped
|
||||
public class JarMapper
|
||||
{
|
||||
public List<JarDTO> map(List<ReleaseJar> input)
|
||||
{
|
||||
return input.stream().map(this::map).toList();
|
||||
}
|
||||
|
||||
public JarDTO map(ReleaseJar input)
|
||||
{
|
||||
return new JarDTO(input.getFilename(), input.getClassifier(), input.getMd5(), input.getSha1());
|
||||
}
|
||||
}
|
||||
5
src/main/java/dev/dinauer/maven/app/PomDTO.java
Normal file
5
src/main/java/dev/dinauer/maven/app/PomDTO.java
Normal file
@ -0,0 +1,5 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
public record PomDTO(String filename, String md5, String sha1)
|
||||
{
|
||||
}
|
||||
13
src/main/java/dev/dinauer/maven/app/PomMapper.java
Normal file
13
src/main/java/dev/dinauer/maven/app/PomMapper.java
Normal file
@ -0,0 +1,13 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
import dev.dinauer.maven.maven.core.release.ReleasePom;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
|
||||
@ApplicationScoped
|
||||
public class PomMapper
|
||||
{
|
||||
public PomDTO map(ReleasePom input)
|
||||
{
|
||||
return new PomDTO(input.getFilename(), input.getMd5(), input.getSha1());
|
||||
}
|
||||
}
|
||||
35
src/main/java/dev/dinauer/maven/app/ReleaseVersionDTO.java
Normal file
35
src/main/java/dev/dinauer/maven/app/ReleaseVersionDTO.java
Normal file
@ -0,0 +1,35 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
import dev.dinauer.maven.user.User;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ReleaseVersionDTO extends VersionDTO
|
||||
{
|
||||
private final PomDTO pom;
|
||||
private final List<JarDTO> jars;
|
||||
private final User uploadedBy;
|
||||
|
||||
public ReleaseVersionDTO(String id, String version, PomDTO pom, List<JarDTO> jars, User uploadedBy)
|
||||
{
|
||||
super(id, version, false);
|
||||
this.pom = pom;
|
||||
this.jars = jars;
|
||||
this.uploadedBy = uploadedBy;
|
||||
}
|
||||
|
||||
public PomDTO getPom()
|
||||
{
|
||||
return pom;
|
||||
}
|
||||
|
||||
public List<JarDTO> getJars()
|
||||
{
|
||||
return jars;
|
||||
}
|
||||
|
||||
public User getUploadedBy()
|
||||
{
|
||||
return uploadedBy;
|
||||
}
|
||||
}
|
||||
@ -6,8 +6,7 @@ import jakarta.enterprise.context.ApplicationScoped;
|
||||
import org.eclipse.microprofile.rest.client.inject.RestClient;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.Map;
|
||||
|
||||
@ApplicationScoped
|
||||
public class ResponseEnhancementService
|
||||
@ -17,6 +16,6 @@ public class ResponseEnhancementService
|
||||
|
||||
public <P extends UserReferencing> EnhancedResponse enhance(Collection<P> data)
|
||||
{
|
||||
return new EnhancedResponse(data, userClient.get(data.stream().map(UserReferencing::getUserIds).flatMap(List::stream).collect(Collectors.toSet())));
|
||||
return new EnhancedResponse(data, Map.of());
|
||||
}
|
||||
}
|
||||
|
||||
11
src/main/java/dev/dinauer/maven/app/SnapshotVersionDTO.java
Normal file
11
src/main/java/dev/dinauer/maven/app/SnapshotVersionDTO.java
Normal file
@ -0,0 +1,11 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
import dev.dinauer.maven.user.User;
|
||||
|
||||
public class SnapshotVersionDTO extends VersionDTO
|
||||
{
|
||||
public SnapshotVersionDTO(String id, String version)
|
||||
{
|
||||
super(id, version, true);
|
||||
}
|
||||
}
|
||||
30
src/main/java/dev/dinauer/maven/app/VersionDTO.java
Normal file
30
src/main/java/dev/dinauer/maven/app/VersionDTO.java
Normal file
@ -0,0 +1,30 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
public class VersionDTO
|
||||
{
|
||||
private final String id;
|
||||
private final String version;
|
||||
private final boolean isSnapshot;
|
||||
|
||||
public VersionDTO(String id, String version, boolean isSnapshot)
|
||||
{
|
||||
this.id = id;
|
||||
this.version = version;
|
||||
this.isSnapshot = isSnapshot;
|
||||
}
|
||||
|
||||
public String getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getVersion()
|
||||
{
|
||||
return version;
|
||||
}
|
||||
|
||||
public boolean isSnapshot()
|
||||
{
|
||||
return isSnapshot;
|
||||
}
|
||||
}
|
||||
39
src/main/java/dev/dinauer/maven/app/VersionMapper.java
Normal file
39
src/main/java/dev/dinauer/maven/app/VersionMapper.java
Normal file
@ -0,0 +1,39 @@
|
||||
package dev.dinauer.maven.app;
|
||||
|
||||
import dev.dinauer.maven.maven.core.Version;
|
||||
import dev.dinauer.maven.maven.core.release.ReleaseVersion;
|
||||
import dev.dinauer.maven.maven.core.snapshot.SnapshotVersion;
|
||||
import dev.dinauer.maven.user.User;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ApplicationScoped
|
||||
public class VersionMapper
|
||||
{
|
||||
@Inject
|
||||
PomMapper pomMapper;
|
||||
|
||||
@Inject
|
||||
JarMapper jarMapper;
|
||||
|
||||
public List<VersionDTO> map(List<Version> input, Map<String, User> users)
|
||||
{
|
||||
return input.stream().map(version -> this.map(version, users)).toList();
|
||||
}
|
||||
|
||||
public VersionDTO map(Version input, Map<String, User> users)
|
||||
{
|
||||
if (input instanceof ReleaseVersion releaseVersion)
|
||||
{
|
||||
return new ReleaseVersionDTO(releaseVersion.getId(), releaseVersion.getVersion(), pomMapper.map(releaseVersion.getPom()), jarMapper.map(releaseVersion.getJars()), users.get(releaseVersion.getUploadedBy()));
|
||||
}
|
||||
if (input instanceof SnapshotVersion snapshotVersion)
|
||||
{
|
||||
return new SnapshotVersionDTO(snapshotVersion.getId(), snapshotVersion.getVersion());
|
||||
}
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
}
|
||||
@ -9,6 +9,7 @@ import jakarta.persistence.*;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Entity
|
||||
@Table(name = "event")
|
||||
@ -87,8 +88,8 @@ public class Event implements UserReferencing
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getUserIds()
|
||||
public Set<String> getUserIds()
|
||||
{
|
||||
return List.of(userId);
|
||||
return Set.of(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import dev.dinauer.maven.user.User;
|
||||
import dev.dinauer.maven.event.repo.EventRepo;
|
||||
import dev.dinauer.maven.user.UserClient;
|
||||
import io.quarkus.panache.common.Sort;
|
||||
import io.vertx.ext.web.RoutingContext;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
@ -27,7 +28,7 @@ public class EventsResource
|
||||
ResponseEnhancementService responseEnhancementService;
|
||||
|
||||
@GET
|
||||
public EnhancedResponse get()
|
||||
public EnhancedResponse get(RoutingContext context)
|
||||
{
|
||||
return responseEnhancementService.enhance(eventRepo.listAll(Sort.by("timestamp", Sort.Direction.Descending)));
|
||||
}
|
||||
|
||||
@ -10,10 +10,8 @@ import jakarta.persistence.*;
|
||||
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Entity
|
||||
@ -163,13 +161,8 @@ public class ArtifactId implements UserReferencing
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getUserIds()
|
||||
public Set<String> getUserIds()
|
||||
{
|
||||
List<String> userIds = new LinkedList<>();
|
||||
for (ReleaseVersion releaseVersion : releaseVersions)
|
||||
{
|
||||
userIds.addAll(releaseVersion.getUserIds());
|
||||
}
|
||||
return userIds;
|
||||
return getVersions().stream().flatMap(version -> version.getUserIds().stream()).collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,15 +1,18 @@
|
||||
package dev.dinauer.maven.maven.core;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import dev.dinauer.maven.shared.UserReferencing;
|
||||
import jakarta.persistence.*;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Entity
|
||||
@Table(name = "group_id")
|
||||
public class GroupId
|
||||
public class GroupId implements UserReferencing
|
||||
{
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.UUID)
|
||||
@ -33,6 +36,12 @@ public class GroupId
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getUserIds()
|
||||
{
|
||||
return artifacts.stream().flatMap(artifact -> artifact.getUserIds().stream()).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public GroupId setId(String id)
|
||||
{
|
||||
this.id = id;
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package dev.dinauer.maven.maven.core;
|
||||
|
||||
public interface Version
|
||||
import dev.dinauer.maven.shared.UserReferencing;
|
||||
|
||||
public interface Version extends UserReferencing
|
||||
{
|
||||
String getVersion();
|
||||
boolean isSnapshot();
|
||||
|
||||
@ -12,6 +12,7 @@ import java.time.ZonedDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
@Entity
|
||||
@Table(name = "release_version")
|
||||
@ -211,9 +212,9 @@ public class ReleaseVersion implements Version, UserReferencing
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getUserIds()
|
||||
public Set<String> getUserIds()
|
||||
{
|
||||
return List.of(uploadedBy);
|
||||
return Set.of(uploadedBy);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -8,6 +8,8 @@ import jakarta.persistence.*;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Entity
|
||||
@Table(name = "snapshot_version")
|
||||
@ -36,6 +38,12 @@ public class SnapshotVersion implements Version
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getUserIds()
|
||||
{
|
||||
return snapshotBundles.stream().map(SnapshotBundle::getUploadedBy).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public SnapshotVersion setId(String id)
|
||||
{
|
||||
this.id = id;
|
||||
|
||||
@ -2,10 +2,17 @@ package dev.dinauer.maven.shared;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public interface UserReferencing
|
||||
{
|
||||
@JsonIgnore
|
||||
List<String> getUserIds();
|
||||
Set<String> getUserIds();
|
||||
|
||||
static Set<String> collect(Collection<? extends UserReferencing> items)
|
||||
{
|
||||
return items.stream().flatMap(item -> item.getUserIds().stream()).collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user