add SSE
This commit is contained in:
parent
4d6e6799a0
commit
dd7f2ebe3e
15 changed files with 373 additions and 70 deletions
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"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"
|
||||
|
|
@ -22,10 +23,14 @@ type CreateExpenseDTO struct {
|
|||
|
||||
type ExpenseService struct {
|
||||
expenseRepo repository.ExpenseRepository
|
||||
eventBus *event.Broker
|
||||
}
|
||||
|
||||
func NewExpenseService(expenseRepo repository.ExpenseRepository) *ExpenseService {
|
||||
return &ExpenseService{expenseRepo: expenseRepo}
|
||||
func NewExpenseService(expenseRepo repository.ExpenseRepository, eventBus *event.Broker) *ExpenseService {
|
||||
return &ExpenseService{
|
||||
expenseRepo: expenseRepo,
|
||||
eventBus: eventBus,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ExpenseService) CreateExpense(dto CreateExpenseDTO) (*model.Expense, error) {
|
||||
|
|
@ -54,6 +59,14 @@ func (s *ExpenseService) CreateExpense(dto CreateExpenseDTO) (*model.Expense, er
|
|||
return nil, err
|
||||
}
|
||||
|
||||
// Calculate new balance to broadcast
|
||||
balance, _ := s.GetBalanceForSpace(dto.SpaceID)
|
||||
|
||||
s.eventBus.Publish(dto.SpaceID, "balance_changed", map[string]interface{}{
|
||||
"balance": balance,
|
||||
})
|
||||
s.eventBus.Publish(dto.SpaceID, "expenses_updated", nil)
|
||||
|
||||
return expense, nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue