feat(User): better quick signup and phone number validation

This commit is contained in:
TakahashiNg
2026-03-22 08:44:30 +00:00
parent b4d4d3d6d8
commit 3856ae5eac
4 changed files with 38 additions and 6 deletions
+5
View File
@@ -72,6 +72,11 @@
<artifactId>password4j</artifactId>
<version>1.8.2</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
<version>8.13.31</version>
</dependency>
</dependencies>
<build>
@@ -1,7 +1,5 @@
package com.drinkool;
import java.util.UUID;
import com.drinkool.dtos.*;
import com.drinkool.models.Customer;
@@ -28,7 +26,7 @@ public class RestAPI {
public Response quickSignup(QuickSignup input) {
Customer newCustomer = new Customer();
newCustomer.signup(input.phone, UUID.randomUUID().toString().substring(0, 8));
newCustomer.signup(input.phone);
return Response.status(Response.Status.CREATED).build();
}
@@ -3,6 +3,11 @@ package com.drinkool.models;
import io.quarkus.hibernate.orm.panache.PanacheEntity;
import jakarta.persistence.*;
import jakarta.transaction.*;
import jakarta.ws.rs.BadRequestException;
import java.util.UUID;
import com.drinkool.utils.PhoneValidator;
import com.password4j.Password;
@Entity
@@ -23,14 +28,20 @@ public abstract class User extends PanacheEntity {
}
@Transactional
public void signup(String phone, String rawPassword) {
this.signup(phone, phone, rawPassword);
public void signup(String phone) {
this.signup(phone, phone, UUID.randomUUID().toString().substring(0, 32));
}
@Transactional
public void signup(String name, String phone, String rawPassword) {
this.name = name;
if (!PhoneValidator.isValidInternationalPhone(phone)) {
throw new BadRequestException("InvalidPhoneNumber");
} else {
this.phone = phone;
}
this.hashedPassword = Password.hash(rawPassword).withArgon2().getResult();
this.persist();
@@ -0,0 +1,18 @@
package com.drinkool.utils;
import com.google.i18n.phonenumbers.*;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
public class PhoneValidator {
private static final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
public static boolean isValidInternationalPhone(String phone) {
try {
PhoneNumber numberProto = phoneUtil.parse(phone, "VN");
return phoneUtil.isValidNumber(numberProto);
} catch (NumberParseException e) {
return false;
}
}
}