competitionlib/dto/
competition_response.rsuse chrono::NaiveDateTime;
use common::enums::activity_type::ActivityType;
use common::enums::registration_type::RegistrationType;
use common::enums::status::Status;
use common::model::form::Form;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use common::utils::serialize_option_naive_date;
use crate::enums::allowed_until_type::AllowedUntilType;
use crate::enums::competition_visibility::CompetitionVisibility;
use crate::enums::participant_type::ParticipantType;
use crate::enums::participation_type::ParticipationType;
use crate::enums::tournament_system_type::TournamentSystemType;
use crate::jsonb::certificate_kind::CertificateKind;
use crate::jsonb::education_benefit::EducationBenefits;
use crate::jsonb::organizator::Organizator;
use crate::jsonb::prize::Prize;
use crate::jsonb::sponsor::Sponsor;
use crate::jsonb::ticket_kind::TicketKind;
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct CompetitionResponse {
pub id: Uuid,
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub logo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub place: Option<diesel_json::Json<serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sponsor: Option<diesel_json::Json<Vec<Sponsor>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub organizator: Option<diesel_json::Json<Vec<Organizator>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prizes: Option<diesel_json::Json<Vec<Prize>>>,
pub status: Status,
pub general_rules: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub cover_image: Option<String>,
pub identity_color: String,
pub visibility: CompetitionVisibility,
#[serde(skip_serializing_if = "Option::is_none")]
pub available_below: Option<Uuid>,
pub about: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub education_benefits: Option<diesel_json::Json<Vec<EducationBenefits>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub specific_rules: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allowed_until: Option<AllowedUntilType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub days_before: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
#[serde(with = "serialize_option_naive_date")]
pub date: Option<NaiveDateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub participation_type: Option<ParticipationType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub form: Option<diesel_json::Json<Vec<Form>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub organization: Option<Uuid>,
pub registration_type: RegistrationType,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_participants: Option<Vec<ParticipantType>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub category: Option<ActivityType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tournament_system_type: Option<TournamentSystemType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tickets: Option<Vec<TicketKind>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub certificates: Option<Vec<CertificateKind>>,
}