This commit is contained in:
juancwu 2026-01-14 21:51:08 +00:00
commit dd7f2ebe3e
15 changed files with 373 additions and 70 deletions

View file

@ -5,6 +5,7 @@ import (
"strings"
"time"
"git.juancwu.dev/juancwu/budgit/internal/event"
"git.juancwu.dev/juancwu/budgit/internal/model"
"git.juancwu.dev/juancwu/budgit/internal/repository"
"github.com/google/uuid"
@ -13,12 +14,14 @@ import (
type ShoppingListService struct {
listRepo repository.ShoppingListRepository
itemRepo repository.ListItemRepository
eventBus *event.Broker
}
func NewShoppingListService(listRepo repository.ShoppingListRepository, itemRepo repository.ListItemRepository) *ShoppingListService {
func NewShoppingListService(listRepo repository.ShoppingListRepository, itemRepo repository.ListItemRepository, eventBus *event.Broker) *ShoppingListService {
return &ShoppingListService{
listRepo: listRepo,
itemRepo: itemRepo,
eventBus: eventBus,
}
}
@ -43,6 +46,8 @@ func (s *ShoppingListService) CreateList(spaceID, name string) (*model.ShoppingL
return nil, err
}
s.eventBus.Publish(spaceID, "list_created", nil)
return list, nil
}
@ -76,13 +81,23 @@ func (s *ShoppingListService) UpdateList(listID, name string) (*model.ShoppingLi
}
func (s *ShoppingListService) DeleteList(listID string) error {
// Need spaceID to publish event
list, err := s.listRepo.GetByID(listID)
if err != nil {
return err
}
// First delete all items in the list
err := s.itemRepo.DeleteByListID(listID)
err = s.itemRepo.DeleteByListID(listID)
if err != nil {
return fmt.Errorf("failed to delete items in list: %w", err)
}
// Then delete the list itself
return s.listRepo.Delete(listID)
err = s.listRepo.Delete(listID)
if err == nil {
s.eventBus.Publish(list.SpaceID, "list_deleted", nil)
}
return err
}
// Item methods
@ -108,6 +123,12 @@ func (s *ShoppingListService) AddItemToList(listID, name, createdBy string) (*mo
return nil, err
}
// Get Space ID
list, err := s.listRepo.GetByID(listID)
if err == nil {
s.eventBus.Publish(list.SpaceID, "item_added", nil)
}
return item, nil
}
@ -138,9 +159,27 @@ func (s *ShoppingListService) UpdateItem(itemID, name string, isChecked bool) (*
return nil, err
}
// Get Space ID via List
list, err := s.listRepo.GetByID(item.ListID)
if err == nil {
s.eventBus.Publish(list.SpaceID, "item_updated", nil)
}
return item, nil
}
func (s *ShoppingListService) DeleteItem(itemID string) error {
return s.itemRepo.Delete(itemID)
item, err := s.itemRepo.GetByID(itemID)
if err != nil {
return err
}
err = s.itemRepo.Delete(itemID)
if err == nil {
list, err := s.listRepo.GetByID(item.ListID)
if err == nil {
s.eventBus.Publish(list.SpaceID, "item_deleted", nil)
}
}
return err
}