Get single video route
This commit is contained in:
parent
bdee736864
commit
628f179e09
@ -4,7 +4,7 @@ use axum::{
|
||||
};
|
||||
use instance::Instance;
|
||||
use middleware::auth;
|
||||
use routes::{list_videos, upload_video};
|
||||
use routes::{get_video, list_videos, upload_video};
|
||||
use tokio::signal;
|
||||
use tracing::info;
|
||||
|
||||
@ -31,6 +31,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
.route("/upload", post(upload_video))
|
||||
.route_layer(axum::middleware::from_fn_with_state(instance.clone(), auth))
|
||||
.route("/", get(list_videos))
|
||||
.route("/{id}", get(get_video))
|
||||
.with_state(instance);
|
||||
|
||||
let listener = tokio::net::TcpListener::bind(address).await?;
|
||||
|
@ -1,6 +1,6 @@
|
||||
use axum::{
|
||||
Json,
|
||||
extract::{Query, State},
|
||||
extract::{Path, Query, State},
|
||||
http::StatusCode,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
@ -61,6 +61,19 @@ pub async fn list_videos(
|
||||
}))
|
||||
}
|
||||
|
||||
/// Get a single video from the database by its ID
|
||||
pub async fn get_video(
|
||||
State(state): State<Instance>,
|
||||
Path(id): Path<i64>,
|
||||
) -> Result<Json<Video>, StatusCode> {
|
||||
sqlx::query_as!(Video, "SELECT * FROM video WHERE id = ?", id)
|
||||
.fetch_optional(&state.pool)
|
||||
.await
|
||||
.map_or(Err(StatusCode::INTERNAL_SERVER_ERROR), |video| {
|
||||
video.map_or(Err(StatusCode::NOT_FOUND), |v| Ok(Json(v)))
|
||||
})
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct UploadVideoQuery {
|
||||
url: String,
|
||||
|
Loading…
x
Reference in New Issue
Block a user