full_system/
full_system.rs1use easy_db::{EasyClient, EasyDB};
2use serde_json::json;
3use std::collections::HashMap;
4use std::time::Duration;
5use tokio::time::sleep;
6
7#[tokio::main]
8async fn main() -> anyhow::Result<()> {
9 println!("š --- STARTING MONOLITHIC SYSTEM DEMO --- \n");
10
11 let port = 9900; let db_name = "monolith_school_db";
16
17 let mut db = EasyDB::init(db_name).expect("Failed to init DB");
19
20 db.create_table(
22 "students",
23 "id INTEGER PRIMARY KEY, name TEXT, age INTEGER, gpa REAL",
24 )?;
25 db.create_table("logs", "id INTEGER PRIMARY KEY, message TEXT, level TEXT")?;
26
27 println!("ā
[SERVER] Tables created.");
28
29 tokio::spawn(async move {
32 println!("ā
[SERVER] Listening on port {}...", port);
33 if let Err(e) = db.run_server(port).await {
34 eprintln!("ā [SERVER] Error: {}", e);
35 }
36 });
37
38 sleep(Duration::from_millis(500)).await;
40
41 let client = EasyClient::new("localhost", port);
45 println!("\nš [CLIENT] Connected to localhost:{}\n", port);
46
47 println!("š Action: Adding Students...");
49 client
50 .post(
51 "students",
52 json!({"name": "Alice Wonderland", "age": 20, "gpa": 3.8}),
53 )
54 .await?;
55 client
56 .post(
57 "students",
58 json!({"name": "Bob Builder", "age": 22, "gpa": 2.5}),
59 )
60 .await?;
61 client
62 .post(
63 "students",
64 json!({"name": "Charlie Chaplin", "age": 25, "gpa": 4.0}),
65 )
66 .await?;
67 println!("ā
Students added.");
68
69 println!("š Action: Finding 'Bob Builder'...");
71 let mut params = HashMap::new();
72 params.insert("name", "Bob Builder");
73
74 let bob_res = client.get("students", Some(params)).await?;
75 let bob_list = bob_res.as_array().expect("Expected array");
76 let bob_id = bob_list[0]["id"].as_i64().unwrap();
77 println!("ā
Found Bob. ID: {}", bob_id);
78
79 println!("š Action: Updating Bob's GPA...");
81 client
82 .put(
83 "students",
84 bob_id,
85 json!({
86 "gpa": 3.0,
87 "age": 23
88 }),
89 )
90 .await?;
91 println!("ā
Bob's record updated.");
92
93 println!("š Action: Fetching Top Students (Sorted by GPA DESC)...");
95 let mut sort_params = HashMap::new();
96 sort_params.insert("_sort", "gpa");
97 sort_params.insert("_order", "desc");
98
99 let sorted = client.get("students", Some(sort_params)).await?;
100 if let Some(list) = sorted.as_array() {
101 for s in list {
102 println!(" - {} (GPA: {})", s["name"], s["gpa"]);
103 }
104 }
105
106 println!("ā Action: Deleting Charlie...");
108 client.delete("students", 3).await?;
110 println!("ā
Charlie deleted.");
111
112 println!("\n⨠--- DEMO COMPLETED SUCCESSFULLY ---");
113
114 Ok(())
118}