1use std::fmt::Display;
2
3use chrono::{DateTime, FixedOffset};
4use serde::{Deserialize, Serialize};
5#[cfg(feature = "tabled")]
6use tabled::Tabled;
7
8use crate::user::UserClass;
9
10#[cfg_attr(feature = "tabled", derive(Tabled))]
11#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
12pub struct FlavorPrice {
13 pub id: u32,
14 pub flavor: u32,
15 pub flavor_name: String,
16 pub user_class: UserClass,
17 pub unit_price: f64,
18 pub start_time: DateTime<FixedOffset>,
19}
20
21impl Display for FlavorPrice {
22 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23 f.write_str(&format!(
24 "FlavorPrice(id={}, flavor={})",
25 self.id, self.flavor_name
26 ))
27 }
28}
29
30#[cfg_attr(feature = "tabled", derive(Tabled))]
31#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
32pub struct FlavorPriceInitialize {
33 pub new_flavor_price_count: u32,
34}
35
36#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
37pub struct FlavorPriceCreateData {
38 pub flavor: u32,
39 pub user_class: UserClass,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub price: Option<f64>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub start_time: Option<DateTime<FixedOffset>>,
44}
45
46impl FlavorPriceCreateData {
47 pub fn new(flavor: u32, user_class: UserClass) -> Self {
48 Self {
49 flavor,
50 user_class,
51 price: None,
52 start_time: None,
53 }
54 }
55}
56
57#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
58pub struct FlavorPriceModifyData {
59 pub id: u32,
60
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub flavor: Option<u32>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub user_class: Option<UserClass>,
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub unit_price: Option<f64>,
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub start_time: Option<DateTime<FixedOffset>>,
69}
70
71impl FlavorPriceModifyData {
72 pub fn new(id: u32) -> Self {
73 Self {
74 id,
75 flavor: None,
76 user_class: None,
77 unit_price: None,
78 start_time: None,
79 }
80 }
81}
82
83#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
84pub struct FlavorPriceListParams {
85 pub user_class: Option<UserClass>,
86 pub current: Option<bool>,
87}