fix: move some logic to domain entities

This commit is contained in:
Elton Minetto
2020-10-05 08:49:21 -03:00
parent c008dbab29
commit 098477169a
25 changed files with 493 additions and 183 deletions
+21 -20
View File
@@ -34,12 +34,15 @@ func (s *Service) Borrow(u *entity.User, b *entity.Book) error {
if b.Quantity <= 0 {
return domain.ErrNotEnoughBooks
}
for _, v := range u.Books {
if v == b.ID {
return domain.ErrBookAlreadyBorrowed
}
_, err = u.GetBook(b.ID)
if err == nil {
return domain.ErrBookAlreadyBorrowed
}
err = u.AddBook(b.ID)
if err != nil {
return err
}
u.Books = append(u.Books, b.ID)
err = s.userService.UpdateUser(u)
if err != nil {
return err
@@ -66,13 +69,13 @@ func (s *Service) Return(b *entity.Book) error {
borrowed := false
var borrowedBy entity.ID
for _, u := range all {
for _, bookID := range u.Books {
if bookID == b.ID {
borrowed = true
borrowedBy = u.ID
break
}
_, err := u.GetBook(b.ID)
if err != nil {
continue
}
borrowed = true
borrowedBy = u.ID
break
}
if !borrowed {
return domain.ErrBookNotBorrowed
@@ -81,15 +84,13 @@ func (s *Service) Return(b *entity.Book) error {
if err != nil {
return err
}
for i, j := range u.Books {
if j == b.ID {
u.Books = append(u.Books[:i], u.Books[i+1:]...)
err = s.userService.UpdateUser(u)
if err != nil {
return err
}
break
}
err = u.RemoveBook(b.ID)
if err != nil {
return err
}
err = s.userService.UpdateUser(u)
if err != nil {
return err
}
b.Quantity++
err = s.bookService.UpdateBook(b)