eventlib/dto/
experiment_event_request.rsuse chrono::naive::serde::ts_milliseconds;
use chrono::NaiveDateTime;
use common::enums::{status::Status, subject::Subject};
use common::model::payment_discount::PaymentDiscount;
use common::model::payment_price_component::PaymentPriceComponent;
use common::utils::serialize_option_naive_date;
use serde::{Deserialize, Serialize};
use serde_json;
use std::collections::HashMap;
use uuid::Uuid;
use common::enums::roles_for_content::RolesForContent;
use crate::dto::experiment_user_request::ExperimentUserRequest;
use crate::dto::section_request::SectionRequest;
use crate::enums::location_type::LocationType;
use crate::enums::privacy::Privacy;
use crate::enums::scenario_type::ScenarioType;
use crate::jsonb::travel_detail::TravelDetail;
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ExperimentEventRequest {
pub id: Option<Uuid>,
pub title: String,
#[serde(rename = "date")]
#[serde(with = "ts_milliseconds")]
pub event_date: NaiveDateTime,
#[serde(default)]
#[serde(with = "serialize_option_naive_date")]
pub date_end: Option<NaiveDateTime>,
pub capacity: Option<i32>,
pub fee: Option<f32>,
pub latitude: f64,
pub longitude: f64,
pub cancel_registration: Option<i32>,
pub multiple_tickets: Option<i32>,
pub description: Option<String>,
pub experiment: Option<Uuid>,
pub organization: Option<Uuid>,
pub organizer: Option<Uuid>,
pub chat: Option<Uuid>,
pub latitude_meeting_place: Option<f64>,
pub longitude_meeting_place: Option<f64>,
pub subjects: Option<Vec<Subject>>,
pub years: Option<Vec<i32>>,
pub event_tasks: Option<serde_json::Value>,
pub award_stuffs: Option<serde_json::Value>,
pub sections: Option<HashMap<Uuid, SectionRequest>>,
pub main_picture: Option<String>,
pub format: Option<String>,
pub location_type: Option<LocationType>,
pub privacy: Option<Privacy>,
pub scenario_type: Option<ScenarioType>,
pub status: Option<Status>,
pub type_of_meeting_place: Option<LocationType>,
pub addr_street: Option<serde_json::Value>,
pub addr_suburb: Option<String>,
pub addr_state: Option<String>,
pub addr_postcode: Option<String>,
pub addr_instructions: Option<String>,
pub meeting_place_coincides: Option<i32>,
pub addr_street_meeting_place: Option<serde_json::Value>,
pub addr_instructions_meeting_place: Option<String>,
pub is_free: bool,
pub phone: Option<String>,
pub registration_confirmation: Option<i32>,
pub locate_position: Option<i32>,
pub experiment_user_list: Option<Vec<ExperimentUserRequest>>,
pub parent_confirmation: Option<bool>,
pub travel_details: Option<Vec<TravelDetail>>,
pub price_components: Option<Vec<PaymentPriceComponent>>,
pub discounts_applicable: Option<Vec<PaymentDiscount>>,
pub for_roles: Option<Vec<RolesForContent>>,
}