Improve tag endpoint

This commit is contained in:
Tobias Reisinger 2024-04-19 18:21:14 +02:00
parent 8215461e0d
commit bb76e3db4d
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
7 changed files with 147 additions and 12 deletions
emgauwa-core/src
handlers/v1
main.rs

View file

@ -1,6 +1,8 @@
use actix_web::{get, web, HttpResponse};
use actix_web::{delete, get, post, web, HttpResponse};
use emgauwa_lib::db::DbTag;
use emgauwa_lib::errors::EmgauwaError;
use emgauwa_lib::errors::{DatabaseError, EmgauwaError};
use emgauwa_lib::models::{FromDbModel, Tag};
use emgauwa_lib::types::RequestCreateTag;
use sqlx::{Pool, Sqlite};
#[get("/api/v1/tags")]
@ -13,3 +15,47 @@ pub async fn index(pool: web::Data<Pool<Sqlite>>) -> Result<HttpResponse, Emgauw
Ok(HttpResponse::Ok().json(tags))
}
#[get("/api/v1/tags/{tag_name}")]
pub async fn show(
pool: web::Data<Pool<Sqlite>>,
path: web::Path<(String,)>,
) -> Result<HttpResponse, EmgauwaError> {
let mut pool_conn = pool.acquire().await?;
let (tag_name,) = path.into_inner();
let tag = DbTag::get_by_tag(&mut pool_conn, &tag_name)
.await?
.ok_or(DatabaseError::NotFound)?;
let return_tag = Tag::from_db_model(&mut pool_conn, tag)?;
Ok(HttpResponse::Ok().json(return_tag))
}
#[delete("/api/v1/tags/{tag_name}")]
pub async fn delete(
pool: web::Data<Pool<Sqlite>>,
path: web::Path<(String,)>,
) -> Result<HttpResponse, EmgauwaError> {
let mut pool_conn = pool.acquire().await?;
let (tag_name,) = path.into_inner();
DbTag::delete_by_tag(&mut pool_conn, &tag_name).await?;
Ok(HttpResponse::Ok().json("tag got deleted"))
}
#[post("/api/v1/tags")]
pub async fn add(
pool: web::Data<Pool<Sqlite>>,
data: web::Json<RequestCreateTag>,
) -> Result<HttpResponse, EmgauwaError> {
let mut pool_conn = pool.acquire().await?;
let new_tag = DbTag::create(&mut pool_conn, &data.tag).await?;
let cache = (Vec::new(), Vec::new()); // a new tag can't have any relays or schedules
let return_tag = Tag::from_db_model_cache(&mut pool_conn, new_tag, cache)?;
Ok(HttpResponse::Created().json(return_tag))
}

View file

@ -85,6 +85,9 @@ async fn main() -> Result<(), std::io::Error> {
.service(handlers::v1::schedules::update)
.service(handlers::v1::schedules::delete)
.service(handlers::v1::tags::index)
.service(handlers::v1::tags::show)
.service(handlers::v1::tags::delete)
.service(handlers::v1::tags::add)
.service(handlers::v1::ws::ws_controllers)
})
.listen(listener)?