allow-boat-deletion #398

Merged
philipp merged 1 commits from allow-boat-deletion into staging 2024-04-17 14:08:01 +02:00
4 changed files with 18 additions and 9 deletions
Showing only changes of commit 858ae28eb3 - Show all commits

View File

@ -101,7 +101,8 @@ CREATE TABLE IF NOT EXISTS "boat" (
"default_shipmaster_only_steering" boolean default false not null, "default_shipmaster_only_steering" boolean default false not null,
"default_destination" text, "default_destination" text,
"skull" boolean default true NOT NULL, -- false => riemen "skull" boolean default true NOT NULL, -- false => riemen
"external" boolean default false NOT NULL -- false => owned by different club "external" boolean default false NOT NULL, -- false => owned by different club
"deleted" boolean NOT NULL DEFAULT FALSE
); );
CREATE TABLE IF NOT EXISTS "logbook_type" ( CREATE TABLE IF NOT EXISTS "logbook_type" (

View File

@ -26,6 +26,7 @@ pub struct Boat {
skull: bool, skull: bool,
#[serde(default = "bool::default")] #[serde(default = "bool::default")]
external: bool, external: bool,
pub deleted: bool,
} }
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
@ -188,8 +189,9 @@ AND date('now') BETWEEN start_date AND end_date;",
let boats = sqlx::query_as!( let boats = sqlx::query_as!(
Boat, Boat,
" "
SELECT id, name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, default_destination, skull, external SELECT id, name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, default_destination, skull, external, deleted
FROM boat FROM boat
WHERE deleted=false
ORDER BY amount_seats DESC ORDER BY amount_seats DESC
" "
) )
@ -215,12 +217,14 @@ SELECT
b.default_shipmaster_only_steering, b.default_shipmaster_only_steering,
b.default_destination, b.default_destination,
b.skull, b.skull,
b.external b.external,
b.deleted
FROM FROM
boat AS b boat AS b
WHERE WHERE
b.external = false b.external = false
AND b.location_id = (SELECT id FROM location WHERE name = 'Linz') AND b.location_id = (SELECT id FROM location WHERE name = 'Linz')
AND b.deleted = false
ORDER BY ORDER BY
b.name DESC; b.name DESC;
" "
@ -240,7 +244,7 @@ ORDER BY
sqlx::query_as!( sqlx::query_as!(
Boat, Boat,
" "
SELECT id, name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, default_destination, skull, external SELECT id, name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, default_destination, skull, external, deleted
FROM boat FROM boat
WHERE owner is null or owner = ? WHERE owner is null or owner = ?
ORDER BY amount_seats DESC ORDER BY amount_seats DESC
@ -254,7 +258,7 @@ ORDER BY amount_seats DESC
sqlx::query_as!( sqlx::query_as!(
Boat, Boat,
" "
SELECT id, name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, default_destination, skull, external SELECT id, name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, default_destination, skull, external, deleted
FROM boat FROM boat
WHERE owner = ? OR (owner is null and amount_seats = 1) WHERE owner = ? OR (owner is null and amount_seats = 1)
ORDER BY amount_seats DESC ORDER BY amount_seats DESC
@ -272,7 +276,7 @@ ORDER BY amount_seats DESC
.unwrap(); .unwrap();
let boats_in_ottensheim = sqlx::query_as!( let boats_in_ottensheim = sqlx::query_as!(
Boat, Boat,
"SELECT id, name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, default_destination, skull, external "SELECT id, name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, default_destination, skull, external, deleted
FROM boat FROM boat
WHERE owner is null and location_id = ? WHERE owner is null and location_id = ?
ORDER BY amount_seats DESC ORDER BY amount_seats DESC
@ -291,7 +295,7 @@ ORDER BY amount_seats DESC
let boats = sqlx::query_as!( let boats = sqlx::query_as!(
Boat, Boat,
" "
SELECT boat.id, boat.name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, default_destination, skull, external SELECT boat.id, boat.name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, default_destination, skull, external, deleted
FROM boat FROM boat
INNER JOIN location ON boat.location_id = location.id INNER JOIN location ON boat.location_id = location.id
WHERE location.name=? WHERE location.name=?
@ -354,7 +358,7 @@ ORDER BY amount_seats DESC
} }
pub async fn delete(&self, db: &SqlitePool) { pub async fn delete(&self, db: &SqlitePool) {
sqlx::query!("DELETE FROM boat WHERE id=?", self.id) sqlx::query!("UPDATE boat SET deleted=1 WHERE id=?", self.id)
.execute(db) .execute(db)
.await .await
.unwrap(); //Okay, because we can only create a Boat of a valid id .unwrap(); //Okay, because we can only create a Boat of a valid id

View File

@ -1,6 +1,7 @@
use crate::model::{ use crate::model::{
boat::{Boat, BoatToAdd, BoatToUpdate}, boat::{Boat, BoatToAdd, BoatToUpdate},
location::Location, location::Location,
log::Log,
user::{AdminUser, User, UserWithRoles}, user::{AdminUser, User, UserWithRoles},
}; };
use rocket::{ use rocket::{
@ -39,8 +40,10 @@ async fn index(
} }
#[get("/boat/<boat>/delete")] #[get("/boat/<boat>/delete")]
async fn delete(db: &State<SqlitePool>, _admin: AdminUser, boat: i32) -> Flash<Redirect> { async fn delete(db: &State<SqlitePool>, admin: AdminUser, boat: i32) -> Flash<Redirect> {
let boat = Boat::find_by_id(db, boat).await; let boat = Boat::find_by_id(db, boat).await;
Log::create(db, format!("{} deleted boat: {boat:?}", admin.user.name)).await;
match boat { match boat {
Some(boat) => { Some(boat) => {
boat.delete(db).await; boat.delete(db).await;

View File

@ -1,3 +1,4 @@
-- test user
INSERT INTO user(name) VALUES('Marie'); INSERT INTO user(name) VALUES('Marie');
INSERT INTO "user_role" (user_id, role_id) VALUES((SELECT id from user where name = 'Marie'),(SELECT id FROM role where name = 'Donau Linz')); INSERT INTO "user_role" (user_id, role_id) VALUES((SELECT id from user where name = 'Marie'),(SELECT id FROM role where name = 'Donau Linz'));
INSERT INTO user(name) VALUES('Philipp'); INSERT INTO user(name) VALUES('Philipp');