Journal UI: write and read season notes where you're already looking (#53) (#67)
Build image / build-and-push (push) Successful in 11s
Build image / build-and-push (push) Successful in 11s
Co-authored-by: Steve Dudenhoeffer <[email protected]>
This commit was merged in pull request #67.
This commit is contained in:
@@ -123,6 +123,38 @@ func (d *DB) ListJournalEntries(ctx context.Context, gardenID int64, f JournalFi
|
||||
return entries, nil
|
||||
}
|
||||
|
||||
// JournalCounts returns how many entries a garden holds, keyed by the object
|
||||
// they are about — key 0 for entries about the garden itself.
|
||||
//
|
||||
// A count per object rather than a flag, and one query rather than one per bed:
|
||||
// the indicator has to be available when the journal panel is closed, which is
|
||||
// exactly when nothing else has loaded the entries.
|
||||
func (d *DB) JournalCounts(ctx context.Context, gardenID int64) (map[int64]int, error) {
|
||||
rows, err := d.sql.QueryContext(ctx,
|
||||
`SELECT COALESCE(object_id, 0), COUNT(*)
|
||||
FROM journal_entries WHERE garden_id = ?
|
||||
GROUP BY COALESCE(object_id, 0)`,
|
||||
gardenID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("store: journal counts: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
counts := map[int64]int{}
|
||||
for rows.Next() {
|
||||
var objectID int64
|
||||
var n int
|
||||
if err := rows.Scan(&objectID, &n); err != nil {
|
||||
return nil, fmt.Errorf("store: scan journal count: %w", err)
|
||||
}
|
||||
counts[objectID] = n
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, fmt.Errorf("store: iterate journal counts: %w", err)
|
||||
}
|
||||
return counts, nil
|
||||
}
|
||||
|
||||
// UpdateJournalEntry applies a version-guarded update of the mutable columns.
|
||||
// Same contract as every other mutable resource. The target (garden/object/
|
||||
// planting) and the author are immutable: an entry is a record of an observation,
|
||||
|
||||
Reference in New Issue
Block a user