ADORSYS-GIS / ADORSYS-GIS/lightbridge-authz

[Task]: Seat snapshots query endpoint

Đang mở
#728 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
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

Mở 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

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.