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))
|
cards := make([]blocks.SpaceCardInfo, 0, len(spaces))
|
||||||
for _, sp := range spaces {
|
for _, sp := range spaces {
|
||||||
members, err := h.spaceService.GetMembers(sp.ID)
|
memberCount, err := h.spaceService.GetMemberCount(sp.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("failed to load space members", "error", err, "space_id", sp.ID)
|
slog.Error("failed to get space member count", "error", err, "space_id", sp.ID)
|
||||||
members = nil
|
memberCount = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
cards = append(cards, blocks.SpaceCardInfo{
|
cards = append(cards, blocks.SpaceCardInfo{
|
||||||
ID: sp.ID,
|
ID: sp.ID,
|
||||||
Name: sp.Name,
|
Name: sp.Name,
|
||||||
MemberCount: len(members),
|
MemberCount: memberCount,
|
||||||
TotalBalance: decimal.Zero,
|
TotalBalance: decimal.Zero,
|
||||||
Currency: currency.CAD,
|
Currency: currency.CAD,
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ type SpaceRepository interface {
|
||||||
IsMember(spaceID, userID string) (bool, error)
|
IsMember(spaceID, userID string) (bool, error)
|
||||||
GetMembers(spaceID string) ([]*model.SpaceMemberWithProfile, error)
|
GetMembers(spaceID string) ([]*model.SpaceMemberWithProfile, error)
|
||||||
UpdateName(spaceID, name string) error
|
UpdateName(spaceID, name string) error
|
||||||
|
GetMemberCount(spaceID string) (int, error)
|
||||||
|
|
||||||
Delete(spaceID string) error
|
Delete(spaceID string) error
|
||||||
}
|
}
|
||||||
|
|
@ -130,9 +131,18 @@ func (r *spaceRepository) UpdateName(spaceID, name string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func (r *spaceRepository) Delete(spaceID string) error {
|
func (r *spaceRepository) Delete(spaceID string) error {
|
||||||
query := `DELETE FROM spaces WHERE id = $1;`
|
query := `DELETE FROM spaces WHERE id = $1;`
|
||||||
_, err := r.db.Exec(query, spaceID)
|
_, err := r.db.Exec(query, spaceID)
|
||||||
return err
|
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 {
|
func (s *SpaceService) DeleteSpace(spaceID string) error {
|
||||||
return s.spaceRepo.Delete(spaceID)
|
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