Fix Incorrect Tasks Table Primary Key

This commit is contained in:
BloxerHD 2026-02-25 11:43:55 +00:00
commit 6d72c7d38d
3 changed files with 26 additions and 2 deletions

View file

@ -3,8 +3,11 @@ CREATE TABLE files (
data BYTEA NOT NULL data BYTEA NOT NULL
); );
CREATE SEQUENCE tasks_data_id_seq START WITH 1 INCREMENT BY 1;
CREATE TABLE tasks ( CREATE TABLE tasks (
id TEXT PRIMARY KEY, data_id BIGINT PRIMARY KEY DEFAULT nextval('tasks_data_id_seq'),
id TEXT NOT NULL,
in_game_id TEXT NOT NULL, in_game_id TEXT NOT NULL,
boss_app_id TEXT NOT NULL, boss_app_id TEXT NOT NULL,
creator_user TEXT NOT NULL, creator_user TEXT NOT NULL,

View file

@ -3,6 +3,7 @@ use rocket::{State, http::Status};
use rocket::serde::json::Json; use rocket::serde::json::Json;
use crate::Pool; use crate::Pool;
use crate::admin_auth::AdminAuth; use crate::admin_auth::AdminAuth;
use crate::models::task::Task;
use crate::models::task::is_valid_task_status; use crate::models::task::is_valid_task_status;
#[derive(Deserialize)] #[derive(Deserialize)]
@ -21,17 +22,36 @@ pub async fn add_task(pool: &State<Pool>, input: Json<AddTaskData>, auth: AdminA
let data = input.into_inner(); let data = input.into_inner();
let admin_username = auth.0; let admin_username = auth.0;
let task_id_end = data.task_id
.char_indices()
.nth(7)
.map(|(i, _)| i)
.unwrap_or_else(|| data.task_id.len());
if data.boss_app_id.len() != 16 { return Err(Status::BadRequest) }; if data.boss_app_id.len() != 16 { return Err(Status::BadRequest) };
if !is_valid_task_status(&data.status) { return Err(Status::BadRequest) }; if !is_valid_task_status(&data.status) { return Err(Status::BadRequest) };
let does_exist = sqlx::query_as!(
Task,
"SELECT * FROM tasks WHERE id = $1 AND boss_app_id = $2",
data.task_id[..task_id_end].to_string(), data.boss_app_id.to_string()
)
.fetch_one(pool)
.await;
match does_exist {
Ok(_) => return Err(Status::Conflict),
Err(_) => (),
};
sqlx::query!( sqlx::query!(
r#" r#"
INSERT INTO tasks INSERT INTO tasks
(id, in_game_id, boss_app_id, creator_user, status, interval, title_id, description, created, updated) (id, in_game_id, boss_app_id, creator_user, status, interval, title_id, description, created, updated)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, NOW() AT TIME ZONE 'UTC', NOW() AT TIME ZONE 'UTC') VALUES ($1, $2, $3, $4, $5, $6, $7, $8, NOW() AT TIME ZONE 'UTC', NOW() AT TIME ZONE 'UTC')
"#, "#,
data.task_id[0..7].to_string(), data.task_id[..task_id_end].to_string(),
data.task_id, data.task_id,
data.boss_app_id, data.boss_app_id,
admin_username, admin_username,

View file

@ -14,6 +14,7 @@ pub fn is_valid_task_status(status: &str) -> bool {
#[derive(Clone)] #[derive(Clone)]
pub struct Task { pub struct Task {
pub deleted: bool, pub deleted: bool,
pub data_id: i64,
pub id: String, pub id: String,
pub in_game_id: String, pub in_game_id: String,
pub boss_app_id: String, pub boss_app_id: String,