From 3fc0eb9e7c542483d49139f764efb482400ca2fb Mon Sep 17 00:00:00 2001 From: Aditya-06 Date: Tue, 27 Feb 2024 22:29:54 -0500 Subject: [PATCH 01/10] chore/add base DTO folder --- src/dto/mod.rs | 2 ++ src/dto/namespace_dto.rs | 5 +++++ src/dto/table_dto.rs | 5 +++++ src/handlers/mod.rs | 0 4 files changed, 12 insertions(+) create mode 100644 src/dto/mod.rs create mode 100644 src/dto/namespace_dto.rs create mode 100644 src/dto/table_dto.rs create mode 100644 src/handlers/mod.rs diff --git a/src/dto/mod.rs b/src/dto/mod.rs new file mode 100644 index 0000000..101f684 --- /dev/null +++ b/src/dto/mod.rs @@ -0,0 +1,2 @@ +pub mod namespace_dto; +pub mod table_dto; \ No newline at end of file diff --git a/src/dto/namespace_dto.rs b/src/dto/namespace_dto.rs new file mode 100644 index 0000000..6c51eb4 --- /dev/null +++ b/src/dto/namespace_dto.rs @@ -0,0 +1,5 @@ +use serde::{Deserialize, Serialize}; +#[derive(Clone, Serialize, Deserialize)] +pub struct NamespaceDto { + +} diff --git a/src/dto/table_dto.rs b/src/dto/table_dto.rs new file mode 100644 index 0000000..b39056d --- /dev/null +++ b/src/dto/table_dto.rs @@ -0,0 +1,5 @@ +use serde::{Deserialize, Serialize}; +#[derive(Clone, Serialize, Deserialize)] +pub struct TableDto { + +} diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs new file mode 100644 index 0000000..e69de29 From b149f0b0946f18cba6b8cc7fee55dce58deb359c Mon Sep 17 00:00:00 2001 From: Aditya-06 Date: Wed, 28 Feb 2024 01:11:47 -0500 Subject: [PATCH 02/10] chore/add deps --- Cargo.toml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 671a5da..a8bd700 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,11 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +axum = {version = "0.7.4"} +serde = { version = "1.0", features = ["derive"] } +tokio = { version = "1.0", features = ["full"] } +serde_json = "1.0" +tower-http = { version = "0.4.0", features = ["full"] } + +pretty_assertions = "0.7" +select = "0.5" \ No newline at end of file From ffdc6b4ed76dd59057823648b651321235e86956 Mon Sep 17 00:00:00 2001 From: Aditya-06 Date: Wed, 28 Feb 2024 01:12:05 -0500 Subject: [PATCH 03/10] chore/add service functions --- src/handlers/mod.rs | 2 + src/handlers/namespace_handler.rs | 75 +++++++++++++++++++++++++++++++ src/handlers/table_handler.rs | 72 +++++++++++++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100644 src/handlers/namespace_handler.rs create mode 100644 src/handlers/table_handler.rs diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index e69de29..ee0c763 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -0,0 +1,2 @@ +pub mod namespace_handler; +pub mod table_handler; \ No newline at end of file diff --git a/src/handlers/namespace_handler.rs b/src/handlers/namespace_handler.rs new file mode 100644 index 0000000..785cdba --- /dev/null +++ b/src/handlers/namespace_handler.rs @@ -0,0 +1,75 @@ +use axum::{ + extract::{Json, Path}, + http::StatusCode, + response::IntoResponse, +}; + + + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct Namespace { + // Define your namespace properties here + // Example: pub namespace_name: String, +} + + +pub async fn list_namespaces() -> Json> { + // Logic to list namespaces + let namespaces: Vec = vec!["accounting".to_string(), "tax".to_string(), "paid".to_string()]; + Json(namespaces) +} + +pub async fn create_namespace(new_namespace: Json) -> Json { + // Logic to create a new namespace + + // Logic to persist the namespace and add properties + new_namespace +} + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct NamespaceMetadata { + // Define your namespace metadata properties here + // Example: pub metadata_property: String, + data: String, +} + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct NamespaceProperties { + data: String, +} + +pub async fn load_namespace_metadata(Path(namespace): Path) -> Json { + print!("Namespaces: {}", namespace); + // Logic to load metadata properties for a namespace + let metadata = NamespaceMetadata { + data: namespace, + // Populate with actual metadata properties + }; + Json(metadata) +} + +pub async fn namespace_exists(Path(namespace): Path) -> impl IntoResponse { + // Logic to check if a namespace exists + // This route just needs to return a status code, no body required + // Return HTTP status code 200 to indicate namespace exists + StatusCode::FOUND +} + +pub async fn drop_namespace(Path(namespace): Path) -> impl IntoResponse { + // Logic to drop a namespace from the catalog + // Ensure the namespace is empty before dropping + // Return HTTP status code 204 to indicate successful deletion + StatusCode::OK +} + +pub async fn set_namespace_properties(Path(namespace): Path) -> Json { + // Logic to set and/or remove properties on a namespace + // Deserialize request body and process properties + // Return HTTP status code 200 to indicate success + + let prop = NamespaceProperties { + data: "namespace properties".to_string(), + }; + + Json(prop) +} diff --git a/src/handlers/table_handler.rs b/src/handlers/table_handler.rs new file mode 100644 index 0000000..9eb803f --- /dev/null +++ b/src/handlers/table_handler.rs @@ -0,0 +1,72 @@ +use axum::{ + extract::{Json, Path}, + http::StatusCode, + response::IntoResponse, +}; + + +pub async fn list_tables(Path(namespace): Path) -> Json> { + // Logic to list all table identifiers underneath a given namespace + // Dummy response for demonstration + let tables: Vec = vec!["accounting".to_string(), "tax".to_string(), "paid".to_string()]; + Json(tables) + +} + +pub async fn create_table(Path(namespace): Path) -> impl IntoResponse { + // Logic to create a table in the given namespace + // Dummy response for demonstration + "Table created".to_string() +} + +pub async fn register_table(Path(namespace): Path) -> impl IntoResponse { + // Logic to register a table in the given namespace using metadata file location + // Dummy response for demonstration + "Table registered".to_string() +} + +pub async fn load_table(Path((namespace, table)): Path<(String, String)>) -> impl IntoResponse { + // Logic to load a table from the catalog + // Dummy response for demonstration + Json(table) +} + +pub async fn delete_table(Path((namespace, table)): Path<(String, String)>) -> impl IntoResponse { + // Logic to drop a table from the catalog + // Dummy response for demonstration + "Table dropped".to_string() +} + +pub async fn table_exists(Path((namespace, table)): Path<(String, String)>) -> impl IntoResponse { + // Logic to check if a table exists within a given namespace + // This route just needs to return a status code, no body required + StatusCode::OK // Return HTTP status code 200 to indicate table exists +} + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct MetricsReport { + // Define your metrics report properties here + // Example: pub metric_name: String, +} + +// Handler functions +pub async fn rename_table(table_rename: String) -> impl IntoResponse { + // Logic to rename a table from its current name to a new name + // Access table_rename.old_name and table_rename.new_name to get the old and new names + // Dummy response for demonstration + "Table renamed".to_string() +} + +pub async fn report_metrics(Path((namespace, table)): Path<(String, String)>) -> impl IntoResponse { + // Logic to process metrics report + // Access namespace, table, and metrics data + // Dummy response for demonstration + Json(table) +} + +pub async fn find_tuple_location(Path((namespace, table, tuple_id)): Path<(String, String, String)>) -> impl IntoResponse { + // Logic to return the physical file location for a given tuple ID + // Access namespace, table, and tuple_id data + // Dummy response for demonstration + format!("Physical file location for tuple ID {} of table {} in namespace {}.", tuple_id, table, namespace) +} From 8a3a464d7ec18e1cba6586e3faa2002a62f0d329 Mon Sep 17 00:00:00 2001 From: Aditya-06 Date: Wed, 28 Feb 2024 01:12:49 -0500 Subject: [PATCH 04/10] chore/add routes --- src/routes/mod.rs | 3 +++ src/routes/namespace.rs | 13 +++++++++++++ src/routes/root.rs | 14 ++++++++++++++ src/routes/table.rs | 18 ++++++++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 src/routes/mod.rs create mode 100644 src/routes/namespace.rs create mode 100644 src/routes/root.rs create mode 100644 src/routes/table.rs diff --git a/src/routes/mod.rs b/src/routes/mod.rs new file mode 100644 index 0000000..136fb5a --- /dev/null +++ b/src/routes/mod.rs @@ -0,0 +1,3 @@ +pub mod namespace; +pub mod table; +pub mod root; \ No newline at end of file diff --git a/src/routes/namespace.rs b/src/routes/namespace.rs new file mode 100644 index 0000000..34e2e46 --- /dev/null +++ b/src/routes/namespace.rs @@ -0,0 +1,13 @@ +use axum::{ routing::{get, post, head, delete}, Router}; +use crate::handlers::namespace_handler; + +pub fn routes() -> Router<> { + let router = Router::new() + .route("/namespaces", get(namespace_handler::list_namespaces)) + .route("/namespaces", post(namespace_handler::create_namespace)) + .route("/namespace/:namespace", get(namespace_handler::load_namespace_metadata)) + .route("/namespace/:namespace", head(namespace_handler::namespace_exists)) + .route("/namespace/:namespace", delete(namespace_handler::drop_namespace)) + .route("/namespace/:namespace/properties", post(namespace_handler::set_namespace_properties)); + return router; +} diff --git a/src/routes/root.rs b/src/routes/root.rs new file mode 100644 index 0000000..8516cf5 --- /dev/null +++ b/src/routes/root.rs @@ -0,0 +1,14 @@ +use crate::routes::{namespace, table}; +use axum::routing::IntoMakeService; +use axum::Router; +use tower_http::trace::TraceLayer; + +pub fn routes() -> Router { + + + let app_router = Router::new() + .nest("/api/tables", table::routes()) + .nest("/api/namespaces", namespace::routes()); + + app_router +} diff --git a/src/routes/table.rs b/src/routes/table.rs new file mode 100644 index 0000000..a3ba5ef --- /dev/null +++ b/src/routes/table.rs @@ -0,0 +1,18 @@ +use axum::{ routing::{get, post, head, delete}, Router}; +use crate::handlers::table_handler; + + +pub fn routes() -> Router<> { + let router = Router::new() + .route("/namespaces/:namespace/tables", get(table_handler::list_tables)) + .route("/namespaces/:namespace/tables", post(table_handler::create_table)) + .route("/namespaces/:namespace/register", post(table_handler::register_table)) + .route("/namespaces/:namespace/tables/:table", get(table_handler::load_table)) + .route("/namespaces/:namespace/tables/:table", delete(table_handler::delete_table)) + .route("/namespaces/:namespace/tables/:table", head(table_handler::table_exists)) + .route("/tables/rename", post(table_handler::rename_table)) + .route("/namespaces/:namespace/tables/:table/metrics", post(table_handler::report_metrics)) + .route("/namespaces/:namespace/tables/:table/find/:tuple_id", get(table_handler::find_tuple_location)); + + return router; +} From 6e81d57c078c6459b0b34f4c492014dc13aa4980 Mon Sep 17 00:00:00 2001 From: Aditya-06 Date: Wed, 28 Feb 2024 01:13:08 -0500 Subject: [PATCH 05/10] feat/skeletal routes implemented --- src/main.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index e7a11a9..959f2e2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,10 @@ -fn main() { - println!("Hello, world!"); +mod routes; +mod dto; +mod handlers; + +#[tokio::main] +async fn main() { + let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); + let app = routes::root::routes(); + axum::serve(listener, app).await.unwrap(); } From 1e98187c334340dbdf7781e735fd19effff8d9df Mon Sep 17 00:00:00 2001 From: Aditya-06 Date: Wed, 28 Feb 2024 09:10:28 -0500 Subject: [PATCH 06/10] chore/move code to dotenv file --- .env | 1 + Cargo.toml | 1 + src/config/mod.rs | 1 + src/config/parameters.rs | 11 +++++++++++ src/main.rs | 7 ++++++- 5 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 .env create mode 100644 src/config/mod.rs create mode 100644 src/config/parameters.rs diff --git a/.env b/.env new file mode 100644 index 0000000..9a69c24 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +PORT=5000 \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index a8bd700..4394339 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ serde = { version = "1.0", features = ["derive"] } tokio = { version = "1.0", features = ["full"] } serde_json = "1.0" tower-http = { version = "0.4.0", features = ["full"] } +dotenv = "0.15.0" pretty_assertions = "0.7" select = "0.5" \ No newline at end of file diff --git a/src/config/mod.rs b/src/config/mod.rs new file mode 100644 index 0000000..78d6859 --- /dev/null +++ b/src/config/mod.rs @@ -0,0 +1 @@ +pub mod parameters; \ No newline at end of file diff --git a/src/config/parameters.rs b/src/config/parameters.rs new file mode 100644 index 0000000..91ece20 --- /dev/null +++ b/src/config/parameters.rs @@ -0,0 +1,11 @@ +use dotenv; + +pub fn init() { + dotenv::dotenv().ok().expect("Failed to load .env file"); +} + +pub fn get(parameter: &str) -> String { + let env_parameter = std::env::var(parameter) + .expect(&format!("{} is not defined in the environment.", parameter)); + return env_parameter; +} diff --git a/src/main.rs b/src/main.rs index 959f2e2..cfe1c21 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,15 @@ mod routes; mod dto; mod handlers; +mod config; + +use crate::config::parameters; #[tokio::main] async fn main() { - let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); + let host = format!("0.0.0.0:{}", parameters::get("PORT")); + + let listener = tokio::net::TcpListener::bind(host).await.unwrap(); let app = routes::root::routes(); axum::serve(listener, app).await.unwrap(); } From 5a1f2e82c267bd4b4c3163d37c83db137936b1ed Mon Sep 17 00:00:00 2001 From: Aditya-06 Date: Wed, 28 Feb 2024 09:13:20 -0500 Subject: [PATCH 07/10] chore/fix missing parameter issue --- src/config/parameters.rs | 4 ++-- src/main.rs | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/config/parameters.rs b/src/config/parameters.rs index 91ece20..814889d 100644 --- a/src/config/parameters.rs +++ b/src/config/parameters.rs @@ -6,6 +6,6 @@ pub fn init() { pub fn get(parameter: &str) -> String { let env_parameter = std::env::var(parameter) - .expect(&format!("{} is not defined in the environment.", parameter)); - return env_parameter; + .expect(&format!("{} is not defined in the environment", parameter)); + env_parameter } diff --git a/src/main.rs b/src/main.rs index cfe1c21..0871e2a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,7 @@ use crate::config::parameters; #[tokio::main] async fn main() { + parameters::init(); let host = format!("0.0.0.0:{}", parameters::get("PORT")); let listener = tokio::net::TcpListener::bind(host).await.unwrap(); From 9eddb46ea01fa3441fafbb527ff6305855a44377 Mon Sep 17 00:00:00 2001 From: Aditya-06 Date: Sat, 2 Mar 2024 16:42:59 -0500 Subject: [PATCH 08/10] chore/clean-up and add testing --- src/config/parameters.rs | 2 ++ src/handlers/namespace_handler.rs | 5 ++-- src/handlers/table_handler.rs | 17 ++---------- src/main.rs | 1 + src/routes/root.rs | 6 ++--- src/tests/mod.rs | 0 src/tests/namespace_test.rs | 43 +++++++++++++++++++++++++++++++ 7 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 src/tests/mod.rs create mode 100644 src/tests/namespace_test.rs diff --git a/src/config/parameters.rs b/src/config/parameters.rs index 814889d..b530dac 100644 --- a/src/config/parameters.rs +++ b/src/config/parameters.rs @@ -1,9 +1,11 @@ use dotenv; +// load the env file pub fn init() { dotenv::dotenv().ok().expect("Failed to load .env file"); } +// get the parameters from the env file and throw errors appropriately pub fn get(parameter: &str) -> String { let env_parameter = std::env::var(parameter) .expect(&format!("{} is not defined in the environment", parameter)); diff --git a/src/handlers/namespace_handler.rs b/src/handlers/namespace_handler.rs index 785cdba..127dabd 100644 --- a/src/handlers/namespace_handler.rs +++ b/src/handlers/namespace_handler.rs @@ -8,8 +8,7 @@ use axum::{ #[derive(Debug, serde::Serialize, serde::Deserialize)] pub struct Namespace { - // Define your namespace properties here - // Example: pub namespace_name: String, + } @@ -59,7 +58,7 @@ pub async fn drop_namespace(Path(namespace): Path) -> impl IntoResponse // Logic to drop a namespace from the catalog // Ensure the namespace is empty before dropping // Return HTTP status code 204 to indicate successful deletion - StatusCode::OK + StatusCode::NO_CONTENT } pub async fn set_namespace_properties(Path(namespace): Path) -> Json { diff --git a/src/handlers/table_handler.rs b/src/handlers/table_handler.rs index 9eb803f..a898129 100644 --- a/src/handlers/table_handler.rs +++ b/src/handlers/table_handler.rs @@ -6,7 +6,6 @@ use axum::{ pub async fn list_tables(Path(namespace): Path) -> Json> { - // Logic to list all table identifiers underneath a given namespace // Dummy response for demonstration let tables: Vec = vec!["accounting".to_string(), "tax".to_string(), "paid".to_string()]; Json(tables) @@ -15,58 +14,46 @@ pub async fn list_tables(Path(namespace): Path) -> Json> { pub async fn create_table(Path(namespace): Path) -> impl IntoResponse { // Logic to create a table in the given namespace - // Dummy response for demonstration "Table created".to_string() } pub async fn register_table(Path(namespace): Path) -> impl IntoResponse { // Logic to register a table in the given namespace using metadata file location - // Dummy response for demonstration "Table registered".to_string() } pub async fn load_table(Path((namespace, table)): Path<(String, String)>) -> impl IntoResponse { // Logic to load a table from the catalog - // Dummy response for demonstration Json(table) } pub async fn delete_table(Path((namespace, table)): Path<(String, String)>) -> impl IntoResponse { // Logic to drop a table from the catalog - // Dummy response for demonstration "Table dropped".to_string() } pub async fn table_exists(Path((namespace, table)): Path<(String, String)>) -> impl IntoResponse { // Logic to check if a table exists within a given namespace - // This route just needs to return a status code, no body required - StatusCode::OK // Return HTTP status code 200 to indicate table exists + StatusCode::OK } #[derive(Debug, serde::Serialize, serde::Deserialize)] pub struct MetricsReport { - // Define your metrics report properties here - // Example: pub metric_name: String, + } // Handler functions pub async fn rename_table(table_rename: String) -> impl IntoResponse { // Logic to rename a table from its current name to a new name - // Access table_rename.old_name and table_rename.new_name to get the old and new names - // Dummy response for demonstration "Table renamed".to_string() } pub async fn report_metrics(Path((namespace, table)): Path<(String, String)>) -> impl IntoResponse { // Logic to process metrics report - // Access namespace, table, and metrics data - // Dummy response for demonstration Json(table) } pub async fn find_tuple_location(Path((namespace, table, tuple_id)): Path<(String, String, String)>) -> impl IntoResponse { // Logic to return the physical file location for a given tuple ID - // Access namespace, table, and tuple_id data - // Dummy response for demonstration format!("Physical file location for tuple ID {} of table {} in namespace {}.", tuple_id, table, namespace) } diff --git a/src/main.rs b/src/main.rs index 0871e2a..11b2b1c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ mod routes; mod dto; mod handlers; mod config; +mod tests; use crate::config::parameters; diff --git a/src/routes/root.rs b/src/routes/root.rs index 8516cf5..34e10c1 100644 --- a/src/routes/root.rs +++ b/src/routes/root.rs @@ -5,10 +5,10 @@ use tower_http::trace::TraceLayer; pub fn routes() -> Router { - + // merge the 2 routes let app_router = Router::new() - .nest("/api/tables", table::routes()) - .nest("/api/namespaces", namespace::routes()); + .nest("/", table::routes()) + .nest("/", namespace::routes()); app_router } diff --git a/src/tests/mod.rs b/src/tests/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/tests/namespace_test.rs b/src/tests/namespace_test.rs new file mode 100644 index 0000000..3e6e447 --- /dev/null +++ b/src/tests/namespace_test.rs @@ -0,0 +1,43 @@ +use axum::{http::StatusCode, response::Json}; +use axum::extract::Json as JsonExtractor; +use axum::handler::post; +use axum::routing::Router; +use serde_json::json; +use axum::test::extract; + +use crate::{create_namespace, list_namespaces, Namespace}; + +#[tokio::test] +async fn test_list_namespaces() { + // Create a test router with the list_namespaces route + let app = Router::new().route("/namespaces", post(list_namespaces)); + + // Perform a request to the route + let response = axum::test::call(&app, axum::test::request::Request::post("/namespaces").body(()).unwrap()).await; + + // Ensure that the response status code is OK + assert_eq!(response.status(), StatusCode::OK); + + // Ensure that the response body contains the expected JSON data + let body = extract::>>(response.into_body()).await.unwrap(); + assert_eq!(body.0, vec!["accounting", "tax", "paid"]); +} + +#[tokio::test] +async fn test_create_namespace() { + // Create a test router with the create_namespace route + let app = Router::new().route("/namespaces", post(create_namespace)); + + // Create a JSON payload representing a new namespace + let payload = json!({}); + + // Perform a request to the route with the JSON payload + let response = axum::test::call(&app, axum::test::request::Request::post("/namespaces").body(payload.to_string()).unwrap()).await; + + // Ensure that the response status code is OK + assert_eq!(response.status(), StatusCode::OK); + + // Ensure that the response body contains the expected JSON data + let body = extract::>(response.into_body()).await.unwrap(); + assert_eq!(body, Json(Namespace {})); +} From 8e039d8f58e4024ce9b7fe4a1301d7a1656f1454 Mon Sep 17 00:00:00 2001 From: Aditya-06 Date: Sat, 2 Mar 2024 16:45:21 -0500 Subject: [PATCH 09/10] chore/delete unused files --- src/dto/namespace_dto.rs | 5 ----- src/dto/table_dto.rs | 5 ----- 2 files changed, 10 deletions(-) delete mode 100644 src/dto/namespace_dto.rs delete mode 100644 src/dto/table_dto.rs diff --git a/src/dto/namespace_dto.rs b/src/dto/namespace_dto.rs deleted file mode 100644 index 6c51eb4..0000000 --- a/src/dto/namespace_dto.rs +++ /dev/null @@ -1,5 +0,0 @@ -use serde::{Deserialize, Serialize}; -#[derive(Clone, Serialize, Deserialize)] -pub struct NamespaceDto { - -} diff --git a/src/dto/table_dto.rs b/src/dto/table_dto.rs deleted file mode 100644 index b39056d..0000000 --- a/src/dto/table_dto.rs +++ /dev/null @@ -1,5 +0,0 @@ -use serde::{Deserialize, Serialize}; -#[derive(Clone, Serialize, Deserialize)] -pub struct TableDto { - -} From 649579d3f7124f615a5f2a64539ebade81a3914e Mon Sep 17 00:00:00 2001 From: Aditya-06 Date: Thu, 14 Mar 2024 17:05:49 -0400 Subject: [PATCH 10/10] change port --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 9a69c24..c0c68b1 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -PORT=5000 \ No newline at end of file +PORT=3000 \ No newline at end of file