Files
a301_server/internal/chain/repository.go
2026-03-23 10:45:06 +09:00

51 lines
1.3 KiB
Go

package chain
import "gorm.io/gorm"
type Repository struct {
db *gorm.DB
}
func NewRepository(db *gorm.DB) *Repository {
return &Repository{db: db}
}
func (r *Repository) Create(w *UserWallet) error {
return r.db.Create(w).Error
}
func (r *Repository) FindByUserID(userID uint) (*UserWallet, error) {
var w UserWallet
if err := r.db.Where("user_id = ?", userID).First(&w).Error; err != nil {
return nil, err
}
return &w, nil
}
func (r *Repository) FindByPubKeyHex(pubKeyHex string) (*UserWallet, error) {
var w UserWallet
if err := r.db.Where("pub_key_hex = ?", pubKeyHex).First(&w).Error; err != nil {
return nil, err
}
return &w, nil
}
// FindAllByKeyVersion returns all wallets with the given key version.
func (r *Repository) FindAllByKeyVersion(version int) ([]UserWallet, error) {
var wallets []UserWallet
if err := r.db.Where("key_version = ?", version).Find(&wallets).Error; err != nil {
return nil, err
}
return wallets, nil
}
// UpdateEncryption updates the encryption fields of a wallet.
func (r *Repository) UpdateEncryption(id uint, encPrivKey, encNonce, hkdfSalt string, keyVersion int) error {
return r.db.Model(&UserWallet{}).Where("id = ?", id).Updates(map[string]any{
"encrypted_priv_key": encPrivKey,
"enc_nonce": encNonce,
"hkdf_salt": hkdfSalt,
"key_version": keyVersion,
}).Error
}