ADORSYS-GIS / ADORSYS-GIS/lightbridge-authz

[Task]: Seat snapshots query endpoint

未关闭
#728 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
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 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。