From 8511d10343588b0bedbfe7033553720d3cf36418 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Sat, 4 Apr 2026 17:33:43 +0200 Subject: [PATCH] feat: add environment entity, repository, and status enum --- .../saas/environment/EnvironmentEntity.java | 62 +++++++++++++++++++ .../environment/EnvironmentRepository.java | 20 ++++++ .../saas/environment/EnvironmentStatus.java | 5 ++ 3 files changed, 87 insertions(+) create mode 100644 src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentEntity.java create mode 100644 src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentRepository.java create mode 100644 src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentStatus.java diff --git a/src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentEntity.java b/src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentEntity.java new file mode 100644 index 0000000..ed49610 --- /dev/null +++ b/src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentEntity.java @@ -0,0 +1,62 @@ +package net.siegeln.cameleer.saas.environment; + +import jakarta.persistence.*; +import java.time.Instant; +import java.util.UUID; + +@Entity +@Table(name = "environments") +public class EnvironmentEntity { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private UUID id; + + @Column(name = "tenant_id", nullable = false) + private UUID tenantId; + + @Column(nullable = false, length = 100) + private String slug; + + @Column(name = "display_name", nullable = false) + private String displayName; + + @Column(name = "bootstrap_token", nullable = false, columnDefinition = "TEXT") + private String bootstrapToken; + + @Enumerated(EnumType.STRING) + @Column(nullable = false, length = 20) + private EnvironmentStatus status = EnvironmentStatus.ACTIVE; + + @Column(name = "created_at", nullable = false) + private Instant createdAt; + + @Column(name = "updated_at", nullable = false) + private Instant updatedAt; + + @PrePersist + protected void onCreate() { + createdAt = Instant.now(); + updatedAt = Instant.now(); + } + + @PreUpdate + protected void onUpdate() { + updatedAt = Instant.now(); + } + + public UUID getId() { return id; } + public void setId(UUID id) { this.id = id; } + public UUID getTenantId() { return tenantId; } + public void setTenantId(UUID tenantId) { this.tenantId = tenantId; } + public String getSlug() { return slug; } + public void setSlug(String slug) { this.slug = slug; } + public String getDisplayName() { return displayName; } + public void setDisplayName(String displayName) { this.displayName = displayName; } + public String getBootstrapToken() { return bootstrapToken; } + public void setBootstrapToken(String bootstrapToken) { this.bootstrapToken = bootstrapToken; } + public EnvironmentStatus getStatus() { return status; } + public void setStatus(EnvironmentStatus status) { this.status = status; } + public Instant getCreatedAt() { return createdAt; } + public Instant getUpdatedAt() { return updatedAt; } +} diff --git a/src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentRepository.java b/src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentRepository.java new file mode 100644 index 0000000..5d659c1 --- /dev/null +++ b/src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentRepository.java @@ -0,0 +1,20 @@ +package net.siegeln.cameleer.saas.environment; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface EnvironmentRepository extends JpaRepository { + + List findByTenantId(UUID tenantId); + + Optional findByTenantIdAndSlug(UUID tenantId, String slug); + + long countByTenantId(UUID tenantId); + + boolean existsByTenantIdAndSlug(UUID tenantId, String slug); +} diff --git a/src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentStatus.java b/src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentStatus.java new file mode 100644 index 0000000..e3a0611 --- /dev/null +++ b/src/main/java/net/siegeln/cameleer/saas/environment/EnvironmentStatus.java @@ -0,0 +1,5 @@ +package net.siegeln.cameleer.saas.environment; + +public enum EnvironmentStatus { + ACTIVE, SUSPENDED +}