Compare commits
1 Commits
feb8ec96ad
...
fix/wallet
| Author | SHA1 | Date | |
|---|---|---|---|
| 83c583c04d |
@@ -34,6 +34,8 @@ func (s *Service) SetUserResolver(fn func(username string) (uint, error)) {
|
||||
}
|
||||
|
||||
// resolveUsername converts a username to the user's on-chain pubKeyHex.
|
||||
// If the user exists but has no wallet (e.g. legacy user or failed creation),
|
||||
// a wallet is auto-created on the fly.
|
||||
func (s *Service) resolveUsername(username string) (string, error) {
|
||||
if s.userResolver == nil {
|
||||
return "", fmt.Errorf("user resolver not configured")
|
||||
@@ -44,7 +46,17 @@ func (s *Service) resolveUsername(username string) (string, error) {
|
||||
}
|
||||
uw, err := s.repo.FindByUserID(userID)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("wallet not found")
|
||||
// 지갑이 없으면 자동 생성 시도
|
||||
uw, err = s.CreateWallet(userID)
|
||||
if err != nil {
|
||||
// unique constraint 위반 — 다른 고루틴이 먼저 생성 완료
|
||||
uw, err = s.repo.FindByUserID(userID)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("wallet auto-creation failed: %w", err)
|
||||
}
|
||||
} else {
|
||||
log.Printf("INFO: auto-created wallet for userID=%d (username=%s)", userID, username)
|
||||
}
|
||||
}
|
||||
return uw.PubKeyHex, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user