Skip to content

Commit a619a5d

Browse files
committed
feat(warehouse): Add Disabled + CreatedAt Param to Warehouse
1 parent cbbab75 commit a619a5d

File tree

5 files changed

+120
-0
lines changed

5 files changed

+120
-0
lines changed

entity/src/models/warehouse.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ pub struct Model {
2424
pub id: Uuid,
2525
/// The name of the warehouse
2626
pub name: String,
27+
/// Indicates whether the warehouse is disabled.
28+
#[sea_orm(filter_single)]
29+
pub disabled: bool,
30+
/// Timestamp for when the warehouse was created.
31+
#[sea_orm(filter_override = "chrono::DateTime<chrono::Utc>", filter_plus_order)]
32+
pub created_at: DateTimeWithTimeZone,
2733
}
2834

2935
/// Enum representing the relationships of the `warehouse` entity in SeaORM.

entity/src/request/warehouse.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ impl TryFrom<NewWarehouseRequest> for ActiveModel {
6161
}
6262
Set(name)
6363
},
64+
disabled: Set(false),
65+
created_at: Set(chrono::offset::Local::now().into()),
6466
})
6567
}
6668
}
@@ -70,6 +72,9 @@ impl TryFrom<NewWarehouseRequest> for ActiveModel {
7072
pub struct EditWarehouseRequest {
7173
/// New name for the Warehouse.
7274
pub name: Option<String>,
75+
76+
/// Optional new disabled status for the warehouse.
77+
pub disabled: Option<bool>,
7378
}
7479

7580
/// Converts `EditWarehouseRequest` into `ActiveModel` with validation.
@@ -95,6 +100,11 @@ impl TryFrom<EditWarehouseRequest> for ActiveModel {
95100
}
96101
None => NotSet,
97102
},
103+
disabled: match value.disabled {
104+
Some(disabled) => Set(disabled),
105+
None => NotSet,
106+
},
107+
..Default::default()
98108
})
99109
}
100110
}

entity/src/response/warehouse.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ pub struct WarehouseResponse {
1616

1717
/// Name of the warehouse.
1818
name: String,
19+
20+
/// The timestamp indicating when the warehouse was created.
21+
pub created_at: chrono::DateTime<chrono::Utc>,
22+
23+
/// Indicates whether the warehouse is currently disabled.
24+
pub disabled: bool,
1925
}
2026

2127
impl From<crate::models::warehouse::Model> for WarehouseResponse {
@@ -24,6 +30,8 @@ impl From<crate::models::warehouse::Model> for WarehouseResponse {
2430
Self {
2531
id: value.id,
2632
name: value.name,
33+
created_at: value.created_at.into(),
34+
disabled: value.disabled,
2735
}
2836
}
2937
}
@@ -38,6 +46,7 @@ impl From<crate::models::warehouse::Model> for WarehouseResponse {
3846
{
3947
"id": "1a731f58-18f1-4c95-8de5-611bde07f4f1",
4048
"name": "Warehouse Central",
49+
"disabled": false,
4150
"creation_time": "2024-10-09T17:55:30.795279Z"
4251
}
4352
]

migration/src/m20220101_000007_create_warehouse_table.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ impl MigrationTrait for Migration {
1313
.if_not_exists()
1414
.col(uuid(Warehouse::Id).primary_key())
1515
.col(string(Warehouse::Name))
16+
.col(boolean(Warehouse::Disabled).default(false))
17+
.col(
18+
timestamp_with_time_zone(Warehouse::CreatedAt)
19+
.default(Expr::current_timestamp()),
20+
)
1621
.to_owned(),
1722
)
1823
.await
@@ -30,4 +35,6 @@ pub enum Warehouse {
3035
Table,
3136
Id,
3237
Name,
38+
Disabled,
39+
CreatedAt,
3340
}

tests/warehouse_tests.rs

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,3 +338,91 @@ async fn warehouse_edit_too_long_name() {
338338
]
339339
}));
340340
}
341+
342+
#[tokio::test]
343+
async fn warehouse_create_disabled() {
344+
let realm = Realm::default();
345+
let (mut server, _ids, _nodes) = create_basic_session(realm.clone()).await;
346+
let cookies = create_realm_session(&mut server, realm.users).await;
347+
348+
let response = server
349+
.post("/warehouse")
350+
.json(&json!({
351+
"name": "Warehouse 1",
352+
}))
353+
.add_cookie(cookies[0].clone())
354+
.await;
355+
response.assert_status(StatusCode::CREATED);
356+
let id = response.text();
357+
358+
let response = server
359+
.get(&format!("/warehouse/{id}"))
360+
.add_cookie(cookies[0].clone())
361+
.await;
362+
response.assert_status_ok();
363+
response.assert_json_contains(&json!({
364+
"disabled": false,
365+
}));
366+
367+
let response = server
368+
.get("/warehouse")
369+
.add_cookie(cookies[0].clone())
370+
.await;
371+
response.assert_status_ok();
372+
response.assert_json_contains(&json!({
373+
"warehouses": [
374+
{
375+
"disabled": false,
376+
},
377+
]
378+
}));
379+
}
380+
381+
#[tokio::test]
382+
async fn warehouse_edit_disabled() {
383+
let realm = Realm::default();
384+
let (mut server, _ids, _nodes) = create_basic_session(realm.clone()).await;
385+
let cookies = create_realm_session(&mut server, realm.users).await;
386+
387+
// New warehouse with Ok name
388+
let response = server
389+
.post("/warehouse")
390+
.json(&json!({
391+
"name": "Warehouse 1",
392+
}))
393+
.add_cookie(cookies[0].clone())
394+
.await;
395+
response.assert_status(StatusCode::CREATED);
396+
let id = response.text();
397+
398+
let response = server
399+
.put(&format!("/warehouse/{id}"))
400+
.json(&json!({
401+
"disabled": true,
402+
}))
403+
.add_cookie(cookies[0].clone())
404+
.await;
405+
response.assert_status_ok();
406+
407+
let response = server
408+
.get(&format!("/warehouse/{id}"))
409+
.add_cookie(cookies[0].clone())
410+
.await;
411+
response.assert_status_ok();
412+
response.assert_json_contains(&json!({
413+
"disabled": true,
414+
}));
415+
416+
let response = server
417+
.get("/warehouse")
418+
.add_cookie(cookies[0].clone())
419+
.await;
420+
response.assert_status_ok();
421+
response.assert_json_contains(&json!({
422+
"warehouses": [
423+
{
424+
"disabled": true,
425+
},
426+
]
427+
}));
428+
}

0 commit comments

Comments
 (0)