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:
David Lick
2020-05-31 00:40:32 -04:00
parent a06b4d70ab
commit 28e52a4e08
29 changed files with 732 additions and 287 deletions
+46 -9
View File
@@ -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
}