Implement autocomplete for categories
This commit is contained in:
@ -116,3 +116,44 @@ func (q *Queries) GetCategoryGroups(ctx context.Context, budgetID uuid.UUID) ([]
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const searchCategories = `-- name: SearchCategories :many
|
||||
SELECT CONCAT(category_groups.name, ' : ', categories.name) as name, categories.id FROM categories
|
||||
INNER JOIN category_groups ON categories.category_group_id = category_groups.id
|
||||
WHERE category_groups.budget_id = $1
|
||||
AND categories.name LIKE $2
|
||||
ORDER BY category_groups.name, categories.name
|
||||
`
|
||||
|
||||
type SearchCategoriesParams struct {
|
||||
BudgetID uuid.UUID
|
||||
Search string
|
||||
}
|
||||
|
||||
type SearchCategoriesRow struct {
|
||||
Name interface{}
|
||||
ID uuid.UUID
|
||||
}
|
||||
|
||||
func (q *Queries) SearchCategories(ctx context.Context, arg SearchCategoriesParams) ([]SearchCategoriesRow, error) {
|
||||
rows, err := q.db.QueryContext(ctx, searchCategories, arg.BudgetID, arg.Search)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []SearchCategoriesRow
|
||||
for rows.Next() {
|
||||
var i SearchCategoriesRow
|
||||
if err := rows.Scan(&i.Name, &i.ID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
@ -18,4 +18,12 @@ RETURNING *;
|
||||
SELECT categories.*, category_groups.name as group FROM categories
|
||||
INNER JOIN category_groups ON categories.category_group_id = category_groups.id
|
||||
WHERE category_groups.budget_id = $1
|
||||
ORDER BY category_groups.name, categories.name;
|
||||
ORDER BY category_groups.name, categories.name;
|
||||
|
||||
-- name: SearchCategories :many
|
||||
SELECT CONCAT(category_groups.name, ' : ', categories.name) as name, categories.id FROM categories
|
||||
INNER JOIN category_groups ON categories.category_group_id = category_groups.id
|
||||
WHERE category_groups.budget_id = @budget_id
|
||||
AND categories.name LIKE @search
|
||||
ORDER BY category_groups.name, categories.name;
|
||||
--ORDER BY levenshtein(payees.name, $2);
|
Reference in New Issue
Block a user