don't allow to join as user if already cox

This commit is contained in:
2023-04-05 22:01:50 +02:00
parent 9ab1572b15
commit 8f05d1bdf4
3 changed files with 55 additions and 14 deletions

View File

@ -1,17 +1,45 @@
use sqlx::SqlitePool;
use super::planned_event::PlannedEvent;
pub struct UserTrip {}
impl UserTrip {
pub async fn create(db: &SqlitePool, user_id: i64, trip_details_id: i64) -> bool {
sqlx::query!(
pub async fn create(
db: &SqlitePool,
user_id: i64,
trip_details_id: i64,
) -> Result<(), UserTripError> {
if PlannedEvent::is_full(db, trip_details_id).await {
return Err(UserTripError::EventAlreadyFull);
}
let is_cox = sqlx::query!(
"SELECT count(*) as amount
FROM trip
WHERE trip_details_id = ?
AND cox_id = ?",
trip_details_id,
user_id
)
.fetch_one(db)
.await
.unwrap();
if is_cox.amount > 0 {
return Err(UserTripError::AlreadyRegisteredAsCox);
}
match sqlx::query!(
"INSERT INTO user_trip (user_id, trip_details_id) VALUES(?, ?)",
user_id,
trip_details_id
)
.execute(db)
.await
.is_ok()
{
Ok(_) => Ok(()),
Err(_) => Err(UserTripError::AlreadyRegistered),
}
}
pub async fn delete(db: &SqlitePool, user_id: i64, trip_details_id: i64) {
@ -25,3 +53,9 @@ impl UserTrip {
.is_ok();
}
}
pub enum UserTripError {
AlreadyRegistered,
AlreadyRegisteredAsCox,
EventAlreadyFull,
}