From a593e090e4f804233c69d8117fa552bf15b8eeb0 Mon Sep 17 00:00:00 2001 From: DualFroz Date: Mon, 24 Aug 2026 12:13:50 +0200 Subject: [PATCH] feat: add user entity and role model --- src/main/java/com/slotline/user/Role.java | 6 ++ src/main/java/com/slotline/user/User.java | 72 +++++++++++++++++++ .../com/slotline/user/UserRepository.java | 12 ++++ 3 files changed, 90 insertions(+) create mode 100644 src/main/java/com/slotline/user/Role.java create mode 100644 src/main/java/com/slotline/user/User.java create mode 100644 src/main/java/com/slotline/user/UserRepository.java diff --git a/src/main/java/com/slotline/user/Role.java b/src/main/java/com/slotline/user/Role.java new file mode 100644 index 0000000..4ee9ee2 --- /dev/null +++ b/src/main/java/com/slotline/user/Role.java @@ -0,0 +1,6 @@ +package com.slotline.user; + +public enum Role { + USER, + ADMIN +} diff --git a/src/main/java/com/slotline/user/User.java b/src/main/java/com/slotline/user/User.java new file mode 100644 index 0000000..0825727 --- /dev/null +++ b/src/main/java/com/slotline/user/User.java @@ -0,0 +1,72 @@ +package com.slotline.user; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +import java.time.Instant; + +@Entity +@Table(name = "app_user") +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "organization_id", nullable = false) + private Long organizationId; + + @Column(nullable = false, unique = true, length = 64) + private String username; + + @Column(name = "password_hash", nullable = false, length = 100) + private String passwordHash; + + @Enumerated(EnumType.STRING) + @Column(nullable = false, length = 16) + private Role role; + + @Column(name = "created_at", nullable = false) + private Instant createdAt; + + protected User() { + } + + public User(Long organizationId, String username, String passwordHash, Role role, Instant createdAt) { + this.organizationId = organizationId; + this.username = username; + this.passwordHash = passwordHash; + this.role = role; + this.createdAt = createdAt; + } + + public Long getId() { + return id; + } + + public Long getOrganizationId() { + return organizationId; + } + + public String getUsername() { + return username; + } + + public String getPasswordHash() { + return passwordHash; + } + + public Role getRole() { + return role; + } + + public Instant getCreatedAt() { + return createdAt; + } +} diff --git a/src/main/java/com/slotline/user/UserRepository.java b/src/main/java/com/slotline/user/UserRepository.java new file mode 100644 index 0000000..b325578 --- /dev/null +++ b/src/main/java/com/slotline/user/UserRepository.java @@ -0,0 +1,12 @@ +package com.slotline.user; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface UserRepository extends JpaRepository { + + Optional findByUsername(String username); + + boolean existsByUsername(String username); +}