ADORSYS-GIS / ADORSYS-GIS/lightbridge-authz
[Task]: Seat snapshots query endpoint
- 主要语言
- Rust
- 星标
- 0
- 派生
- 1
- 平均合并
- 6 小时 42 分钟
- 30 天内合并 PR
- 246
描述
Parent: #586 (Per-grain query APIs)
### Summary
Build the seat snapshots query endpoint: request types, query builder, handler, and route.
### What to build
1. **`SeatSnapshotQueryRequest`** — scope: User/All, start_time, end_time, bucket, filters, group_by, limit
2. **`SeatSnapshotQueryFilters`** — source, subject_kind, seat_state, assignee_team, plan_type
3. **`SeatGroupBy`** enum — Source, SubjectKind, SubjectId, SeatState
4. **`SeatSnapshotSeriesPoint`** — bucket_start, source, subject_kind, subject_id, seat_count, active_count, pending_cancellation_count
5. **`build_seat_snapshot_query()`** — aggregation over `usage_seat_snapshots`
6. **Handler + route:** `POST /usage/v1/usage/seats/query`
### SQL shape
Similar to day facts — single-table aggregation. Seat count per bucket: `COUNT(*)` or `COUNT(DISTINCT provider_user_id)` depending on whether the query is per-subject or per-seat-state. Bucket-scoped truncation via `dense_rank()`.
### Scope filter
- `scope=user`: `provider_user_id = $scope_id`
- `scope=all`: no entity filter, requires `usage:read-all`
- `scope=account` / `scope=project`: return `400` (not applicable)
### Files to modify
- `crates/lightbridge-authz-usage/src/models/seat.rs` — NEW: request, filters, group_by, point structs
- `crates/lightbridge-authz-usage/src/repo/seat_query.rs` — NEW: query builder
- `crates/lightbridge-authz-usage/src/handlers/seat.rs` — NEW: handler
- `crates/lightbridge-authz-usage/src/routers/mod.rs` — add route
### Tests
- Seed seat snapshots → query → assert correct seat counts
- scope=user → assert only matching user's seats returned
- scope=account → 400
- Bucket truncation
- Filter by seat_state, source
### Source of truth
- Design Decision 1: `docs/plans/0586-per-grain-query-apis-analysis.md`
- Seat snapshots DDL: `migrations-usage/20260908000002_usage_seat_snapshots.sql`
- SubjectKind vocabulary: `crates/lightbridge-authz-usage/src/models/day_seat.rs`
### Verification evidence
To be attached on the implementing PR.
贡献指南
评估
这个 Issue 还没有评估数据。