104 lines
2.8 KiB
Rust
104 lines
2.8 KiB
Rust
// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
use derive_builder::Builder;
|
|
use derive_getters::Getters;
|
|
use derive_more::{Display, Error};
|
|
use serde::{Deserialize, Serialize};
|
|
use time::OffsetDateTime;
|
|
use uuid::Uuid;
|
|
|
|
use super::order_aggregate::*;
|
|
|
|
#[derive(Debug, Error, Display, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
|
|
pub enum UpdateOrderCommandError {
|
|
CustomerNameIsEmpty,
|
|
}
|
|
|
|
#[derive(
|
|
Clone, Debug, Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd, Getters, Builder,
|
|
)]
|
|
pub struct UpdateOrderCommand {
|
|
adding_by: Uuid,
|
|
|
|
#[builder(default = "OffsetDateTime::now_utc()")]
|
|
created_time: OffsetDateTime,
|
|
#[builder(setter(custom))]
|
|
customer_name: Option<String>,
|
|
|
|
old_order: Order,
|
|
}
|
|
|
|
impl UpdateOrderCommandBuilder {
|
|
pub fn customer_name(&mut self, customer_name: Option<String>) -> &mut Self {
|
|
self.customer_name = if let Some(customer_name) = customer_name {
|
|
let customer_name = customer_name.trim();
|
|
if customer_name.is_empty() {
|
|
Some(None)
|
|
} else {
|
|
Some(Some(customer_name.to_string()))
|
|
}
|
|
} else {
|
|
Some(None)
|
|
};
|
|
self
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use time::macros::datetime;
|
|
|
|
use crate::utils::uuid::tests::UUID;
|
|
|
|
use super::*;
|
|
|
|
impl UpdateOrderCommand {
|
|
pub fn get_cmd() -> Self {
|
|
let customer_name = "foo-new-name";
|
|
let adding_by = UUID;
|
|
|
|
UpdateOrderCommandBuilder::default()
|
|
.customer_name(Some(customer_name.into()))
|
|
.adding_by(adding_by)
|
|
.created_time(datetime!(1970-01-01 0:00 UTC))
|
|
.old_order(Order::default())
|
|
.build()
|
|
.unwrap()
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_cmd() {
|
|
let customer_name = "foo";
|
|
let adding_by = UUID;
|
|
let old_order = Order::default();
|
|
|
|
let cmd = UpdateOrderCommandBuilder::default()
|
|
.customer_name(Some(customer_name.into()))
|
|
.adding_by(adding_by)
|
|
.old_order(old_order.clone())
|
|
.build()
|
|
.unwrap();
|
|
|
|
assert_eq!(*cmd.adding_by(), adding_by);
|
|
assert_eq!(cmd.customer_name().as_ref().unwrap(), customer_name);
|
|
assert_eq!(cmd.old_order(), &old_order);
|
|
}
|
|
|
|
#[test]
|
|
fn test_cmd_customer_name_empty() {
|
|
let customer_name = "";
|
|
let adding_by = UUID;
|
|
|
|
let cmd = UpdateOrderCommandBuilder::default()
|
|
.customer_name(Some(customer_name.into()))
|
|
.adding_by(adding_by)
|
|
.old_order(Order::default())
|
|
.build()
|
|
.unwrap();
|
|
|
|
assert!(cmd.customer_name().is_none());
|
|
}
|
|
}
|