33 lines
919 B
Rust
33 lines
919 B
Rust
|
use rocket::{
|
||
|
get,
|
||
|
response::{Flash, Redirect},
|
||
|
routes, Route, State,
|
||
|
};
|
||
|
use sqlx::SqlitePool;
|
||
|
|
||
|
use crate::model::{notification::Notification, user::User};
|
||
|
|
||
|
#[get("/<notification_id>/read")]
|
||
|
async fn mark_read(db: &State<SqlitePool>, user: User, notification_id: i64) -> Flash<Redirect> {
|
||
|
let Some(notification) = Notification::find_by_id(db, notification_id).await else {
|
||
|
return Flash::error(
|
||
|
Redirect::to("/"),
|
||
|
format!("Nachricht mit ID {notification_id} nicht gefunden."),
|
||
|
);
|
||
|
};
|
||
|
|
||
|
if notification.user_id == user.id {
|
||
|
notification.mark_read(db).await;
|
||
|
Flash::success(Redirect::to("/"), "Nachricht als gelesen markiert")
|
||
|
} else {
|
||
|
Flash::success(
|
||
|
Redirect::to("/"),
|
||
|
"Du kannst fremde Nachrichten nicht als gelesen markieren.",
|
||
|
)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pub fn routes() -> Vec<Route> {
|
||
|
routes![mark_read]
|
||
|
}
|