Merge pull request 'allow deletion of boat' (#399) from allow-boat-deletion into main
All checks were successful
CI/CD Pipeline / test (push) Successful in 12m50s
CI/CD Pipeline / deploy-staging (push) Has been skipped
CI/CD Pipeline / deploy-main (push) Successful in 5m30s

Reviewed-on: #399
This commit is contained in:
philipp 2024-04-17 14:07:55 +02:00
commit cf56e8f6fe
4 changed files with 18 additions and 9 deletions

View File

@ -101,7 +101,8 @@ CREATE TABLE IF NOT EXISTS "boat" (
"default_shipmaster_only_steering" boolean default false not null,
"default_destination" text,
"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" (

View File

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

View File

@ -1,6 +1,7 @@
use crate::model::{
boat::{Boat, BoatToAdd, BoatToUpdate},
location::Location,
log::Log,
user::{AdminUser, User, UserWithRoles},
};
use rocket::{
@ -39,8 +40,10 @@ async fn index(
}
#[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;
Log::create(db, format!("{} deleted boat: {boat:?}", admin.user.name)).await;
match boat {
Some(boat) => {
boat.delete(db).await;

View File

@ -1,3 +1,4 @@
-- test user
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(name) VALUES('Philipp');