owpengram-server/internal/store/memory/phone_change.go
2026-09-01 12:06:31 +03:00

45 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package memory
import (
"context"
"telesrv/internal/domain"
"telesrv/internal/store"
)
// PhoneChangeStore 是测试用内存实现。用户唯一性在 UserStore 锁内维护;
// updateUserPhone 无 PTS所以不向 UpdateEventStore 写 durable event。
type PhoneChangeStore struct {
users *UserStore
events store.UpdateEventStore
}
func NewPhoneChangeStore(users *UserStore, events store.UpdateEventStore) *PhoneChangeStore {
return &PhoneChangeStore{users: users, events: events}
}
func (s *PhoneChangeStore) ChangePhone(_ context.Context, req domain.PhoneChangeRequest) (domain.PhoneChangeResult, error) {
if s == nil || s.users == nil || req.UserID == 0 || !domain.ValidPhone(req.Phone) {
return domain.PhoneChangeResult{}, domain.ErrPhoneNumberInvalid
}
s.users.mu.Lock()
u, ok := s.users.byID[req.UserID]
if !ok {
s.users.mu.Unlock()
return domain.PhoneChangeResult{}, domain.ErrUserNotFound
}
if u.Phone == req.Phone {
s.users.mu.Unlock()
return domain.PhoneChangeResult{User: u}, nil
}
for id, existing := range s.users.byID {
if id != req.UserID && existing.Phone == req.Phone {
s.users.mu.Unlock()
return domain.PhoneChangeResult{}, domain.ErrPhoneNumberOccupied
}
}
u.Phone = req.Phone
s.users.byID[req.UserID] = u
s.users.mu.Unlock()
return domain.PhoneChangeResult{User: u, Changed: true}, nil
}