init
This commit is contained in:
@@ -1,21 +1,25 @@
|
||||
use crate::domain::dto::message::{CreateMessageRequest, MessageQueryParams, MessageResponse, UpdateMessageRequest};
|
||||
use crate::core::state::AppState;
|
||||
use crate::domain::dto::message::{
|
||||
CreateMessageRequest, MessagePageResponse, MessageQueryParams, MessageResponse,
|
||||
UpdateMessageRequest,
|
||||
};
|
||||
use crate::http::context::CurrentUser;
|
||||
use crate::http::error::HTTPError;
|
||||
use crate::routes::message::mapper;
|
||||
use axum::{
|
||||
Json,
|
||||
extract::{Path, Query, State},
|
||||
http::StatusCode,
|
||||
Json,
|
||||
};
|
||||
use uuid::Uuid;
|
||||
|
||||
/// Liste tous les messages
|
||||
/// Liste une fenêtre paginée de messages
|
||||
#[utoipa::path(
|
||||
get,
|
||||
path = "/messages",
|
||||
responses(
|
||||
(status = 200, description = "Liste des messages récupérée avec succès", body = [MessageResponse]),
|
||||
(status = 200, description = "Fenêtre de messages récupérée avec succès", body = MessagePageResponse),
|
||||
(status = 400, description = "Curseurs incompatibles ou canal manquant"),
|
||||
(status = 500, description = "Erreur interne du serveur")
|
||||
),
|
||||
params(
|
||||
@@ -26,15 +30,29 @@ use uuid::Uuid;
|
||||
pub async fn get_all(
|
||||
State(state): State<AppState>,
|
||||
Query(filters): Query<MessageQueryParams>,
|
||||
) -> Result<Json<Vec<MessageResponse>>, HTTPError> {
|
||||
) -> Result<Json<MessagePageResponse>, HTTPError> {
|
||||
if filters.before_id.is_some() && filters.after_id.is_some() {
|
||||
return Err(HTTPError::BadRequest(
|
||||
"before_id and after_id cannot be used together".to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
let params = mapper::query_params_to_message_filter(filters);
|
||||
let messages = state.repositories.message.filter(params).await?;
|
||||
Ok(Json(
|
||||
messages
|
||||
let page = state.repositories.message.filter(params).await?;
|
||||
let oldest_id = page.messages.first().map(|message| message.id);
|
||||
let newest_id = page.messages.last().map(|message| message.id);
|
||||
|
||||
Ok(Json(MessagePageResponse {
|
||||
messages: page
|
||||
.messages
|
||||
.into_iter()
|
||||
.map(mapper::message_model_to_message_response)
|
||||
.collect(),
|
||||
))
|
||||
oldest_id,
|
||||
newest_id,
|
||||
has_more_before: page.has_more_before,
|
||||
has_more_after: page.has_more_after,
|
||||
}))
|
||||
}
|
||||
|
||||
/// Récupère un message par son ID
|
||||
@@ -105,7 +123,11 @@ pub async fn create(
|
||||
))?;
|
||||
}
|
||||
|
||||
let message = state.services.message.create_message(payload.channel_id, user.id, payload.content).await?;
|
||||
let message = state
|
||||
.services
|
||||
.message
|
||||
.create_message(payload.channel_id, user.id, payload.content)
|
||||
.await?;
|
||||
Ok((
|
||||
StatusCode::CREATED,
|
||||
Json(mapper::message_model_to_message_response(message)),
|
||||
@@ -150,7 +172,11 @@ pub async fn update(
|
||||
return Err(HTTPError::Forbidden);
|
||||
}
|
||||
|
||||
let message = state.services.message.update_message(id, payload.content).await?;
|
||||
let message = state
|
||||
.services
|
||||
.message
|
||||
.update_message(id, payload.content)
|
||||
.await?;
|
||||
|
||||
Ok(Json(mapper::message_model_to_message_response(message)))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user