diff --git a/internal/domain/list.go b/internal/domain/list.go index 6c938f9..c603377 100644 --- a/internal/domain/list.go +++ b/internal/domain/list.go @@ -26,6 +26,7 @@ type ListRepository interface { CreateList(ctx context.Context, name string, userIDs []string) (*List, error) AddUserToList(ctx context.Context, listID string, userID string) error RemoveUserFromList(ctx context.Context, listID string, userID string) error + IsUserInList(ctx context.Context, listID string, userID string) (bool, error) CreateListItem(ctx context.Context, listID string, title string) (*ListItem, error) UpdateListItem(ctx context.Context, listItemID string, title string, isCompleted bool) error } diff --git a/internal/repository/list.go b/internal/repository/list.go index 7e7a7ea..7433864 100644 --- a/internal/repository/list.go +++ b/internal/repository/list.go @@ -82,6 +82,20 @@ func (r *ListRepo) RemoveUserFromList(ctx context.Context, listID string, userID return nil } +func (r *ListRepo) IsUserInList(ctx context.Context, listID string, userID string) (bool, error) { + var cnt int + + err := r.db.QueryRowContext(ctx, + "SELECT COUNT(*) FROM list_users WHERE list_id = $1 AND user_id = $2", + listID, userID, + ).Scan(&cnt) + if err != nil { + return false, fmt.Errorf("failed to check if user is in list: %w", err) + } + + return cnt > 0, nil +} + func (r *ListRepo) CreateListItem(ctx context.Context, listID string, title string) (*domain.ListItem, error) { l := &domain.ListItem{Title: title}