Skip to content
Clone
main
188 lines 6.7 KB
/**
* Generated by orval 🍺
* Do not edit manually.
* gitdata api
*
* ## Conventions
*
* ### Response envelope
* Every JSON response uses the same envelope:
*
* | field | meaning |
* |---|---|
* | `code` | always equal to the HTTP status code |
* | `message` | human-readable result / error summary |
* | `data` | payload, `null` for errors and empty results |
* | `error` | field-level / technical detail (e.g. validation errors), may be `null` |
* | `error_code` | stable machine-readable code on 4xx (e.g. `conflict`, `rate_limited`), may be `null` |
* | `request_id` | correlation id, also returned as the `X-Request-Id` header |
*
* Successful `POST` creation returns `200` (not `201`); empty results use `200` with `data: null`.
* - `POST /auth/logout` is idempotent: repeating it always succeeds with `200`.
*
* ### Authentication
* - `session_cookie`: opaque session carried in the `session` cookie and stored in
* Redis. `GET /auth/login` redirects to the same-origin login page;
* `POST /auth/logout` revokes the session and clears the cookie.
*
* ### URL & parameter style
* - Paths are `kebab-case`, plural nouns, nesting expresses ownership.
* - Query/path/JSON field names are `snake_case`; enum values are `snake_case`.
* - All endpoints are versioned under `/api/v1`. `/api/v1/internal/*` is guarded
* by the `x-gitdata-service-key` header and is NOT documented here.
* - State-transition actions use `POST {resource}/{id}/{verb}` (close/reopen);
* idempotent whole-resource state uses `PUT` (default branch, pin, read-state);
* partial updates use `PATCH`.
*
* ### Pagination
* - 唯一 offset 风格:`?limit=&offset=`(`limit` 默认 50;`offset` 上限 5000),
* 分页响应的 `data` 恒为 `{ items, total, limit, offset }`,字段均为无符号整数。
* - `limit` 为 0、超过端点上限或 `offset` 超过 5000 时返回 400
* (`error_code: bad_request`),不会静默截断。
* - 排序参数为 `?sort=<field>&order=asc|desc`;`sort` 的取值按端点枚举校验,
* 未知值返回 400,未知参数同样返回 400。
* - chat 消息额外接受 `before_seq` / `after_seq` 作为筛选条件,响应仍是同一 `Page` 形状。
* - Git LFS 锁定列表的 `next_cursor` 是 LFS 协议字段,不适用本约定。
*
* ### PATCH semantics (three-state fields)
* Update commands use `Option<Option<T>>` for clearable fields:
* - field **absent** → unchanged
* - field `null` → cleared
* - field value → set
*
* Example: `{"milestone_id": null}` unassigns the milestone; omitting
* `milestone_id` leaves it untouched.
*
* ### 2FA
* TOTP enrollment, recovery codes and sensitive-operation verification are
* handled by identity; GitData only proxies the account-management endpoints.
*
* ### Operations
* - `GET /healthz` — liveness probe (no auth, outside `/api/v1`).
* - `GET /readyz` — readiness probe: database (primary) + redis live checks,
* rocketmq + s3 sampled every 10s, `503` when any is down.
* - Runtime metrics are pushed to the configured OTLP collector (30s interval);
* there is no scrape endpoint.
* - Cross-origin browser access is disabled by default; the API expects a
* same-origin reverse proxy. Enable `web.cors_allow_origins` to allowlist
* other origins.
*
* ### Abuse controls
* - Creation endpoints are subject to per-user rolling 24h quotas
* (`[quota]` config; 0 disables). Exceeding a quota returns `429`
* with `error_code: "rate_limited"`.
*
* ### Idempotency
* - `POST /chat/rooms/{room_id}/messages` accepts `nonce`: unique per room;
* retrying with the same nonce returns the original message instead of a duplicate.
*
* ### Resource references
* - User references in responses embed a `user` object (`UserDto`) wherever a
* single person is shown; raw uuid fields are named `*_id` consistently.
* - Viewer-specific state is embedded, not fetched separately: `RepoDto.me`
* carries `starred`/`watch_mode`, `IssueDto.viewer_watch` carries the caller
* watch mode. `PUT /repos/{space}/{repo}/star|unstar` style reads do not exist.
*
* ### Identifiers
* - Issues are addressable by UUID **or** board-scoped number
* (e.g. `/issues/{space}/boards/{board}/issues/123`).
* - Binary uploads use raw request bodies with a content-type header
* (e.g. `PUT /me/avatar` accepts `image/*` bytes, not base64 JSON).
*
* OpenAPI spec version: 1.0
*/
export type SpaceMemberRole = "member" | "admin" | "owner";
export type SpaceJoinMethod =
"direct" | "invite_link" | "invite_targeted" | "invite_email";
/**
* 会籍的通知偏好,对应旧 `space_members.message_notifications`。
* 旧表用 0/1/2 存,这里用字符串存,便于跨服务读写时直接透传。
*/
export type MessageNotifications = "all" | "mentions" | "nothing";
export interface EnvelopeNoData {
code: number;
data?: unknown;
/** @nullable */
error?: string | null;
/** @nullable */
error_code?: string | null;
message: string;
request_id?: string;
}
export type EnvelopePageMemberSummaryDataItemsItem = {
/** @nullable */
alias_avatar_url?: string | null;
/** @nullable */
alias_name?: string | null;
ban_allow_agent_join: boolean;
ban_allow_comment_any: boolean;
ban_allow_push_repo: boolean;
ban_allow_speak: boolean;
/** @nullable */
ban_expires_at?: string | null;
/** @nullable */
ban_reason?: string | null;
/** @nullable */
banned_at?: string | null;
/** @nullable */
displayname?: string | null;
hide_muted_channels: boolean;
id: string;
/** @nullable */
invited_by?: number | null;
join_method: SpaceJoinMethod;
joined_at: string;
/** @nullable */
last_active_at?: string | null;
/** @nullable */
left_at?: string | null;
message_notifications: MessageNotifications;
mobile_push: boolean;
/** @nullable */
mute_until?: string | null;
muted: boolean;
organization_id: string;
permissions: string[];
role: SpaceMemberRole;
role_keys: string[];
suppress_everyone: boolean;
suppress_roles: boolean;
user_id: number;
username: string;
version: number;
};
export type EnvelopePageMemberSummaryData = {
items: EnvelopePageMemberSummaryDataItemsItem[];
/** @minimum 0 */
limit: number;
/** @minimum 0 */
offset: number;
/** @minimum 0 */
total: number;
};
export interface EnvelopePageMemberSummary {
code: number;
data?: EnvelopePageMemberSummaryData;
/** @nullable */
error?: string | null;
/** @nullable */
error_code?: string | null;
message: string;
request_id?: string;
}
export type SpaceBanListParams = {
/**
* 每页条数,默认 20,最多 100
* @minimum 0
*/
limit?: number;
/**
* 跳过条数,最多 5000
* @minimum 0
*/
offset?: number;
};