Files
bookish/bookish-server/renter/renter.go
T

83 lines
2.1 KiB
Go

package renter
import (
bookish "github.com/davidlick/bookish/bookish-server"
"github.com/davidlick/bookish/bookish-server/models"
"github.com/gobuffalo/uuid"
)
// Storage defines behavior for interacting with the renter store.
type Storage interface {
ListAll() (rr []models.Renter, err error)
FetchDetails(id string) (r models.Renter, err error)
New(name string, address string, email string, phoneNumber string) (id uuid.UUID, err error)
}
type service struct {
store Storage
}
// Service defines behavior for interacting with the renter service.
type Service interface {
ListRenters() (rr []bookish.Renter, err error)
FetchRenter(id string) (r bookish.Renter, err error)
RegisterRenter(fullName string, address string, email string, phoneNumber string) (id uuid.UUID, err error)
}
// NewService creates a new renter service.
func NewService(s Storage) *service {
return &service{
s,
}
}
// ListRenters returns all renters from the renter store.
func (s *service) ListRenters() (rr []bookish.Renter, err error) {
renters, err := s.store.ListAll()
if err != nil {
return nil, err
}
for _, renter := range renters {
r := MutateRenterModel(renter)
rr = append(rr, r)
}
return rr, nil
}
// FetchRenter returns a specific renter from the renter store.
func (s *service) FetchRenter(id string) (r bookish.Renter, err error) {
renter, err := s.store.FetchDetails(id)
if err != nil {
return r, err
}
r = MutateRenterModel(renter)
return r, nil
}
// RegisterRenter registers a new renter in the renter store.
func (s *service) RegisterRenter(fullName string, address string, email string, phoneNumber string) (id uuid.UUID, err error) {
return s.store.New(fullName, address, email, phoneNumber)
}
// MutateRenterModel is a convenience function to mutate a models.Renter into a bookish.Renter.
func MutateRenterModel(m models.Renter) bookish.Renter {
r := bookish.Renter{}
r.ID = m.ID.String()
r.Name = m.Name
r.Address = m.Address
r.Email = m.Email
r.PhoneNumber = m.PhoneNumber
for _, rental := range m.Rentals {
if !rental.ReturnDate.Valid {
r.Rentals = append(r.Rentals, rental.BookTitle)
}
}
return r
}