ADORSYS-GIS / ADORSYS-GIS/lightbridge-authz
[Task]: Seat snapshots query endpoint
- Ngôn ngữ chính
- Rust
- Star
- 0
- Fork
- 1
- Merge trung bình
- 7 giờ 7 phút
- Pull request đã merge (30 ngày)
- 237
Mô tả
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.
Hướng dẫn đóng góp
Hướng nghiên cứu
Start with docs/plans/0586-per-grain-query-apis-analysis.md, migrations-usage/20260908000002_usage_seat_snapshots.sql, and crates/lightbridge-authz-usage/src/models/day_seat.rs. Then implement the request models, query builder, handler, and route in the listed files, adding tests for counts, scope handling, bucket truncation, and filters. Done means POST /usage/v1/usage/seats/query supports the specified scopes and returns the requested seat snapshot series.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- rust
- Lĩnh vực
- api, backend, database
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 68/100