From 2a4ea9f7779e9d1e90c1c3a575593b843824eca0 Mon Sep 17 00:00:00 2001 From: Dilan Gilluly Date: Sun, 15 Feb 2026 17:02:31 -0500 Subject: [PATCH] (change): framework for setting default pref --- api/data/config.ini | 2 + api/repos/tickets.py | 5 +- api/settings.py | 3 + webapp/src/lib/server/settings.js | 28 ++++--- .../[prefix]/[t_from]/[t_to]/+server.js | 76 ++++++++++++------- webapp/src/routes/settings/+page.svelte | 18 +++++ 6 files changed, 89 insertions(+), 43 deletions(-) diff --git a/api/data/config.ini b/api/data/config.ini index f726a5c..7086d3d 100644 --- a/api/data/config.ini +++ b/api/data/config.ini @@ -5,3 +5,5 @@ user = tam3 password = tam3 database = tam3 +[tickets] +default_pref = TEXT diff --git a/api/repos/tickets.py b/api/repos/tickets.py index 6ae9825..919e35b 100644 --- a/api/repos/tickets.py +++ b/api/repos/tickets.py @@ -1,5 +1,6 @@ from dataclasses import dataclass from .template import Repo +from settings import read_config @dataclass class Ticket: @@ -8,7 +9,7 @@ class Ticket: first_name: str = "" last_name: str = "" phone_number: str = "" - preference: str = "CALL" + preference: str = read_config()["tickets"]["default_pref"] or "CALL" changed: bool = False class TicketRepo(Repo): @@ -37,4 +38,4 @@ class TicketRepo(Repo): for t in tickets: self.cur.execute("REPLACE INTO tickets VALUES (%s, %s, %s, %s, %s, %s)", (t.prefix, t.t_id, t.first_name, t.last_name, t.phone_number, t.preference)) self.conn.commit() - return {"detail": "Tickets posted successfully."} \ No newline at end of file + return {"detail": "Tickets posted successfully."} diff --git a/api/settings.py b/api/settings.py index a8d7055..b0d5c8b 100644 --- a/api/settings.py +++ b/api/settings.py @@ -20,6 +20,9 @@ def read_config(): "password": os.getenv("TAM3_DB_PASSWD", "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: config.write(f) return config diff --git a/webapp/src/lib/server/settings.js b/webapp/src/lib/server/settings.js index a98a411..ce69b8d 100644 --- a/webapp/src/lib/server/settings.js +++ b/webapp/src/lib/server/settings.js @@ -2,18 +2,22 @@ import { env } from "$env/dynamic/private"; import fs from "fs"; export function readSettings() { - if (fs.existsSync(env.SETTINGS_PATH)) { - const rawFileData = fs.readFileSync(env.SETTINGS_PATH, 'utf-8'); - const fileData = JSON.parse(rawFileData); - return fileData; - } else { - const fileData = {TAM3_REMOTE: env.TAM3_REMOTE || "", TAM3_REMOTE_KEY: env.TAM3_REMOTE_KEY || ""}; - fs.writeFileSync(env.SETTINGS_PATH, JSON.stringify(fileData, null, 2)); - return fileData; - } + if (fs.existsSync(env.SETTINGS_PATH)) { + const rawFileData = fs.readFileSync(env.SETTINGS_PATH, "utf-8"); + const fileData = JSON.parse(rawFileData); + return fileData; + } else { + const fileData = { + TAM3_REMOTE: env.TAM3_REMOTE || "", + 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) { - fs.writeFileSync(env.SETTINGS_PATH, JSON.stringify(settingsObj, null, 2)); - return "File written successfully." -} \ No newline at end of file + fs.writeFileSync(env.SETTINGS_PATH, JSON.stringify(settingsObj, null, 2)); + return "File written successfully."; +} diff --git a/webapp/src/routes/api/tickets/[prefix]/[t_from]/[t_to]/+server.js b/webapp/src/routes/api/tickets/[prefix]/[t_from]/[t_to]/+server.js index 6f27379..da58bca 100644 --- a/webapp/src/routes/api/tickets/[prefix]/[t_from]/[t_to]/+server.js +++ b/webapp/src/routes/api/tickets/[prefix]/[t_from]/[t_to]/+server.js @@ -4,33 +4,51 @@ import { tickets } from "$lib/server/db/schema"; import { eq, and } from "drizzle-orm"; export async function GET({ params }) { - const env = readSettings(); - let n_t_from = parseInt(params.t_from), n_t_to = parseInt(params.t_to); - if (env.TAM3_REMOTE) { - const res = await fetch(`${env.TAM3_REMOTE}/api/tickets/${params.prefix}/${n_t_from}/${n_t_to}/?api_key=${env.TAM3_REMOTE_KEY}`); - if (!res.ok) { - return new Response(JSON.stringify({details: "Unable to fetch tickets."}), {status: res.status, statusText: res.statusText}) - }; - const data = await res.json(); - return new Response(JSON.stringify(data), { - headers: {'Content-Type': 'application/json'}, - status: 200, - 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 env = readSettings(); + let n_t_from = parseInt(params.t_from), + n_t_to = parseInt(params.t_to); + if (env.TAM3_REMOTE) { + const res = await fetch( + `${env.TAM3_REMOTE}/api/tickets/${params.prefix}/${n_t_from}/${n_t_to}/?api_key=${env.TAM3_REMOTE_KEY}`, + ); + if (!res.ok) { + return new Response( + JSON.stringify({ details: "Unable to fetch tickets." }), + { status: res.status, statusText: res.statusText }, + ); } -} \ No newline at end of file + 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.", + }); + } +} diff --git a/webapp/src/routes/settings/+page.svelte b/webapp/src/routes/settings/+page.svelte index bec1f86..47ca1f9 100644 --- a/webapp/src/routes/settings/+page.svelte +++ b/webapp/src/routes/settings/+page.svelte @@ -58,6 +58,24 @@
+
+ +
+

Local Settings

+

These settings will only apply if you're operating in local mode.

+
+
Default Ticket Contact Preference:
+
+ +
+
+
+ +
+