chore: count space members without retrieving all member info
save some RAM
This commit is contained in:
parent
08f806e405
commit
b48fcbfaa6
3 changed files with 24 additions and 5 deletions
|
|
@ -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,
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue