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
|
||||
);
|
||||
|
||||
CREATE SEQUENCE tasks_data_id_seq START WITH 1 INCREMENT BY 1;
|
||||
|
||||
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,
|
||||
boss_app_id TEXT NOT NULL,
|
||||
creator_user TEXT NOT NULL,
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ use rocket::{State, http::Status};
|
|||
use rocket::serde::json::Json;
|
||||
use crate::Pool;
|
||||
use crate::admin_auth::AdminAuth;
|
||||
use crate::models::task::Task;
|
||||
use crate::models::task::is_valid_task_status;
|
||||
|
||||
#[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 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 !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!(
|
||||
r#"
|
||||
INSERT INTO tasks
|
||||
(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')
|
||||
"#,
|
||||
data.task_id[0..7].to_string(),
|
||||
data.task_id[..task_id_end].to_string(),
|
||||
data.task_id,
|
||||
data.boss_app_id,
|
||||
admin_username,
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ pub fn is_valid_task_status(status: &str) -> bool {
|
|||
#[derive(Clone)]
|
||||
pub struct Task {
|
||||
pub deleted: bool,
|
||||
pub data_id: i64,
|
||||
pub id: String,
|
||||
pub in_game_id: String,
|
||||
pub boss_app_id: String,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue