From 517794d0dbc775344927532bae6f82bc4abbbfd7 Mon Sep 17 00:00:00 2001 From: Luke Harding Date: Fri, 3 May 2024 10:38:54 -0400 Subject: [PATCH] Add get_tasks endpoint --- server/Cargo.lock | 5 +++++ server/Cargo.toml | 8 +++++--- server/src/api/mod.rs | 16 ++++++++++++++++ server/src/db/mod.rs | 12 +++++++++++- server/src/db/models.rs | 3 ++- server/src/main.rs | 12 ++++-------- 6 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 server/src/api/mod.rs diff --git a/server/Cargo.lock b/server/Cargo.lock index ddd4d16..a73f78e 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -365,6 +365,7 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", + "serde", "wasm-bindgen", "windows-targets 0.52.5", ] @@ -464,6 +465,7 @@ dependencies = [ "diesel_derives", "itoa", "pq-sys", + "serde_json", "uuid", ] @@ -907,6 +909,8 @@ dependencies = [ "diesel", "diesel_migrations", "dotenvy", + "serde", + "serde_json", "uuid", ] @@ -1363,6 +1367,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" dependencies = [ "getrandom", + "serde", ] [[package]] diff --git a/server/Cargo.toml b/server/Cargo.toml index a88b703..b9e2316 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -6,9 +6,11 @@ license = "GPL-3.0-only" [dependencies] actix-web = "4.5.1" -chrono = "0.4.38" +chrono = { version = "0.4.38", features = ["serde"] } colored = "2.1.0" -diesel = { version = "2.1.6", features = ["postgres", "uuid", "chrono"] } +diesel = { version = "2.1.6", features = ["postgres", "uuid", "chrono", "serde_json"] } diesel_migrations = { version = "2.1.0", features = ["postgres"] } dotenvy = "0.15.7" -uuid = { version = "1.8.0", features = ["v4"] } +serde = { version = "1.0.200", features = ["derive"] } +serde_json = "1.0.116" +uuid = { version = "1.8.0", features = ["v4", "serde"] } diff --git a/server/src/api/mod.rs b/server/src/api/mod.rs new file mode 100644 index 0000000..83248b0 --- /dev/null +++ b/server/src/api/mod.rs @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-3.0-Only +// Copyright (C) 2024 Luke Harding + +use actix_web::{get, HttpResponse, Responder}; + +use crate::db; + +#[get("/get_tasks")] +pub async fn get_tasks() -> impl Responder { + let tasks = match db::get_tasks().await { + Ok(tasks) => tasks, + Err(e) => return HttpResponse::InternalServerError().body(e.to_string()), + }; + + HttpResponse::Ok().json(tasks) +} diff --git a/server/src/db/mod.rs b/server/src/db/mod.rs index 93e248f..79e245e 100644 --- a/server/src/db/mod.rs +++ b/server/src/db/mod.rs @@ -3,10 +3,12 @@ use std::{env, error}; -use diesel::{Connection, PgConnection}; +use diesel::{Connection, PgConnection, QueryDsl, RunQueryDsl, SelectableHelper}; use diesel::pg::Pg; use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; +use models::Task; + pub mod models; pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!("./migrations"); @@ -24,3 +26,11 @@ pub fn run_migrations( Ok(()) } + +pub async fn get_tasks() -> Result, Box> { + use crate::schema::tasks::dsl::*; + + let conn = &mut establish_connection()?; + + Ok(tasks.select(Task::as_select()).load(conn)?) +} diff --git a/server/src/db/models.rs b/server/src/db/models.rs index 883eef0..9bf8642 100644 --- a/server/src/db/models.rs +++ b/server/src/db/models.rs @@ -3,9 +3,10 @@ use chrono::NaiveDateTime; use diesel::prelude::*; +use serde::{Deserialize, Serialize}; use uuid::Uuid; -#[derive(Queryable, Selectable)] +#[derive(Queryable, Selectable, Serialize, Deserialize)] #[diesel(table_name = crate::schema::tasks)] #[diesel(check_for_backend(diesel::pg::Pg))] pub struct Task { diff --git a/server/src/main.rs b/server/src/main.rs index 7ee175e..1162c84 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -3,11 +3,12 @@ use std::{env, io}; -use actix_web::{App, get, HttpResponse, HttpServer, Responder}; +use actix_web::{App, HttpServer}; +mod api; pub mod db; -pub mod util; pub mod schema; +pub mod util; #[actix_web::main] async fn main() -> io::Result<()> { @@ -58,13 +59,8 @@ async fn main() -> io::Result<()> { util::notice_println(format!("Starting server on {}:{}", bind_addr, port)); - HttpServer::new(|| App::new().service(hello)) + HttpServer::new(|| App::new().service(api::get_tasks)) .bind((bind_addr, port))? .run() .await } - -#[get("/")] -async fn hello() -> impl Responder { - HttpResponse::Ok().body("Hello World!") -}