feat: add kyc layer service

This commit is contained in:
2025-09-14 16:17:29 +03:30
parent 667d2ce2f4
commit 2da912739b
6 changed files with 159 additions and 59 deletions
+60 -49
View File
@@ -39,12 +39,19 @@ type ChallengeRepo interface {
Delete(ctx context.Context, pubKey string) error
}
type KYCLevel int8
const (
KYCLevel0 KYCLevel = iota
KYCLevel1
KYCLevel2
)
type User struct {
ID uuid.UUID
PubKey string
Name string
//TODO: add Kyc Embedded struct
//TODO: add NFT Embedded struct
ID uuid.UUID
PubKey string
Name string
KYCLevel KYCLevel
LastName string
PhoneNumber string
Email *string
@@ -56,7 +63,54 @@ type User struct {
DeletedAt *time.Time
}
// TODO: move to another file?
func NewUser(pubKey, name, lastName, phoneNumber, email, nationalID string) (*User, error) {
_, err := validate.IsValidPhone(phoneNumber)
if err != nil {
return nil, err
}
_, err = validate.IsValidNationalID(nationalID)
if err != nil {
return nil, err
}
_, err = validate.IsValidPublicKey(pubKey)
if err != nil {
return nil, err
}
return &User{
ID: uuid.New(),
PubKey: pubKey,
Name: name,
LastName: lastName,
PhoneNumber: phoneNumber,
NationalID: nationalID,
CreatedAt: time.Now().UTC(),
UpdatedAt: time.Now().UTC(),
}, nil
}
func (u *User) UpdateLastLogin() {
now := time.Now().UTC()
u.LastLogin = &now
u.UpdatedAt = now
}
func (u *User) UpdateInfo(email string) {
addr, err := mail.ParseAddress(email)
if err == nil {
u.Email = &addr.Address
}
u.UpdatedAt = time.Now().UTC()
}
func (u *User) UpdateKYCLevel(level KYCLevel) {
u.KYCLevel = level
u.UpdatedAt = time.Now().UTC()
}
type Challenge struct {
Message string
TimeStamp time.Time
@@ -106,46 +160,3 @@ func (c *Challenge) VerifySignedBytes(expectedAddress string, msg []byte, sig []
return strings.EqualFold(expectedAddr.Hex(), recoveredAddr.Hex()), nil
}
func NewUser(pubKey, name, lastName, phoneNumber, email, nationalID string) (*User, error) {
_, err := validate.IsValidPhone(phoneNumber)
if err != nil {
return nil, err
}
_, err = validate.IsValidNationalID(nationalID)
if err != nil {
return nil, err
}
_, err = validate.IsValidPublicKey(pubKey)
if err != nil {
return nil, err
}
return &User{
ID: uuid.New(),
PubKey: pubKey,
Name: name,
LastName: lastName,
PhoneNumber: phoneNumber,
NationalID: nationalID,
CreatedAt: time.Now().UTC(),
UpdatedAt: time.Now().UTC(),
}, nil
}
func (u *User) UpdateLastLogin() {
now := time.Now().UTC()
u.LastLogin = &now
u.UpdatedAt = now
}
func (u *User) UpdateInfo(email string) {
addr, err := mail.ParseAddress(email)
if err == nil {
u.Email = &addr.Address
}
u.UpdatedAt = time.Now().UTC()
}