8c607153c0
Server: E-3 invite_kind; E-12 link ?from=<admin name>, E-4 passes it into kvitt://invite; X-Kvitt-App-Version-Name stored in devices.app_version_name (migration 0003, schema 3); OpenAPI and examples follow. Phone: :core:model, :core:fakes, :data, features and :app updated together; goldens re-recorded for S-20 (version name) and new S-1/S-22 states. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
44 lines
1.5 KiB
Rust
44 lines
1.5 KiB
Rust
//! Device objects (SPEC §14.3.3, §14.3.4 E-15, E-17).
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
use utoipa::ToSchema;
|
|
use uuid::Uuid;
|
|
|
|
use super::{TimestampSchema, UuidSchema};
|
|
|
|
/// Only in `/me`, `/devices` and `/invites/accept`.
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
|
|
pub struct Device {
|
|
#[schema(value_type = UuidSchema)]
|
|
pub id: Uuid,
|
|
#[schema(value_type = UuidSchema)]
|
|
pub user_id: Uuid,
|
|
pub name: String,
|
|
#[schema(schema_with = super::nullable_int, required = true)]
|
|
pub app_version_code: Option<i64>,
|
|
/// The app's `versionName` from `X-Kvitt-App-Version-Name` (schema 3); null until a request carried it.
|
|
#[schema(required = true)]
|
|
pub app_version_name: Option<String>,
|
|
#[schema(value_type = TimestampSchema)]
|
|
pub created_at: String,
|
|
#[schema(value_type = TimestampSchema)]
|
|
pub last_seen_at: String,
|
|
#[schema(value_type = Option<TimestampSchema>, required = true)]
|
|
pub revoked_at: Option<String>,
|
|
pub is_current: bool,
|
|
}
|
|
|
|
/// E-15 `GET /devices`.
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
|
|
pub struct DeviceList {
|
|
pub devices: Vec<Device>,
|
|
}
|
|
|
|
/// E-17 `PUT /devices/current/push-token`: the key is required, its value nullable (null clears).
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
|
|
pub struct PushTokenRequest {
|
|
#[serde(deserialize_with = "super::required_nullable")]
|
|
#[schema(required = true)]
|
|
pub fcm_token: Option<String>,
|
|
}
|