This commit is contained in:
2026-07-05 02:33:07 +02:00
parent 909c502a63
commit ace28a0082
5 changed files with 54 additions and 17 deletions
+8 -1
View File
@@ -1,6 +1,6 @@
use crate::models::message;
use crate::repositories::{AnyResult, RepositoryContext};
use sea_orm::{ActiveModelTrait, EntityTrait};
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter};
use std::sync::Arc;
#[derive(Clone, Debug)]
@@ -19,6 +19,13 @@ impl MessageRepository {
.await?)
}
pub async fn get_by_channel(&self, channel_id: uuid::Uuid) -> AnyResult<Vec<message::Model>> {
Ok(message::Entity::find()
.filter(message::Column::ChannelId.eq(channel_id))
.all(&self.context.db)
.await?)
}
pub async fn update(&self, active: message::ActiveModel) -> AnyResult<message::Model> {
let message = active.update(&self.context.db).await?;
self.context.events.emit("message_updated", message.clone());
+5
View File
@@ -25,3 +25,8 @@ pub struct CreateMessageRequest {
pub struct UpdateMessageRequest {
pub content: String,
}
#[derive(serde::Deserialize, utoipa::IntoParams)]
pub struct MessageFilters {
pub channel_id: Option<uuid::Uuid>,
}
+15 -3
View File
@@ -1,10 +1,10 @@
use super::dto::{CreateMessageRequest, MessageFilters, MessageResponse, UpdateMessageRequest};
use crate::core::state::AppState;
use crate::http::context::CurrentUser;
use crate::http::error::HTTPError;
use crate::routes::message::dto::{CreateMessageRequest, MessageResponse, UpdateMessageRequest};
use crate::routes::message::mapper;
use axum::{
extract::{Path, State},
extract::{Path, Query, State},
http::StatusCode,
Json,
};
@@ -18,12 +18,24 @@ use uuid::Uuid;
(status = 200, description = "Liste des messages récupérée avec succès", body = [MessageResponse]),
(status = 500, description = "Erreur interne du serveur")
),
params(
MessageFilters
),
tag = "Messages"
)]
pub async fn get_all(
State(state): State<AppState>,
Query(filters): Query<MessageFilters>,
) -> Result<Json<Vec<MessageResponse>>, HTTPError> {
let messages = state.repositories.message.get_all().await?;
let messages = if let Some(channel_id) = filters.channel_id {
state
.repositories
.message
.get_by_channel(channel_id)
.await?
} else {
state.repositories.message.get_all().await?
};
Ok(Json(
messages
.into_iter()