Added Location and location ownership/rights to gamenight.
This commit is contained in:
47
gamenight-database/src/location_owner.rs
Normal file
47
gamenight-database/src/location_owner.rs
Normal file
@@ -0,0 +1,47 @@
|
||||
use crate::{DbConnection, schema::location_owner, user::DatabaseError};
|
||||
use diesel::{
|
||||
BoolExpressionMethods, ExpressionMethods, QueryDsl, RunQueryDsl,
|
||||
dsl::{delete, insert_into},
|
||||
prelude::{Insertable, Queryable},
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use uuid::Uuid;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Insertable, Queryable)]
|
||||
#[diesel(table_name = location_owner)]
|
||||
pub struct LocationOwner {
|
||||
pub location_id: Uuid,
|
||||
pub user_id: Uuid,
|
||||
}
|
||||
|
||||
pub fn grant_permission(
|
||||
conn: &mut DbConnection,
|
||||
location_owner: LocationOwner,
|
||||
) -> Result<usize, DatabaseError> {
|
||||
Ok(insert_into(location_owner::table)
|
||||
.values(&location_owner)
|
||||
.execute(conn)?)
|
||||
}
|
||||
|
||||
pub fn revoke_permission(
|
||||
conn: &mut DbConnection,
|
||||
location_owner: LocationOwner,
|
||||
) -> Result<usize, DatabaseError> {
|
||||
Ok(delete(location_owner::table)
|
||||
.filter(
|
||||
location_owner::location_id
|
||||
.eq(location_owner.location_id)
|
||||
.and(location_owner::user_id.eq(location_owner.user_id)),
|
||||
)
|
||||
.execute(conn)?)
|
||||
}
|
||||
|
||||
pub fn location_permissions(
|
||||
conn: &mut DbConnection,
|
||||
location_id: Uuid,
|
||||
) -> Result<Vec<Uuid>, DatabaseError> {
|
||||
Ok(location_owner::table
|
||||
.select(location_owner::user_id)
|
||||
.filter(location_owner::location_id.eq(location_id))
|
||||
.get_results(conn)?)
|
||||
}
|
||||
Reference in New Issue
Block a user