school_client/
school_client.rs

1use easy_db::EasyClient;
2use serde_json::json;
3use std::collections::HashMap;
4
5#[tokio::main]
6async fn main() -> anyhow::Result<()> {
7    // Connect to the server (Localhost:9000)
8    let client = EasyClient::new("localhost", 9000);
9    println!("šŸ”— Connected to the School System.\n");
10
11    // ==========================================
12    // SCENARIO 1: NEW RECORDS (POST)
13    // ==========================================
14    println!("šŸ“ --- STEP 1: Registering Students and Grades ---");
15
16    // Class 10-A
17    client
18        .post(
19            "students",
20            json!({
21                "name": "Ali Yilmaz", "school_number": 101, "class_grade": "10-A", "gpa": 85.5
22            }),
23        )
24        .await?;
25
26    client
27        .post(
28            "students",
29            json!({
30                "name": "Zeynep Kaya", "school_number": 102, "class_grade": "10-A", "gpa": 92.0
31            }),
32        )
33        .await?;
34
35    // Class 11-B (Mehmet Demir)
36    client
37        .post(
38            "students",
39            json!({
40                "name": "Mehmet Demir", "school_number": 201, "class_grade": "11-B", "gpa": 76.5
41            }),
42        )
43        .await?;
44
45    // Grade Entry
46    client
47        .post(
48            "grades",
49            json!({"school_number": 101, "lesson": "Mathematics", "score": 90}),
50        )
51        .await?;
52    client
53        .post(
54            "grades",
55            json!({"school_number": 102, "lesson": "Mathematics", "score": 100}),
56        )
57        .await?;
58
59    println!("āœ… Registration complete.\n");
60
61    // ==========================================
62    // SCENARIO 2: DATA UPDATE (PUT)
63    // ==========================================
64    println!("šŸ”„ --- STEP 2: Mehmet Demir Promoted (Update) ---");
65
66    // 1. First, let's find Mehmet (ID is required)
67    let mut search_params = HashMap::new();
68    search_params.insert("school_number", "201");
69
70    let search_res = client.get("students", Some(search_params)).await?;
71
72    if let Some(list) = search_res.as_array() {
73        if !list.is_empty() {
74            let mehmet_id = list[0]["id"].as_i64().unwrap();
75
76            // 2. Update Mehmet's class and GPA
77            client
78                .put(
79                    "students",
80                    mehmet_id,
81                    json!({
82                        "class_grade": "12-A", // Promoted to next grade
83                        "gpa": 80.0            // GPA increased
84                    }),
85                )
86                .await?;
87
88            println!("āœ… Mehmet (ID: {}) information updated.", mehmet_id);
89        }
90    }
91
92    // ==========================================
93    // SCENARIO 3: ADVANCED QUERY (GET + FILTER + SORT)
94    // ==========================================
95    println!("\nšŸ” --- STEP 3: Class 10-A Report Card (Sorted) ---");
96
97    let mut params = HashMap::new();
98    params.insert("class_grade", "10-A"); // Filter: Only 10-A
99    params.insert("_sort", "gpa"); // Sort: By GPA
100    params.insert("_order", "desc"); // Direction: Descending (Highest first)
101
102    let results = client.get("students", Some(params)).await?;
103
104    if let Some(list) = results.as_array() {
105        for student in list {
106            println!(
107                " - {} (No: {}) -> GPA: {}",
108                student["name"], student["school_number"], student["gpa"]
109            );
110        }
111    } else {
112        println!("No data found.");
113    }
114
115    // ==========================================
116    // SCENARIO 4: DATA DELETION (DELETE)
117    // ==========================================
118    println!("\nāŒ --- STEP 4: Cleanup Graduates/Leavers (Delete) ---");
119
120    // Suppose Ali (ID: 1) has left the school.
121    let delete_res = client.delete("students", 1).await?;
122    println!("Deletion Result: {}", delete_res);
123
124    Ok(())
125}