init push
This commit is contained in:
83
internal/service/other_person_service.go
Normal file
83
internal/service/other_person_service.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
otherperson "wucher/internal/domain/other_person"
|
||||
)
|
||||
|
||||
type OtherPersonService struct{ repo otherperson.Repository }
|
||||
|
||||
func NewOtherPersonService(repo otherperson.Repository) *OtherPersonService {
|
||||
return &OtherPersonService{repo: repo}
|
||||
}
|
||||
|
||||
func (s *OtherPersonService) Upsert(ctx context.Context, p *otherperson.OtherPerson) error {
|
||||
return s.repo.Upsert(ctx, p)
|
||||
}
|
||||
|
||||
// Create registers a new master person. Name is required and the (name, mobile_phone,
|
||||
// email) identity must be unique among live rows.
|
||||
func (s *OtherPersonService) Create(ctx context.Context, p *otherperson.OtherPerson) error {
|
||||
p.Name = strings.TrimSpace(p.Name)
|
||||
p.MobilePhone = strings.TrimSpace(p.MobilePhone)
|
||||
p.Email = strings.TrimSpace(p.Email)
|
||||
if p.Name == "" {
|
||||
return otherperson.ErrNameRequired
|
||||
}
|
||||
existing, err := s.repo.FindByIdentity(ctx, p.Name, p.MobilePhone, p.Email)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if existing != nil {
|
||||
return otherperson.ErrDuplicate
|
||||
}
|
||||
return s.repo.Create(ctx, p)
|
||||
}
|
||||
|
||||
// Update replaces the identity fields of an existing master person. The new identity must
|
||||
// not collide with a different live row.
|
||||
func (s *OtherPersonService) Update(ctx context.Context, p *otherperson.OtherPerson) error {
|
||||
p.Name = strings.TrimSpace(p.Name)
|
||||
p.MobilePhone = strings.TrimSpace(p.MobilePhone)
|
||||
p.Email = strings.TrimSpace(p.Email)
|
||||
if p.Name == "" {
|
||||
return otherperson.ErrNameRequired
|
||||
}
|
||||
current, err := s.repo.GetByID(ctx, p.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if current == nil {
|
||||
return otherperson.ErrNotFound
|
||||
}
|
||||
existing, err := s.repo.FindByIdentity(ctx, p.Name, p.MobilePhone, p.Email)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if existing != nil && !bytes.Equal(existing.ID, p.ID) {
|
||||
return otherperson.ErrDuplicate
|
||||
}
|
||||
return s.repo.Update(ctx, p)
|
||||
}
|
||||
|
||||
func (s *OtherPersonService) Delete(ctx context.Context, id, actor []byte) error {
|
||||
current, err := s.repo.GetByID(ctx, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if current == nil {
|
||||
return otherperson.ErrNotFound
|
||||
}
|
||||
return s.repo.Delete(ctx, id, actor)
|
||||
}
|
||||
|
||||
func (s *OtherPersonService) GetByID(ctx context.Context, id []byte) (*otherperson.OtherPerson, error) {
|
||||
return s.repo.GetByID(ctx, id)
|
||||
}
|
||||
|
||||
func (s *OtherPersonService) Search(ctx context.Context, q string, limit, offset int) ([]otherperson.OtherPerson, int64, error) {
|
||||
return s.repo.Search(ctx, q, limit, offset)
|
||||
}
|
||||
Reference in New Issue
Block a user