chore: count space members without retrieving all member info

save some RAM
This commit is contained in:
juancwu 2026-04-11 17:50:16 +00:00
commit b48fcbfaa6
3 changed files with 24 additions and 5 deletions

View file

@ -37,15 +37,16 @@ func (h *spaceHandler) SpacesPage(w http.ResponseWriter, r *http.Request) {
cards := make([]blocks.SpaceCardInfo, 0, len(spaces))
for _, sp := range spaces {
members, err := h.spaceService.GetMembers(sp.ID)
memberCount, err := h.spaceService.GetMemberCount(sp.ID)
if err != nil {
slog.Error("failed to load space members", "error", err, "space_id", sp.ID)
members = nil
slog.Error("failed to get space member count", "error", err, "space_id", sp.ID)
memberCount = 0
}
cards = append(cards, blocks.SpaceCardInfo{
ID: sp.ID,
Name: sp.Name,
MemberCount: len(members),
MemberCount: memberCount,
TotalBalance: decimal.Zero,
Currency: currency.CAD,
})

View file

@ -22,6 +22,7 @@ type SpaceRepository interface {
IsMember(spaceID, userID string) (bool, error)
GetMembers(spaceID string) ([]*model.SpaceMemberWithProfile, error)
UpdateName(spaceID, name string) error
GetMemberCount(spaceID string) (int, error)
Delete(spaceID string) error
}
@ -130,9 +131,18 @@ func (r *spaceRepository) UpdateName(spaceID, name string) error {
return err
}
func (r *spaceRepository) Delete(spaceID string) error {
query := `DELETE FROM spaces WHERE id = $1;`
_, err := r.db.Exec(query, spaceID)
return err
}
func (r *spaceRepository) GetMemberCount(spaceID string) (int, error) {
query := `SELECT COUNT(sm.user_id) FROM space_members sm WHERE sm.space_id = $1`
var count int
err := r.db.Get(&count, query, spaceID)
if err != nil {
return 0, err
}
return count, nil
}

View file

@ -94,3 +94,11 @@ func (s *SpaceService) UpdateSpaceName(spaceID, name string) error {
func (s *SpaceService) DeleteSpace(spaceID string) error {
return s.spaceRepo.Delete(spaceID)
}
func (s *SpaceService) GetMemberCount(spaceID string) (int, error) {
count, err := s.spaceRepo.GetMemberCount(spaceID)
if err != nil {
return 0, fmt.Errorf("failed to get member count: %w", err)
}
return count, nil
}