All checks were successful
Build docs / build-docs (pull_request) Successful in 29s
Label PRs based on size / Check PR size (pull_request) Successful in 27s
CI / Get Changed Files (pull_request) Successful in 34s
CI / Backend Tests (pull_request) Has been skipped
CI / eslint (pull_request) Has been skipped
Pull Request Labeler / labeler (pull_request_target) Successful in 4s
CI / Checkstyle Main (pull_request) Has been skipped
CI / oxlint (pull_request) Has been skipped
CI / Docker frontend validation (pull_request) Has been skipped
CI / prettier (pull_request) Has been skipped
CI / Docker backend validation (pull_request) Has been skipped
CI / test-build (pull_request) Has been skipped
CI / Playwright (pull_request) Has been skipped
Claude PR Review / claude-code (pull_request) Successful in 1m41s
92 lines
No EOL
2.5 KiB
Java
92 lines
No EOL
2.5 KiB
Java
package de.szut.casino.user;
|
|
|
|
import jakarta.persistence.*;
|
|
import lombok.Getter;
|
|
import lombok.NoArgsConstructor;
|
|
import lombok.Setter;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
@Setter
|
|
@Getter
|
|
@Entity
|
|
@NoArgsConstructor
|
|
public class UserEntity {
|
|
@Id
|
|
@GeneratedValue
|
|
private Long id;
|
|
|
|
@Version
|
|
private Long version;
|
|
|
|
@Column(unique = true)
|
|
private String email;
|
|
|
|
@Column(unique = true)
|
|
private String username;
|
|
|
|
private String password;
|
|
|
|
@Column(precision = 19, scale = 2)
|
|
private BigDecimal balance;
|
|
|
|
private Boolean emailVerified = false;
|
|
|
|
private String verificationToken;
|
|
|
|
private String passwordResetToken;
|
|
|
|
@Enumerated(EnumType.STRING)
|
|
private AuthProvider provider = AuthProvider.LOCAL;
|
|
|
|
private String providerId;
|
|
|
|
public UserEntity(String email, String username, String password, BigDecimal balance, String verificationToken) {
|
|
this.email = email;
|
|
this.username = username;
|
|
this.password = password;
|
|
this.balance = balance;
|
|
this.verificationToken = verificationToken;
|
|
}
|
|
|
|
public UserEntity(String email, String username, AuthProvider provider, String providerId, BigDecimal balance) {
|
|
this.email = email;
|
|
this.username = username;
|
|
this.provider = provider;
|
|
this.providerId = providerId;
|
|
this.balance = balance;
|
|
this.emailVerified = true; // OAuth providers verify emails
|
|
}
|
|
|
|
public void addBalance(BigDecimal amountToAdd) {
|
|
if (amountToAdd == null || amountToAdd.compareTo(BigDecimal.ZERO) <= 0) {
|
|
return;
|
|
}
|
|
|
|
if (this.balance == null) {
|
|
this.balance = BigDecimal.ZERO;
|
|
}
|
|
|
|
this.balance = this.balance.add(amountToAdd);
|
|
}
|
|
|
|
public void subtractBalance(BigDecimal amountToSubtract) {
|
|
if (amountToSubtract == null || amountToSubtract.compareTo(BigDecimal.ZERO) <= 0) {
|
|
throw new IllegalArgumentException("Amount to subtract must be positive.");
|
|
}
|
|
|
|
if (this.balance == null) {
|
|
this.balance = BigDecimal.ZERO;
|
|
}
|
|
|
|
if (this.balance.compareTo(amountToSubtract) < 0) {
|
|
throw new IllegalStateException("Insufficient funds to subtract " + amountToSubtract);
|
|
}
|
|
|
|
this.balance = this.balance.subtract(amountToSubtract);
|
|
}
|
|
|
|
public String getEmailAddress() {
|
|
return "${name} <${email}>".replace("${name}", this.username).replace("${email}", this.email);
|
|
}
|
|
} |