From e592eec19c6df559e21bd737c08de260e2064585 Mon Sep 17 00:00:00 2001 From: Aravinth Manivannan Date: Tue, 23 Jul 2024 21:25:27 +0530 Subject: [PATCH] fix: link LineItem to Kot --- ...d27dcb4352041b04fc9d21e7332f0b8b32be.json} | 5 +-- ...44b9a919e77bdfa9074b6c1b335380a0ce6c.json} | 12 +++++-- ...66b288fec93971bf9ab41faec21680e50f71.json} | 5 +-- ...23095912_cqrs_ordering_line_item_query.sql | 4 ++- .../adapters/output/db/line_item_id_exists.rs | 4 ++- .../adapters/output/db/line_item_view.rs | 34 ++++++++++++------- .../services/add_line_item_service.rs | 29 +++++++++++++++- .../services/delete_line_item_service.rs | 4 ++- .../services/update_line_item_service.rs | 30 ++++++++++++++-- src/ordering/domain/add_line_item_command.rs | 19 ++++++++--- src/ordering/domain/line_item_aggregate.rs | 9 +++-- .../domain/line_item_deleted_event.rs | 3 +- .../domain/line_item_updated_event.rs | 3 +- .../domain/update_line_item_command.rs | 20 ++++++++--- 14 files changed, 143 insertions(+), 38 deletions(-) rename .sqlx/{query-88f519e645dba9eb091d18e8f5c0db127ac0d070fb81e5b157a68638c3688996.json => query-34ba93d669697b7080df26bb23e7d27dcb4352041b04fc9d21e7332f0b8b32be.json} (67%) rename .sqlx/{query-2d5ff8c368757fc2d390aaaed23d18fe6888ace9e7e2b9d12f02d2c50d80e685.json => query-3b9849078c846bc254aca3d56efd44b9a919e77bdfa9074b6c1b335380a0ce6c.json} (76%) rename .sqlx/{query-724e980a30694acbdc309702e5349ddff36d11757477e5ec130c1f4209e613dc.json => query-c348d55dd91acb0d4697c433f61866b288fec93971bf9ab41faec21680e50f71.json} (75%) diff --git a/.sqlx/query-88f519e645dba9eb091d18e8f5c0db127ac0d070fb81e5b157a68638c3688996.json b/.sqlx/query-34ba93d669697b7080df26bb23e7d27dcb4352041b04fc9d21e7332f0b8b32be.json similarity index 67% rename from .sqlx/query-88f519e645dba9eb091d18e8f5c0db127ac0d070fb81e5b157a68638c3688996.json rename to .sqlx/query-34ba93d669697b7080df26bb23e7d27dcb4352041b04fc9d21e7332f0b8b32be.json index b6d3c48..69543c6 100644 --- a/.sqlx/query-88f519e645dba9eb091d18e8f5c0db127ac0d070fb81e5b157a68638c3688996.json +++ b/.sqlx/query-34ba93d669697b7080df26bb23e7d27dcb4352041b04fc9d21e7332f0b8b32be.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "INSERT INTO cqrs_ordering_line_item_query (\n version,\n product_name,\n product_id,\n line_item_id,\n quantity_minor_unit,\n quantity_minor_number,\n quantity_major_unit,\n quantity_major_number,\n sale_time,\n deleted\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10\n );", + "query": "INSERT INTO cqrs_ordering_line_item_query (\n version,\n product_name,\n product_id,\n line_item_id,\n quantity_minor_unit,\n quantity_minor_number,\n quantity_major_unit,\n quantity_major_number,\n created_time,\n kot_id,\n deleted\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11\n );", "describe": { "columns": [], "parameters": { @@ -14,10 +14,11 @@ "Text", "Int4", "Timestamptz", + "Uuid", "Bool" ] }, "nullable": [] }, - "hash": "88f519e645dba9eb091d18e8f5c0db127ac0d070fb81e5b157a68638c3688996" + "hash": "34ba93d669697b7080df26bb23e7d27dcb4352041b04fc9d21e7332f0b8b32be" } diff --git a/.sqlx/query-2d5ff8c368757fc2d390aaaed23d18fe6888ace9e7e2b9d12f02d2c50d80e685.json b/.sqlx/query-3b9849078c846bc254aca3d56efd44b9a919e77bdfa9074b6c1b335380a0ce6c.json similarity index 76% rename from .sqlx/query-2d5ff8c368757fc2d390aaaed23d18fe6888ace9e7e2b9d12f02d2c50d80e685.json rename to .sqlx/query-3b9849078c846bc254aca3d56efd44b9a919e77bdfa9074b6c1b335380a0ce6c.json index e4c652e..e93e291 100644 --- a/.sqlx/query-2d5ff8c368757fc2d390aaaed23d18fe6888ace9e7e2b9d12f02d2c50d80e685.json +++ b/.sqlx/query-3b9849078c846bc254aca3d56efd44b9a919e77bdfa9074b6c1b335380a0ce6c.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT \n product_name,\n product_id,\n line_item_id,\n quantity_minor_unit,\n quantity_minor_number,\n quantity_major_unit,\n quantity_major_number,\n sale_time,\n deleted\n FROM\n cqrs_ordering_line_item_query\n WHERE\n line_item_id = $1;", + "query": "SELECT \n product_name,\n product_id,\n line_item_id,\n quantity_minor_unit,\n quantity_minor_number,\n quantity_major_unit,\n quantity_major_number,\n created_time,\n kot_id,\n deleted\n FROM\n cqrs_ordering_line_item_query\n WHERE\n line_item_id = $1;", "describe": { "columns": [ { @@ -40,11 +40,16 @@ }, { "ordinal": 7, - "name": "sale_time", + "name": "created_time", "type_info": "Timestamptz" }, { "ordinal": 8, + "name": "kot_id", + "type_info": "Uuid" + }, + { + "ordinal": 9, "name": "deleted", "type_info": "Bool" } @@ -63,8 +68,9 @@ false, false, false, + false, false ] }, - "hash": "2d5ff8c368757fc2d390aaaed23d18fe6888ace9e7e2b9d12f02d2c50d80e685" + "hash": "3b9849078c846bc254aca3d56efd44b9a919e77bdfa9074b6c1b335380a0ce6c" } diff --git a/.sqlx/query-724e980a30694acbdc309702e5349ddff36d11757477e5ec130c1f4209e613dc.json b/.sqlx/query-c348d55dd91acb0d4697c433f61866b288fec93971bf9ab41faec21680e50f71.json similarity index 75% rename from .sqlx/query-724e980a30694acbdc309702e5349ddff36d11757477e5ec130c1f4209e613dc.json rename to .sqlx/query-c348d55dd91acb0d4697c433f61866b288fec93971bf9ab41faec21680e50f71.json index 7c919af..f2ce603 100644 --- a/.sqlx/query-724e980a30694acbdc309702e5349ddff36d11757477e5ec130c1f4209e613dc.json +++ b/.sqlx/query-c348d55dd91acb0d4697c433f61866b288fec93971bf9ab41faec21680e50f71.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "UPDATE\n cqrs_ordering_line_item_query\n SET\n version = $1,\n product_name = $2,\n product_id = $3,\n line_item_id = $4,\n quantity_minor_unit = $5,\n quantity_minor_number = $6,\n quantity_major_unit = $7,\n quantity_major_number = $8,\n sale_time = $9,\n deleted = $10;", + "query": "UPDATE\n cqrs_ordering_line_item_query\n SET\n version = $1,\n product_name = $2,\n product_id = $3,\n line_item_id = $4,\n quantity_minor_unit = $5,\n quantity_minor_number = $6,\n quantity_major_unit = $7,\n quantity_major_number = $8,\n created_time = $9,\n kot_id = $10,\n deleted = $11;", "describe": { "columns": [], "parameters": { @@ -14,10 +14,11 @@ "Text", "Int4", "Timestamptz", + "Uuid", "Bool" ] }, "nullable": [] }, - "hash": "724e980a30694acbdc309702e5349ddff36d11757477e5ec130c1f4209e613dc" + "hash": "c348d55dd91acb0d4697c433f61866b288fec93971bf9ab41faec21680e50f71" } diff --git a/migrations/20240723095912_cqrs_ordering_line_item_query.sql b/migrations/20240723095912_cqrs_ordering_line_item_query.sql index 6e69bbb..3c3fa2a 100644 --- a/migrations/20240723095912_cqrs_ordering_line_item_query.sql +++ b/migrations/20240723095912_cqrs_ordering_line_item_query.sql @@ -6,9 +6,11 @@ CREATE TABLE IF NOT EXISTS cqrs_ordering_line_item_query ( version bigint CHECK (version >= 0) NOT NULL, - sale_time timestamp with time zone DEFAULT (CURRENT_TIMESTAMP) NOT NULL, + created_time timestamp with time zone DEFAULT (CURRENT_TIMESTAMP) NOT NULL, line_item_id UUID NOT NULL UNIQUE, + kot_id UUID NOT NULL, + product_name TEXT NOT NULL, product_id UUID NOT NULL, diff --git a/src/ordering/adapters/output/db/line_item_id_exists.rs b/src/ordering/adapters/output/db/line_item_id_exists.rs index 64e570f..f23e0cf 100644 --- a/src/ordering/adapters/output/db/line_item_id_exists.rs +++ b/src/ordering/adapters/output/db/line_item_id_exists.rs @@ -47,9 +47,10 @@ pub mod tests { quantity_minor_number, quantity_major_unit, quantity_major_number, + kot_id, deleted ) VALUES ( - $1, $2, $3, $4, $5, $6, $7, $8, $9 + $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 );", 1, line_item.product_name(), @@ -59,6 +60,7 @@ pub mod tests { line_item.quantity().major().number().clone() as i32, line_item.quantity().minor().unit().to_string(), line_item.quantity().minor().number().clone() as i32, + line_item.kot_id(), line_item.deleted().clone(), ) .execute(&db.pool) diff --git a/src/ordering/adapters/output/db/line_item_view.rs b/src/ordering/adapters/output/db/line_item_view.rs index ae36ab1..9443a1c 100644 --- a/src/ordering/adapters/output/db/line_item_view.rs +++ b/src/ordering/adapters/output/db/line_item_view.rs @@ -26,7 +26,8 @@ pub const NEW_LINE_ITEM_NON_UUID: &str = "new_line_item_non_uuid-asdfa"; pub struct LineItemView { product_name: String, product_id: Uuid, - sale_time: OffsetDateTime, + kot_id: Uuid, + created_time: OffsetDateTime, line_item_id: Uuid, @@ -41,9 +42,10 @@ pub struct LineItemView { impl Default for LineItemView { fn default() -> Self { Self { - sale_time: OffsetDateTime::now_utc(), + created_time: OffsetDateTime::now_utc(), product_name: Default::default(), product_id: Default::default(), + kot_id: Default::default(), line_item_id: Default::default(), @@ -80,8 +82,9 @@ impl From for LineItem { .product_name(v.product_name) .line_item_id(v.line_item_id) .quantity(quantity) - .sale_time(v.sale_time) + .created_time(v.created_time) .product_id(v.product_id) + .kot_id(v.kot_id) .deleted(v.deleted) .build() .unwrap() @@ -104,7 +107,8 @@ impl View for LineItemView { self.quantity_major_unit = val.line_item().quantity().major().unit().to_string(); self.quantity_minor_unit = val.line_item().quantity().minor().unit().to_string(); - self.sale_time = val.line_item().sale_time().clone(); + self.created_time = val.line_item().created_time().clone(); + self.kot_id = *val.line_item().kot_id(); self.deleted = false; } @@ -131,7 +135,8 @@ impl ViewRepository for OrderingDBPostgresAdapter { quantity_minor_number, quantity_major_unit, quantity_major_number, - sale_time, + created_time, + kot_id, deleted FROM cqrs_ordering_line_item_query @@ -165,7 +170,8 @@ impl ViewRepository for OrderingDBPostgresAdapter { quantity_minor_number, quantity_major_unit, quantity_major_number, - sale_time, + created_time, + kot_id, deleted FROM cqrs_ordering_line_item_query @@ -218,10 +224,11 @@ impl ViewRepository for OrderingDBPostgresAdapter { quantity_minor_number, quantity_major_unit, quantity_major_number, - sale_time, + created_time, + kot_id, deleted ) VALUES ( - $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 + $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11 );", version, view.product_name, @@ -231,7 +238,8 @@ impl ViewRepository for OrderingDBPostgresAdapter { view.quantity_minor_number, view.quantity_major_unit, view.quantity_major_number, - view.sale_time, + view.created_time, + view.kot_id, view.deleted, ) .execute(&self.pool) @@ -253,8 +261,9 @@ impl ViewRepository for OrderingDBPostgresAdapter { quantity_minor_number = $6, quantity_major_unit = $7, quantity_major_number = $8, - sale_time = $9, - deleted = $10;", + created_time = $9, + kot_id = $10, + deleted = $11;", version, view.product_name, view.product_id, @@ -263,7 +272,8 @@ impl ViewRepository for OrderingDBPostgresAdapter { view.quantity_minor_number, view.quantity_major_unit, view.quantity_major_number, - view.sale_time, + view.created_time, + view.kot_id, view.deleted, ) .execute(&self.pool) diff --git a/src/ordering/application/services/add_line_item_service.rs b/src/ordering/application/services/add_line_item_service.rs index 75a7e4e..4214c3b 100644 --- a/src/ordering/application/services/add_line_item_service.rs +++ b/src/ordering/application/services/add_line_item_service.rs @@ -11,6 +11,7 @@ use time::OffsetDateTime; use super::errors::*; use crate::ordering::{ + application::port::output::db::kot_id_exists::*, application::port::output::db::line_item_id_exists::*, domain::{add_line_item_command::*, line_item_added_event::*, line_item_aggregate::*}, }; @@ -27,12 +28,17 @@ pub type AddLineItemServiceObj = Arc; #[derive(Clone, Builder)] pub struct AddLineItemService { db_line_item_id_exists: LineItemIDExistsDBPortObj, + db_kot_id_exists: KotIDExistsDBPortObj, get_uuid: GetUUIDInterfaceObj, } #[async_trait::async_trait] impl AddLineItemUseCase for AddLineItemService { async fn add_line_item(&self, cmd: AddLineItemCommand) -> OrderingResult { + if !self.db_kot_id_exists.kot_id_exists(cmd.kot_id()).await? { + return Err(OrderingError::KotIDNotFound); + } + let mut line_item_id = self.get_uuid.get_uuid(); loop { @@ -49,9 +55,10 @@ impl AddLineItemUseCase for AddLineItemService { } let line_item = LineItemBuilder::default() - .sale_time(OffsetDateTime::now_utc()) + .created_time(cmd.created_time().clone()) .product_name(cmd.product_name().into()) .product_id(*cmd.product_id()) + .kot_id(*cmd.kot_id()) .line_item_id(line_item_id) .quantity(cmd.quantity().clone()) .deleted(false) @@ -98,6 +105,7 @@ pub mod tests { let s = AddLineItemServiceBuilder::default() .db_line_item_id_exists(mock_line_item_id_exists_db_port_false(IS_CALLED_ONLY_ONCE)) + .db_kot_id_exists(mock_kot_id_exists_db_port_true(IS_CALLED_ONLY_ONCE)) .get_uuid(mock_get_uuid(IS_CALLED_ONLY_ONCE)) .build() .unwrap(); @@ -105,9 +113,28 @@ pub mod tests { let res = s.add_line_item(cmd.clone()).await.unwrap(); assert_eq!(res.line_item().product_name(), cmd.product_name()); assert_eq!(res.line_item().product_id(), cmd.product_id()); + assert_eq!(res.line_item().kot_id(), cmd.kot_id()); assert_eq!(res.line_item().quantity(), cmd.quantity()); assert_eq!(res.line_item().quantity(), cmd.quantity()); + assert_eq!(res.line_item().created_time(), cmd.created_time()); assert!(!res.line_item().deleted()); assert_eq!(res.added_by_user(), cmd.adding_by()); } + + #[actix_rt::test] + async fn test_service_kot_id_doesnt_exist() { + let cmd = AddLineItemCommand::get_cmd(); + + let s = AddLineItemServiceBuilder::default() + .db_line_item_id_exists(mock_line_item_id_exists_db_port_false(IS_NEVER_CALLED)) + .db_kot_id_exists(mock_kot_id_exists_db_port_false(IS_CALLED_ONLY_ONCE)) + .get_uuid(mock_get_uuid(IS_NEVER_CALLED)) + .build() + .unwrap(); + + assert_eq!( + s.add_line_item(cmd.clone()).await, + Err(OrderingError::KotIDNotFound) + ); + } } diff --git a/src/ordering/application/services/delete_line_item_service.rs b/src/ordering/application/services/delete_line_item_service.rs index 493e127..f76ff0e 100644 --- a/src/ordering/application/services/delete_line_item_service.rs +++ b/src/ordering/application/services/delete_line_item_service.rs @@ -47,10 +47,11 @@ impl DeleteLineItemUseCase for DeleteLineItemService { } let deleted_line_item = LineItemBuilder::default() - .sale_time(cmd.line_item().sale_time().clone()) + .created_time(cmd.line_item().created_time().clone()) .product_name(cmd.line_item().product_name().into()) .product_id(*cmd.line_item().product_id()) .line_item_id(*cmd.line_item().line_item_id()) + .kot_id(*cmd.line_item().kot_id()) .quantity(cmd.line_item().quantity().clone()) .deleted(true) .build() @@ -110,6 +111,7 @@ pub mod tests { res.line_item().line_item_id(), cmd.line_item().line_item_id() ); + assert_eq!(res.line_item().kot_id(), cmd.line_item().kot_id()); assert!(res.line_item().deleted()); assert_eq!(res.added_by_user(), cmd.adding_by()); diff --git a/src/ordering/application/services/update_line_item_service.rs b/src/ordering/application/services/update_line_item_service.rs index b0e555d..d6fceae 100644 --- a/src/ordering/application/services/update_line_item_service.rs +++ b/src/ordering/application/services/update_line_item_service.rs @@ -11,6 +11,7 @@ use time::OffsetDateTime; use super::errors::*; use crate::ordering::{ + application::port::output::db::kot_id_exists::*, application::port::output::db::line_item_id_exists::*, domain::{line_item_aggregate::*, line_item_updated_event::*, update_line_item_command::*}, }; @@ -30,6 +31,7 @@ pub type UpdateLineItemServiceObj = Arc; #[derive(Clone, Builder)] pub struct UpdateLineItemService { db_line_item_id_exists: LineItemIDExistsDBPortObj, + db_kot_id_exists: KotIDExistsDBPortObj, } #[async_trait::async_trait] @@ -46,11 +48,16 @@ impl UpdateLineItemUseCase for UpdateLineItemService { return Err(OrderingError::LineItemIDNotFound); } + if !self.db_kot_id_exists.kot_id_exists(cmd.kot_id()).await? { + return Err(OrderingError::KotIDNotFound); + } + let new_line_item = LineItemBuilder::default() - .sale_time(cmd.sale_time().clone()) + .created_time(cmd.created_time().clone()) .product_name(cmd.product_name().into()) .product_id(*cmd.product_id()) .line_item_id(*cmd.old_line_item().line_item_id()) + .kot_id(*cmd.kot_id()) .quantity(cmd.quantity().clone()) .deleted(false) .build() @@ -98,6 +105,7 @@ pub mod tests { let s = UpdateLineItemServiceBuilder::default() .db_line_item_id_exists(mock_line_item_id_exists_db_port_true(IS_CALLED_ONLY_ONCE)) + .db_kot_id_exists(mock_kot_id_exists_db_port_true(IS_CALLED_ONLY_ONCE)) .build() .unwrap(); @@ -105,11 +113,12 @@ pub mod tests { assert_eq!(res.new_line_item().product_name(), cmd.product_name()); assert_eq!(res.new_line_item().product_id(), cmd.product_id()); assert_eq!(res.new_line_item().quantity(), cmd.quantity()); - assert_eq!(res.new_line_item().quantity(), cmd.quantity()); assert_eq!( res.new_line_item().line_item_id(), cmd.old_line_item().line_item_id() ); + assert_eq!(res.new_line_item().kot_id(), cmd.old_line_item().kot_id()); + assert!(!res.new_line_item().deleted()); assert_eq!(res.old_line_item(), cmd.old_line_item()); @@ -123,6 +132,7 @@ pub mod tests { let s = UpdateLineItemServiceBuilder::default() .db_line_item_id_exists(mock_line_item_id_exists_db_port_false(IS_CALLED_ONLY_ONCE)) + .db_kot_id_exists(mock_kot_id_exists_db_port_true(IS_NEVER_CALLED)) .build() .unwrap(); @@ -131,4 +141,20 @@ pub mod tests { Err(OrderingError::LineItemIDNotFound) ); } + + #[actix_rt::test] + async fn test_service_kot_id_doesnt_exist() { + let cmd = UpdateLineItemCommand::get_cmd(); + + let s = UpdateLineItemServiceBuilder::default() + .db_line_item_id_exists(mock_line_item_id_exists_db_port_true(IS_CALLED_ONLY_ONCE)) + .db_kot_id_exists(mock_kot_id_exists_db_port_false(IS_CALLED_ONLY_ONCE)) + .build() + .unwrap(); + + assert_eq!( + s.update_line_item(cmd.clone()).await, + Err(OrderingError::KotIDNotFound) + ); + } } diff --git a/src/ordering/domain/add_line_item_command.rs b/src/ordering/domain/add_line_item_command.rs index 16cc2b9..d1f68cb 100644 --- a/src/ordering/domain/add_line_item_command.rs +++ b/src/ordering/domain/add_line_item_command.rs @@ -25,9 +25,10 @@ pub struct UnvalidatedAddLineItemCommand { adding_by: Uuid, #[builder(default = "OffsetDateTime::now_utc()")] - sale_time: OffsetDateTime, + created_time: OffsetDateTime, product_name: String, product_id: Uuid, + kot_id: Uuid, quantity: Quantity, } @@ -43,9 +44,10 @@ impl UnvalidatedAddLineItemCommand { } Ok(AddLineItemCommand { - sale_time: self.sale_time, + created_time: self.created_time, product_name, product_id: self.product_id, + kot_id: self.kot_id, quantity: self.quantity, adding_by: self.adding_by, }) @@ -54,9 +56,10 @@ impl UnvalidatedAddLineItemCommand { #[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd, Getters)] pub struct AddLineItemCommand { - sale_time: OffsetDateTime, + created_time: OffsetDateTime, product_name: String, product_id: Uuid, + kot_id: Uuid, quantity: Quantity, adding_by: Uuid, @@ -74,15 +77,17 @@ mod tests { pub fn get_cmd() -> Self { let product_name = "foo"; let product_id = UUID; + let kot_id = UUID; let adding_by = UUID; let quantity = Quantity::get_quantity(); UnvalidatedAddLineItemCommandBuilder::default() .product_name(product_name.into()) .adding_by(adding_by) - .sale_time(datetime!(1970-01-01 0:00 UTC)) + .created_time(datetime!(1970-01-01 0:00 UTC)) .quantity(quantity.clone()) .product_id(product_id) + .kot_id(kot_id) .build() .unwrap() .validate() @@ -94,6 +99,7 @@ mod tests { fn test_cmd() { let product_name = "foo"; let product_id = UUID; + let kot_id = UUID; let adding_by = UUID; let quantity = Quantity::get_quantity(); @@ -102,6 +108,7 @@ mod tests { .adding_by(adding_by) .quantity(quantity.clone()) .product_id(product_id) + .kot_id(kot_id) .build() .unwrap() .validate() @@ -117,6 +124,7 @@ mod tests { fn test_cmd_product_name_empty() { let product_name = ""; let product_id = UUID; + let kot_id = UUID; let adding_by = UUID; let quantity = Quantity::get_quantity(); @@ -126,6 +134,7 @@ mod tests { .adding_by(adding_by) .quantity(quantity.clone()) .product_id(product_id) + .kot_id(kot_id) .build() .unwrap() .validate(), @@ -137,6 +146,7 @@ mod tests { fn test_cmd_quantity_empty() { let product_name = "foo"; let product_id = UUID; + let kot_id = UUID; let adding_by = UUID; // minor = 0; major = 0; let quantity = Quantity::default(); @@ -147,6 +157,7 @@ mod tests { .adding_by(adding_by) .quantity(quantity.clone()) .product_id(product_id) + .kot_id(kot_id) .build() .unwrap() .validate(), diff --git a/src/ordering/domain/line_item_aggregate.rs b/src/ordering/domain/line_item_aggregate.rs index d1859ea..02361b0 100644 --- a/src/ordering/domain/line_item_aggregate.rs +++ b/src/ordering/domain/line_item_aggregate.rs @@ -21,9 +21,10 @@ use crate::types::quantity::Quantity; )] pub struct LineItem { #[builder(default = "OffsetDateTime::now_utc()")] - sale_time: OffsetDateTime, + created_time: OffsetDateTime, product_name: String, product_id: Uuid, + kot_id: Uuid, line_item_id: Uuid, // TODO: add kot_id quantity: Quantity, @@ -34,10 +35,11 @@ pub struct LineItem { impl Default for LineItem { fn default() -> Self { Self { - sale_time: OffsetDateTime::now_utc(), + created_time: OffsetDateTime::now_utc(), product_name: String::default(), product_id: Default::default(), line_item_id: Default::default(), + kot_id: Default::default(), quantity: Default::default(), deleted: false, } @@ -57,10 +59,11 @@ mod tests { let cmd = AddLineItemCommand::get_cmd(); LineItemBuilder::default() - .sale_time(cmd.sale_time().clone()) + .created_time(cmd.created_time().clone()) .product_name("test_product".into()) .product_id(*cmd.product_id()) .quantity(cmd.quantity().clone()) + .kot_id(*cmd.kot_id()) .line_item_id(UUID) .build() .unwrap() diff --git a/src/ordering/domain/line_item_deleted_event.rs b/src/ordering/domain/line_item_deleted_event.rs index f3a113f..0dc811a 100644 --- a/src/ordering/domain/line_item_deleted_event.rs +++ b/src/ordering/domain/line_item_deleted_event.rs @@ -28,9 +28,10 @@ pub mod tests { cmd: &DeleteLineItemCommand, ) -> LineItemDeletedEvent { let deleted_line_item = LineItemBuilder::default() - .sale_time(cmd.line_item().sale_time().clone()) + .created_time(cmd.line_item().created_time().clone()) .product_name(cmd.line_item().product_name().into()) .product_id(*cmd.line_item().product_id()) + .kot_id(*cmd.line_item().kot_id()) .line_item_id(*cmd.line_item().line_item_id()) .quantity(cmd.line_item().quantity().clone()) .deleted(true) diff --git a/src/ordering/domain/line_item_updated_event.rs b/src/ordering/domain/line_item_updated_event.rs index dca11b9..4893934 100644 --- a/src/ordering/domain/line_item_updated_event.rs +++ b/src/ordering/domain/line_item_updated_event.rs @@ -29,9 +29,10 @@ pub mod tests { cmd: &UpdateLineItemCommand, ) -> LineItemUpdatedEvent { let new_line_item = LineItemBuilder::default() - .sale_time(cmd.sale_time().clone()) + .created_time(cmd.created_time().clone()) .product_name(cmd.product_name().clone()) .product_id(*cmd.product_id()) + .kot_id(*cmd.kot_id()) .quantity(cmd.quantity().clone()) .line_item_id(*cmd.old_line_item().line_item_id()) .build() diff --git a/src/ordering/domain/update_line_item_command.rs b/src/ordering/domain/update_line_item_command.rs index 45d00da..eabe7cc 100644 --- a/src/ordering/domain/update_line_item_command.rs +++ b/src/ordering/domain/update_line_item_command.rs @@ -27,9 +27,10 @@ pub struct UnvalidatedUpdateLineItemCommand { adding_by: Uuid, #[builder(default = "OffsetDateTime::now_utc()")] - sale_time: OffsetDateTime, + created_time: OffsetDateTime, product_name: String, product_id: Uuid, + kot_id: Uuid, quantity: Quantity, old_line_item: LineItem, @@ -47,9 +48,10 @@ impl UnvalidatedUpdateLineItemCommand { } Ok(UpdateLineItemCommand { - sale_time: self.sale_time, + created_time: self.created_time, product_name, product_id: self.product_id, + kot_id: self.kot_id, quantity: self.quantity, adding_by: self.adding_by, old_line_item: self.old_line_item, @@ -59,9 +61,10 @@ impl UnvalidatedUpdateLineItemCommand { #[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd, Getters)] pub struct UpdateLineItemCommand { - sale_time: OffsetDateTime, + created_time: OffsetDateTime, product_name: String, product_id: Uuid, + kot_id: Uuid, quantity: Quantity, old_line_item: LineItem, @@ -71,7 +74,7 @@ pub struct UpdateLineItemCommand { #[cfg(test)] mod tests { - use crate::utils::uuid::tests::UUID; + use crate::{ordering::domain::order_aggregate::Order, utils::uuid::tests::UUID}; use super::*; @@ -79,6 +82,7 @@ mod tests { pub fn get_cmd() -> Self { let product_name = "foo"; let product_id = UUID; + let kot_id = UUID; let adding_by = UUID; let quantity = Quantity::get_quantity(); @@ -87,6 +91,7 @@ mod tests { .adding_by(adding_by) .quantity(quantity.clone()) .product_id(product_id) + .kot_id(product_id) .old_line_item(LineItem::get_line_item()) .build() .unwrap() @@ -99,6 +104,7 @@ mod tests { fn test_cmd() { let product_name = "foo"; let product_id = UUID; + let kot_id = UUID; let adding_by = UUID; let quantity = Quantity::get_quantity(); let old_line_item = LineItem::get_line_item(); @@ -108,6 +114,7 @@ mod tests { .adding_by(adding_by) .quantity(quantity.clone()) .product_id(product_id) + .kot_id(kot_id) .old_line_item(old_line_item.clone()) .build() .unwrap() @@ -116,6 +123,7 @@ mod tests { assert_eq!(cmd.quantity(), &quantity); assert_eq!(*cmd.product_id(), product_id); + assert_eq!(*cmd.kot_id(), kot_id); assert_eq!(*cmd.adding_by(), adding_by); assert_eq!(cmd.product_name(), product_name); assert_eq!(cmd.old_line_item(), &old_line_item); @@ -125,6 +133,7 @@ mod tests { fn test_cmd_product_name_empty() { let product_name = ""; let product_id = UUID; + let kot_id = UUID; let adding_by = UUID; let quantity = Quantity::get_quantity(); @@ -134,6 +143,7 @@ mod tests { .adding_by(adding_by) .quantity(quantity.clone()) .product_id(product_id) + .kot_id(kot_id) .old_line_item(LineItem::get_line_item()) .build() .unwrap() @@ -146,6 +156,7 @@ mod tests { fn test_cmd_quantity_empty() { let product_name = "foo"; let product_id = UUID; + let kot_id = UUID; let adding_by = UUID; // minor = 0; major = 0; let quantity = Quantity::default(); @@ -156,6 +167,7 @@ mod tests { .adding_by(adding_by) .quantity(quantity.clone()) .product_id(product_id) + .kot_id(kot_id) .old_line_item(LineItem::get_line_item()) .build() .unwrap()