🚧 Delete token feature

This commit is contained in:
Andreas Dinauer 2026-04-12 16:34:37 +02:00
parent 38fcb3e84c
commit 9e28c1c7f3
14 changed files with 55 additions and 25 deletions

View File

@ -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<ArtifactId> 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<ArtifactId> find()
{
List<ArtifactId> artifactIds = artifactRepo.listAll();

View File

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

View File

@ -1,4 +1,4 @@
package dev.dinauer.maven.jpa.events;
package dev.dinauer.maven.event;
public enum EventType
{

View File

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

View File

@ -1,4 +1,4 @@
package dev.dinauer.maven.jpa.events;
package dev.dinauer.maven.event;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*;

View File

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

View File

@ -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<Version> versions = new ArrayList<>();

View File

@ -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<ArtifactId> artifacts = new ArrayList<>();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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