diff --git a/migrations/20241229232706_no_level_id_ref.down.sql b/migrations/20241229232706_no_level_id_ref.down.sql new file mode 100644 index 000000000..833939ecf --- /dev/null +++ b/migrations/20241229232706_no_level_id_ref.down.sql @@ -0,0 +1,10 @@ +UPDATE demons +SET level_id = NULL +WHERE level_id IS NOT NULL + AND level_id NOT IN ( + SELECT level_id + FROM gj_level + ); +-- if a demon was added when the constraint was dropped but had an invalid level_id (didn't appear in gj_level), it will be set to null +ALTER TABLE demons +ADD CONSTRAINT demons_level_id_fkey FOREIGN KEY (level_id) REFERENCES gj_level(level_id); \ No newline at end of file diff --git a/migrations/20241229232706_no_level_id_ref.up.sql b/migrations/20241229232706_no_level_id_ref.up.sql new file mode 100644 index 000000000..b7cb8a228 --- /dev/null +++ b/migrations/20241229232706_no_level_id_ref.up.sql @@ -0,0 +1 @@ +ALTER TABLE demons DROP CONSTRAINT IF EXISTS demons_level_id_fkey; \ No newline at end of file diff --git a/pointercrate-demonlist-pages/src/account/demons.rs b/pointercrate-demonlist-pages/src/account/demons.rs index a5f0ca422..0791191cf 100644 --- a/pointercrate-demonlist-pages/src/account/demons.rs +++ b/pointercrate-demonlist-pages/src/account/demons.rs @@ -346,7 +346,7 @@ fn demon_submitter() -> Markup { label for = "level_id" { "Geometry Dash Level ID:" } - input type = "number" name = "level_id" required min = "1"; + input type = "number" name = "level_id" min = "1"; p.error {} } span.form-input.flex.col #demon-add-position { diff --git a/pointercrate-demonlist-pages/static/js/account/demon.js b/pointercrate-demonlist-pages/static/js/account/demon.js index 4323f3392..1325f4cf4 100644 --- a/pointercrate-demonlist-pages/static/js/account/demon.js +++ b/pointercrate-demonlist-pages/static/js/account/demon.js @@ -256,7 +256,6 @@ function setupDemonAdditionForm() { form.addValidators({ "demon-add-name": { "Please specify a name": valueMissing }, "demon-add-level-id": { - "Please specify a Geometry Dash level ID": valueMissing, "Level ID must be positive": rangeUnderflow, }, "demon-add-position": { diff --git a/pointercrate-test/tests/demonlist/demon.rs b/pointercrate-test/tests/demonlist/demon.rs index 10d68a776..febccedd9 100644 --- a/pointercrate-test/tests/demonlist/demon.rs +++ b/pointercrate-test/tests/demonlist/demon.rs @@ -14,7 +14,7 @@ async fn test_add_demon_ratelimits(pool: Pool) { let user = pointercrate_test::user::system_user_with_perms(LIST_MODERATOR, &mut *connection).await; - let demon = serde_json::json! {{"name": "Bloodbath", "requirement": 90, "position": 1, "verifier": "Riot", "publisher": "Riot", "creators": []}}; + let demon = serde_json::json! {{"name": "Bloodbath", "requirement": 90, "position": 1, "verifier": "Riot", "publisher": "Riot", "creators": [], "level_id": 10565740}}; // first one should succeed clnt.post("/api/v2/demons/", &demon)