From 9e28c1c7f34e6260c26ea017254fead917c8ddea Mon Sep 17 00:00:00 2001 From: Andreas Dinauer Date: Sun, 12 Apr 2026 16:34:37 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A7=20Delete=20token=20feature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev/dinauer/maven/app/ArtifactResource.java | 14 ++++++++++++++ .../dinauer/maven/{jpa/events => event}/Event.java | 2 +- .../maven/{jpa/events => event}/EventType.java | 2 +- .../maven/{app => event}/EventsResource.java | 6 ++---- .../maven/{jpa/events => event}/Resource.java | 2 +- .../{jpa/events => event}/repo/EventRepo.java | 4 ++-- .../dev/dinauer/maven/jpa/maven/ArtifactId.java | 6 ++++-- .../java/dev/dinauer/maven/jpa/maven/GroupId.java | 2 +- .../java/dev/dinauer/maven/jpa/maven/Version.java | 2 +- .../dinauer/maven/maven/core/VersionService.java | 8 ++++---- .../dinauer/maven/maven/token/TokenResource.java | 14 +++++++++----- .../dinauer/maven/maven/token/TokenService.java | 14 +++++++++++++- .../dev/dinauer/maven/maven/token/dto/Token.java | 2 +- .../dinauer/maven/maven/token/dto/TokenSecret.java | 2 +- 14 files changed, 55 insertions(+), 25 deletions(-) rename src/main/java/dev/dinauer/maven/{jpa/events => event}/Event.java (97%) rename src/main/java/dev/dinauer/maven/{jpa/events => event}/EventType.java (54%) rename src/main/java/dev/dinauer/maven/{app => event}/EventsResource.java (87%) rename src/main/java/dev/dinauer/maven/{jpa/events => event}/Resource.java (97%) rename src/main/java/dev/dinauer/maven/{jpa/events => event}/repo/EventRepo.java (71%) diff --git a/src/main/java/dev/dinauer/maven/app/ArtifactResource.java b/src/main/java/dev/dinauer/maven/app/ArtifactResource.java index b7664f8..14b11c7 100644 --- a/src/main/java/dev/dinauer/maven/app/ArtifactResource.java +++ b/src/main/java/dev/dinauer/maven/app/ArtifactResource.java @@ -1,11 +1,14 @@ package dev.dinauer.maven.app; +import dev.dinauer.maven.jpa.maven.repo.VersionRepo; import dev.dinauer.maven.user.User; import dev.dinauer.maven.jpa.maven.Version; import dev.dinauer.maven.jpa.maven.repo.ArtifactRepo; import dev.dinauer.maven.jpa.maven.ArtifactId; import dev.dinauer.maven.user.UserClient; import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; @@ -24,6 +27,9 @@ public class ArtifactResource @RestClient UserClient userClient; + @Inject + VersionRepo versionRepo; + @GET public List get() { @@ -37,6 +43,14 @@ public class ArtifactResource return artifactRepo.findById(id); } + @DELETE + @Path("/{id}") + @Transactional + public void deleteById(@PathParam("id") String id) + { + artifactRepo.deleteById(id); + } + private List find() { List artifactIds = artifactRepo.listAll(); diff --git a/src/main/java/dev/dinauer/maven/jpa/events/Event.java b/src/main/java/dev/dinauer/maven/event/Event.java similarity index 97% rename from src/main/java/dev/dinauer/maven/jpa/events/Event.java rename to src/main/java/dev/dinauer/maven/event/Event.java index 46a3fa1..2556e1e 100644 --- a/src/main/java/dev/dinauer/maven/jpa/events/Event.java +++ b/src/main/java/dev/dinauer/maven/event/Event.java @@ -1,4 +1,4 @@ -package dev.dinauer.maven.jpa.events; +package dev.dinauer.maven.event; import com.fasterxml.jackson.annotation.JsonManagedReference; import dev.dinauer.maven.user.User; diff --git a/src/main/java/dev/dinauer/maven/jpa/events/EventType.java b/src/main/java/dev/dinauer/maven/event/EventType.java similarity index 54% rename from src/main/java/dev/dinauer/maven/jpa/events/EventType.java rename to src/main/java/dev/dinauer/maven/event/EventType.java index 515fc2f..bd46166 100644 --- a/src/main/java/dev/dinauer/maven/jpa/events/EventType.java +++ b/src/main/java/dev/dinauer/maven/event/EventType.java @@ -1,4 +1,4 @@ -package dev.dinauer.maven.jpa.events; +package dev.dinauer.maven.event; public enum EventType { diff --git a/src/main/java/dev/dinauer/maven/app/EventsResource.java b/src/main/java/dev/dinauer/maven/event/EventsResource.java similarity index 87% rename from src/main/java/dev/dinauer/maven/app/EventsResource.java rename to src/main/java/dev/dinauer/maven/event/EventsResource.java index 485d518..02647df 100644 --- a/src/main/java/dev/dinauer/maven/app/EventsResource.java +++ b/src/main/java/dev/dinauer/maven/event/EventsResource.java @@ -1,11 +1,9 @@ -package dev.dinauer.maven.app; +package dev.dinauer.maven.event; import dev.dinauer.maven.user.User; -import dev.dinauer.maven.jpa.events.Event; -import dev.dinauer.maven.jpa.events.repo.EventRepo; +import dev.dinauer.maven.event.repo.EventRepo; import dev.dinauer.maven.user.UserClient; import io.quarkus.panache.common.Sort; -import io.quarkus.security.Authenticated; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; diff --git a/src/main/java/dev/dinauer/maven/jpa/events/Resource.java b/src/main/java/dev/dinauer/maven/event/Resource.java similarity index 97% rename from src/main/java/dev/dinauer/maven/jpa/events/Resource.java rename to src/main/java/dev/dinauer/maven/event/Resource.java index 586c295..d626bac 100644 --- a/src/main/java/dev/dinauer/maven/jpa/events/Resource.java +++ b/src/main/java/dev/dinauer/maven/event/Resource.java @@ -1,4 +1,4 @@ -package dev.dinauer.maven.jpa.events; +package dev.dinauer.maven.event; import com.fasterxml.jackson.annotation.JsonBackReference; import jakarta.persistence.*; diff --git a/src/main/java/dev/dinauer/maven/jpa/events/repo/EventRepo.java b/src/main/java/dev/dinauer/maven/event/repo/EventRepo.java similarity index 71% rename from src/main/java/dev/dinauer/maven/jpa/events/repo/EventRepo.java rename to src/main/java/dev/dinauer/maven/event/repo/EventRepo.java index 4ce41d8..f1d8ec4 100644 --- a/src/main/java/dev/dinauer/maven/jpa/events/repo/EventRepo.java +++ b/src/main/java/dev/dinauer/maven/event/repo/EventRepo.java @@ -1,6 +1,6 @@ -package dev.dinauer.maven.jpa.events.repo; +package dev.dinauer.maven.event.repo; -import dev.dinauer.maven.jpa.events.Event; +import dev.dinauer.maven.event.Event; import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase; import jakarta.enterprise.context.ApplicationScoped; diff --git a/src/main/java/dev/dinauer/maven/jpa/maven/ArtifactId.java b/src/main/java/dev/dinauer/maven/jpa/maven/ArtifactId.java index 6af583e..451ff60 100644 --- a/src/main/java/dev/dinauer/maven/jpa/maven/ArtifactId.java +++ b/src/main/java/dev/dinauer/maven/jpa/maven/ArtifactId.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonManagedReference; import jakarta.persistence.*; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -25,12 +27,12 @@ public class ArtifactId @Column(name = "artifact_id") private String artifactId; - @ManyToOne(cascade = CascadeType.ALL) + @ManyToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "group_id") @JsonBackReference private GroupId group; - @OneToMany(mappedBy = "artifact") + @OneToMany(mappedBy = "artifact", cascade = CascadeType.REMOVE) @JsonManagedReference private List versions = new ArrayList<>(); diff --git a/src/main/java/dev/dinauer/maven/jpa/maven/GroupId.java b/src/main/java/dev/dinauer/maven/jpa/maven/GroupId.java index 2e40e7a..3465796 100644 --- a/src/main/java/dev/dinauer/maven/jpa/maven/GroupId.java +++ b/src/main/java/dev/dinauer/maven/jpa/maven/GroupId.java @@ -18,7 +18,7 @@ public class GroupId @Column(name = "group_id") private String groupId; - @OneToMany(mappedBy = "group") + @OneToMany(mappedBy = "group", cascade = CascadeType.REMOVE) @JsonManagedReference private List artifacts = new ArrayList<>(); diff --git a/src/main/java/dev/dinauer/maven/jpa/maven/Version.java b/src/main/java/dev/dinauer/maven/jpa/maven/Version.java index 492f324..0ad96a2 100644 --- a/src/main/java/dev/dinauer/maven/jpa/maven/Version.java +++ b/src/main/java/dev/dinauer/maven/jpa/maven/Version.java @@ -26,7 +26,7 @@ public class Version private String version; - @ManyToOne(cascade = CascadeType.ALL) + @ManyToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "artifact_id") @JsonBackReference private ArtifactId artifact; diff --git a/src/main/java/dev/dinauer/maven/maven/core/VersionService.java b/src/main/java/dev/dinauer/maven/maven/core/VersionService.java index 7651d69..5fa37d9 100644 --- a/src/main/java/dev/dinauer/maven/maven/core/VersionService.java +++ b/src/main/java/dev/dinauer/maven/maven/core/VersionService.java @@ -1,9 +1,9 @@ package dev.dinauer.maven.maven.core; -import dev.dinauer.maven.jpa.events.Event; -import dev.dinauer.maven.jpa.events.EventType; -import dev.dinauer.maven.jpa.events.Resource; -import dev.dinauer.maven.jpa.events.repo.EventRepo; +import dev.dinauer.maven.event.Event; +import dev.dinauer.maven.event.EventType; +import dev.dinauer.maven.event.Resource; +import dev.dinauer.maven.event.repo.EventRepo; import dev.dinauer.maven.jpa.maven.ArtifactId; import dev.dinauer.maven.jpa.maven.Version; import dev.dinauer.maven.jpa.maven.repo.VersionRepo; diff --git a/src/main/java/dev/dinauer/maven/maven/token/TokenResource.java b/src/main/java/dev/dinauer/maven/maven/token/TokenResource.java index 1ea1284..16ee5a8 100644 --- a/src/main/java/dev/dinauer/maven/maven/token/TokenResource.java +++ b/src/main/java/dev/dinauer/maven/maven/token/TokenResource.java @@ -5,9 +5,7 @@ import dev.dinauer.maven.maven.token.dto.TokenCreation; import dev.dinauer.maven.maven.token.dto.TokenSecret; import jakarta.inject.Inject; import jakarta.transaction.Transactional; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.Path; +import jakarta.ws.rs.*; import jakarta.ws.rs.core.SecurityContext; import java.util.List; @@ -27,13 +25,19 @@ public class TokenResource @GET public List get() { - return tokenRepo.findByUserId(securityContext.getUserPrincipal().getName()).stream().map(item -> new Token(item.getName(), item.getExpiresAt(), item.getCreatedAt())).toList(); + return tokenRepo.findByUserId(securityContext.getUserPrincipal().getName()).stream().map(item -> new Token(item.getId(), item.getName(), item.getExpiresAt(), item.getCreatedAt())).toList(); } @POST - @Transactional public TokenSecret create(TokenCreation tokenCreation) { return tokenService.create(tokenCreation); } + + @DELETE + @Path("/{id}") + public void delete(@PathParam("id") String id) + { + tokenService.delete(id); + } } diff --git a/src/main/java/dev/dinauer/maven/maven/token/TokenService.java b/src/main/java/dev/dinauer/maven/maven/token/TokenService.java index 4e33648..81eef2f 100644 --- a/src/main/java/dev/dinauer/maven/maven/token/TokenService.java +++ b/src/main/java/dev/dinauer/maven/maven/token/TokenService.java @@ -8,6 +8,7 @@ import io.vertx.core.http.HttpHeaders; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import io.vertx.core.http.HttpServerRequest; +import jakarta.transaction.Transactional; import jakarta.ws.rs.BadRequestException; import jakarta.ws.rs.core.SecurityContext; import org.eclipse.microprofile.config.inject.ConfigProperty; @@ -29,6 +30,7 @@ public class TokenService @Inject SecurityContext securityContext; + @Transactional public TokenSecret create(TokenCreation tokenCreation) { String secret = UUID.randomUUID().toString(); @@ -39,7 +41,17 @@ public class TokenService .setExpiresAt(tokenCreation.expiresAt()) .setCreatedAt(ZonedDateTime.now()); tokenRepo.persist(entity); - return new TokenSecret(tokenCreation.name(), tokenCreation.expiresAt(), secret, entity.getCreatedAt()); + return new TokenSecret(entity.getId(), tokenCreation.name(), tokenCreation.expiresAt(), secret, entity.getCreatedAt()); + } + + @Transactional + public void delete(String id) + { + TokenEntity token = tokenRepo.findById(id); + if (securityContext.getUserPrincipal().getName().equals(token.getUserId())) + { + tokenRepo.delete(token); + } } public String require() diff --git a/src/main/java/dev/dinauer/maven/maven/token/dto/Token.java b/src/main/java/dev/dinauer/maven/maven/token/dto/Token.java index 3ded0fe..bb5c814 100644 --- a/src/main/java/dev/dinauer/maven/maven/token/dto/Token.java +++ b/src/main/java/dev/dinauer/maven/maven/token/dto/Token.java @@ -3,6 +3,6 @@ package dev.dinauer.maven.maven.token.dto; import java.time.LocalDate; import java.time.ZonedDateTime; -public record Token(String name, LocalDate expiresAt, ZonedDateTime createdAt) +public record Token(String id, String name, LocalDate expiresAt, ZonedDateTime createdAt) { } diff --git a/src/main/java/dev/dinauer/maven/maven/token/dto/TokenSecret.java b/src/main/java/dev/dinauer/maven/maven/token/dto/TokenSecret.java index 6e153fa..5694604 100644 --- a/src/main/java/dev/dinauer/maven/maven/token/dto/TokenSecret.java +++ b/src/main/java/dev/dinauer/maven/maven/token/dto/TokenSecret.java @@ -3,6 +3,6 @@ package dev.dinauer.maven.maven.token.dto; import java.time.LocalDate; import java.time.ZonedDateTime; -public record TokenSecret(String name, LocalDate expiresAt, String token, ZonedDateTime createdAt) +public record TokenSecret(String id, String name, LocalDate expiresAt, String token, ZonedDateTime createdAt) { }