feat(db): add query to count media items per visible library
Add GetVisibleLibraryMediaCounts, which returns the media item count for each library visible to a given user in a single GROUP BY query over media_items. It mirrors the visibility logic in GetUserVisibleLibraries (libraries default to visible unless an explicit false row exists) so counts can be resolved in one round-trip instead of N per-library lookups. Regenerated sqlc bindings (querier.go, queries.sql.go).
This commit is contained in:
@@ -7493,6 +7493,40 @@ func (q *Queries) GetUserVisibleLibraries(ctx context.Context, userID pgtype.UUI
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const GetVisibleLibraryMediaCounts = `-- name: GetVisibleLibraryMediaCounts :many
|
||||
SELECT l.id, COUNT(mi.id) as media_count
|
||||
FROM libraries l
|
||||
LEFT JOIN library_visibility lv ON l.id = lv.library_id AND lv.user_id = $1
|
||||
LEFT JOIN media_items mi ON mi.library_id = l.id
|
||||
WHERE COALESCE(lv.is_visible, true) = true
|
||||
GROUP BY l.id
|
||||
`
|
||||
|
||||
type GetVisibleLibraryMediaCountsRow struct {
|
||||
ID pgtype.UUID `db:"id" json:"id"`
|
||||
MediaCount int64 `db:"media_count" json:"media_count"`
|
||||
}
|
||||
|
||||
func (q *Queries) GetVisibleLibraryMediaCounts(ctx context.Context, userID pgtype.UUID) ([]GetVisibleLibraryMediaCountsRow, error) {
|
||||
rows, err := q.db.Query(ctx, GetVisibleLibraryMediaCounts, userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
items := []GetVisibleLibraryMediaCountsRow{}
|
||||
for rows.Next() {
|
||||
var i GetVisibleLibraryMediaCountsRow
|
||||
if err := rows.Scan(&i.ID, &i.MediaCount); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const HasRecentConflictResolution = `-- name: HasRecentConflictResolution :one
|
||||
SELECT EXISTS(
|
||||
SELECT 1 FROM sync_conflicts
|
||||
|
||||
Reference in New Issue
Block a user