|
1 | 1 | use crate::dto::movie::NewMovie;
|
2 |
| -use crate::error_handling::{ApiError, ApiRawResult}; |
3 |
| -use crate::responses::movie_creation::MovieCreationResponse; |
| 2 | +use crate::error_handling::{ApiError, ApiRawResult, ApiResult}; |
| 3 | +use crate::responses::chapter::ChapterResponse; |
| 4 | +use crate::responses::movie::{MovieCreationResponse, MovieResponse}; |
4 | 5 | use crate::services;
|
5 | 6 | use diesel::Connection;
|
6 | 7 | use domain::models::artist::Artist;
|
7 | 8 | use infrastructure::Database;
|
8 | 9 | use rocket::response::status;
|
| 10 | +use rocket::serde::uuid::Uuid; |
9 | 11 | use rocket::{post, serde::json::Json};
|
10 | 12 | use rocket_okapi::okapi::openapi3::OpenApi;
|
11 | 13 | use rocket_okapi::settings::OpenApiSettings;
|
12 | 14 | use rocket_okapi::{openapi, openapi_get_routes_spec};
|
13 | 15 |
|
14 | 16 | pub fn get_routes_and_docs(settings: &OpenApiSettings) -> (Vec<rocket::Route>, OpenApi) {
|
15 |
| - openapi_get_routes_spec![settings: new_movie] |
| 17 | + openapi_get_routes_spec![settings: new_movie, get_movie, get_movie_chapters] |
16 | 18 | }
|
17 | 19 |
|
18 | 20 | /// Create a new movie with its chapters
|
@@ -77,3 +79,21 @@ async fn new_movie(
|
77 | 79 | |v| Ok(status::Created::new("").body(Json(v))),
|
78 | 80 | )
|
79 | 81 | }
|
| 82 | + |
| 83 | +/// Get a Single Movie |
| 84 | +#[openapi(tag = "Movies")] |
| 85 | +#[get("/<slug_or_uuid>")] |
| 86 | +async fn get_movie(db: Database, slug_or_uuid: String) -> ApiResult<MovieResponse> { |
| 87 | + db.run(move |conn| services::movie::find(&slug_or_uuid, conn)) |
| 88 | + .await |
| 89 | + .map_or_else(|e| Err(ApiError::from(e)), |v| Ok(Json(v))) |
| 90 | +} |
| 91 | + |
| 92 | +/// Get a Movie's Chapters |
| 93 | +#[openapi(tag = "Movies")] |
| 94 | +#[get("/<uuid>/chapters")] |
| 95 | +async fn get_movie_chapters(db: Database, uuid: Uuid) -> ApiResult<Vec<ChapterResponse>> { |
| 96 | + db.run(move |conn| services::chapters::find_by_movie(&uuid, conn)) |
| 97 | + .await |
| 98 | + .map_or_else(|e| Err(ApiError::from(e)), |v| Ok(Json(v))) |
| 99 | +} |
0 commit comments