use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use uuid::Uuid;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum ReleaseStatus {
Draft,
Published,
Yanked,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
pub struct Release {
pub id: Uuid,
pub app_id: Uuid,
pub version: String,
pub android_version_code: Option<i64>,
pub android_min_version_code: Option<i64>,
pub status: ReleaseStatus,
pub release_notes: Option<String>,
pub published_at: Option<DateTime<Utc>>,
pub min_version: Option<String>,
pub rollout_percent: Option<i16>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CreateReleaseRequest {
pub version: String,
#[serde(default)]
pub android_version_code: Option<i64>,
#[serde(default)]
pub android_min_version_code: Option<i64>,
#[serde(default)]
pub release_notes: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, ToSchema)]
pub struct UpdateReleaseRequest {
#[serde(default)]
pub android_version_code: Option<i64>,
#[serde(default)]
pub android_min_version_code: Option<i64>,
#[serde(default)]
pub release_notes: Option<String>,
#[serde(default)]
pub min_version: Option<String>,
#[serde(default)]
pub rollout_percent: Option<i16>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct PromoteRequest {
pub version: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, ToSchema)]
pub struct RollbackRequest {
#[serde(default)]
pub version: Option<String>,
}