83 lines
2.1 KiB
Go
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
|
|
}
|