use std::collections::HashSet; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use crate::models::ids::AnalyticsEventId; #[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)] pub struct AnalyticsEvent { pub id: AnalyticsEventId, #[serde(flatten)] pub meta: AnalyticsEventMeta, pub starts: DateTime, pub ends: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)] pub struct AnalyticsEventMeta { #[serde(default)] pub title: String, #[serde(default)] pub announcement_url: Option, #[serde(default)] pub for_metric_kind: HashSet, } #[derive( Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, utoipa::ToSchema, )] #[serde(rename_all = "snake_case")] pub enum MetricKind { Views, Downloads, Playtime, Revenue, } impl From for AnalyticsEvent { fn from(data: crate::database::models::DBAnalyticsEvent) -> Self { Self { id: data.id.into(), meta: data.meta, starts: data.starts, ends: data.ends, } } }