refactors data access layer to use pop ORM for eager loading, adds book titles rented to renters in response body
This commit is contained in:
@@ -2,13 +2,15 @@ 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 []bookish.Renter, err error)
|
||||
FetchDetails(id int) (r bookish.Renter, err error)
|
||||
New(name string, address string, email string, phoneNumber string) (id int, err error)
|
||||
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 {
|
||||
@@ -18,8 +20,8 @@ type service struct {
|
||||
// Service defines behavior for interacting with the renter service.
|
||||
type Service interface {
|
||||
ListRenters() (rr []bookish.Renter, err error)
|
||||
FetchRenter(id int) (r bookish.Renter, err error)
|
||||
RegisterRenter(fullName string, address string, email string, phoneNumber string) (id int, 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.
|
||||
@@ -31,15 +33,50 @@ func NewService(s Storage) *service {
|
||||
|
||||
// ListRenters returns all renters from the renter store.
|
||||
func (s *service) ListRenters() (rr []bookish.Renter, err error) {
|
||||
return s.store.ListAll()
|
||||
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 int) (r bookish.Renter, err error) {
|
||||
return s.store.FetchDetails(id)
|
||||
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 int, err error) {
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user