Fix Incorrect Tasks Table Primary Key
This commit is contained in:
parent
a8f93606df
commit
6d72c7d38d
3 changed files with 26 additions and 2 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue