(change): framework for setting default pref
This commit is contained in:
@@ -5,3 +5,5 @@ user = tam3
|
|||||||
password = tam3
|
password = tam3
|
||||||
database = tam3
|
database = tam3
|
||||||
|
|
||||||
|
[tickets]
|
||||||
|
default_pref = TEXT
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from .template import Repo
|
from .template import Repo
|
||||||
|
from settings import read_config
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Ticket:
|
class Ticket:
|
||||||
@@ -8,7 +9,7 @@ class Ticket:
|
|||||||
first_name: str = ""
|
first_name: str = ""
|
||||||
last_name: str = ""
|
last_name: str = ""
|
||||||
phone_number: str = ""
|
phone_number: str = ""
|
||||||
preference: str = "CALL"
|
preference: str = read_config()["tickets"]["default_pref"] or "CALL"
|
||||||
changed: bool = False
|
changed: bool = False
|
||||||
|
|
||||||
class TicketRepo(Repo):
|
class TicketRepo(Repo):
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ def read_config():
|
|||||||
"password": os.getenv("TAM3_DB_PASSWD", "tam3"),
|
"password": os.getenv("TAM3_DB_PASSWD", "tam3"),
|
||||||
"database": os.getenv("TAM3_DB_DATABASE", "tam3"),
|
"database": os.getenv("TAM3_DB_DATABASE", "tam3"),
|
||||||
}
|
}
|
||||||
|
config["tickets"] = {
|
||||||
|
"default_pref": os.getenv("TAM3_DEFAULT_PREF", "CALL")
|
||||||
|
}
|
||||||
with open(config_path, "w") as f:
|
with open(config_path, "w") as f:
|
||||||
config.write(f)
|
config.write(f)
|
||||||
return config
|
return config
|
||||||
|
|||||||
@@ -2,18 +2,22 @@ import { env } from "$env/dynamic/private";
|
|||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
|
|
||||||
export function readSettings() {
|
export function readSettings() {
|
||||||
if (fs.existsSync(env.SETTINGS_PATH)) {
|
if (fs.existsSync(env.SETTINGS_PATH)) {
|
||||||
const rawFileData = fs.readFileSync(env.SETTINGS_PATH, 'utf-8');
|
const rawFileData = fs.readFileSync(env.SETTINGS_PATH, "utf-8");
|
||||||
const fileData = JSON.parse(rawFileData);
|
const fileData = JSON.parse(rawFileData);
|
||||||
return fileData;
|
return fileData;
|
||||||
} else {
|
} else {
|
||||||
const fileData = {TAM3_REMOTE: env.TAM3_REMOTE || "", TAM3_REMOTE_KEY: env.TAM3_REMOTE_KEY || ""};
|
const fileData = {
|
||||||
fs.writeFileSync(env.SETTINGS_PATH, JSON.stringify(fileData, null, 2));
|
TAM3_REMOTE: env.TAM3_REMOTE || "",
|
||||||
return fileData;
|
TAM3_REMOTE_KEY: env.TAM3_REMOTE_KEY || "",
|
||||||
}
|
TAM3_DEFAULT_PREF: env.TAM3_DEFAULT_PREF || "CALL",
|
||||||
|
};
|
||||||
|
fs.writeFileSync(env.SETTINGS_PATH, JSON.stringify(fileData, null, 2));
|
||||||
|
return fileData;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function writeSettings(settingsObj) {
|
export function writeSettings(settingsObj) {
|
||||||
fs.writeFileSync(env.SETTINGS_PATH, JSON.stringify(settingsObj, null, 2));
|
fs.writeFileSync(env.SETTINGS_PATH, JSON.stringify(settingsObj, null, 2));
|
||||||
return "File written successfully."
|
return "File written successfully.";
|
||||||
}
|
}
|
||||||
@@ -4,33 +4,51 @@ import { tickets } from "$lib/server/db/schema";
|
|||||||
import { eq, and } from "drizzle-orm";
|
import { eq, and } from "drizzle-orm";
|
||||||
|
|
||||||
export async function GET({ params }) {
|
export async function GET({ params }) {
|
||||||
const env = readSettings();
|
const env = readSettings();
|
||||||
let n_t_from = parseInt(params.t_from), n_t_to = parseInt(params.t_to);
|
let n_t_from = parseInt(params.t_from),
|
||||||
if (env.TAM3_REMOTE) {
|
n_t_to = parseInt(params.t_to);
|
||||||
const res = await fetch(`${env.TAM3_REMOTE}/api/tickets/${params.prefix}/${n_t_from}/${n_t_to}/?api_key=${env.TAM3_REMOTE_KEY}`);
|
if (env.TAM3_REMOTE) {
|
||||||
if (!res.ok) {
|
const res = await fetch(
|
||||||
return new Response(JSON.stringify({details: "Unable to fetch tickets."}), {status: res.status, statusText: res.statusText})
|
`${env.TAM3_REMOTE}/api/tickets/${params.prefix}/${n_t_from}/${n_t_to}/?api_key=${env.TAM3_REMOTE_KEY}`,
|
||||||
};
|
);
|
||||||
const data = await res.json();
|
if (!res.ok) {
|
||||||
return new Response(JSON.stringify(data), {
|
return new Response(
|
||||||
headers: {'Content-Type': 'application/json'},
|
JSON.stringify({ details: "Unable to fetch tickets." }),
|
||||||
status: 200,
|
{ status: res.status, statusText: res.statusText },
|
||||||
statusText: "Tickets fetched successfully."
|
);
|
||||||
})
|
|
||||||
} else {
|
|
||||||
let r_dict = {};
|
|
||||||
for (let i=n_t_from; i <= n_t_to; i++) {
|
|
||||||
let data = await db.select().from(tickets).where(and(eq(tickets.prefix, params.prefix), eq(tickets.t_id, i)));
|
|
||||||
if (data[0]) {
|
|
||||||
r_dict[i] = {...data[0], changed: false};
|
|
||||||
} else {
|
|
||||||
r_dict[i] = {prefix: params.prefix, t_id: i, first_name: "", last_name: "", phone_number: "", preference: "CALL", changed: false};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return new Response(JSON.stringify(Object.values(r_dict)), {
|
|
||||||
headers: {'Content-Type': 'application/json'},
|
|
||||||
status: 200,
|
|
||||||
statusText: "Tickets loaded successfully."
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
const data = await res.json();
|
||||||
|
return new Response(JSON.stringify(data), {
|
||||||
|
headers: { "Content-Type": "application/json" },
|
||||||
|
status: 200,
|
||||||
|
statusText: "Tickets fetched successfully.",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const ticket_pref = env.TAM3_DEFAULT_PREF || "CALL";
|
||||||
|
let r_dict = {};
|
||||||
|
for (let i = n_t_from; i <= n_t_to; i++) {
|
||||||
|
let data = await db
|
||||||
|
.select()
|
||||||
|
.from(tickets)
|
||||||
|
.where(and(eq(tickets.prefix, params.prefix), eq(tickets.t_id, i)));
|
||||||
|
if (data[0]) {
|
||||||
|
r_dict[i] = { ...data[0], changed: false };
|
||||||
|
} else {
|
||||||
|
r_dict[i] = {
|
||||||
|
prefix: params.prefix,
|
||||||
|
t_id: i,
|
||||||
|
first_name: "",
|
||||||
|
last_name: "",
|
||||||
|
phone_number: "",
|
||||||
|
preference: ticket_pref,
|
||||||
|
changed: false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new Response(JSON.stringify(Object.values(r_dict)), {
|
||||||
|
headers: { "Content-Type": "application/json" },
|
||||||
|
status: 200,
|
||||||
|
statusText: "Tickets loaded successfully.",
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -58,6 +58,24 @@
|
|||||||
|
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h2>Local Settings</h2>
|
||||||
|
<p>These settings will only apply if you're operating in local mode.</p>
|
||||||
|
<div>
|
||||||
|
<div>Default Ticket Contact Preference:</div>
|
||||||
|
<div>
|
||||||
|
<select bind:value={stagingSettings.TAM3_DEFAULT_PREF}>
|
||||||
|
<option value="CALL">CALL</option>
|
||||||
|
<option value="TEXT">TEXT</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
<div class="flex-row">
|
<div class="flex-row">
|
||||||
<button class="styled" onclick={saveChanges}>Save</button>
|
<button class="styled" onclick={saveChanges}>Save</button>
|
||||||
<button class="styled" onclick={cancelChanges}>Cancel</button>
|
<button class="styled" onclick={cancelChanges}>Cancel</button>
|
||||||
|
|||||||
Reference in New Issue
Block a user