♻️ Add DTOs and mappers

This commit is contained in:
Andreas Dinauer 2026-05-03 10:11:59 +02:00
parent c5bccf477c
commit d873d19a8c
23 changed files with 307 additions and 38 deletions

View 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)
{
}

View 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));
}
}

View File

@ -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());
}
}

View File

@ -0,0 +1,7 @@
package dev.dinauer.maven.app;
import java.util.List;
public record GroupDTO(String id, String groupId, List<ArtifactDTO> artifacts)
{
}

View 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));
}
}

View File

@ -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

View File

@ -0,0 +1,5 @@
package dev.dinauer.maven.app;
public record JarDTO(String filename, String classifier, String md5, String sha1)
{
}

View 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());
}
}

View File

@ -0,0 +1,5 @@
package dev.dinauer.maven.app;
public record PomDTO(String filename, String md5, String sha1)
{
}

View 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());
}
}

View 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;
}
}

View File

@ -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());
}
}

View 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);
}
}

View 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;
}
}

View 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();
}
}

View File

@ -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);
}
}

View File

@ -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)));
}

View File

@ -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());
}
}

View File

@ -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;

View File

@ -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();

View File

@ -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

View File

@ -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;

View File

@ -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());
}
}