Add getByTaskId() and getByDbId() methods.
`getByTaskId()` takes an array of strings. It is parsed into task prefix (e.g.
"TA") and task_id. The database is then queried on an array of task_ids.
The result is wrapped in an object with a status code. Currently, the
code is hardcoded as "ok", but can be fleshed out when additional
features are implemented.
There are a few features missing:
- Validation that each string is the right length
- Validation that syntactically valid prefixes and ids were passed
- A check that all requested records are returned
- A check that task prefixes actually exist in the config (requires
implementing the config module)
- Proper status codes
`getByDbId()` takes and array of id numbers. The database is then
queried with this array. The results are wrapped as above.
Missing features:
- A check that all requested records are returned
- Proper status codes
Both methods return `{status: "failed", error}` when the database
request throws an error.
This commit is contained in:
parent
136b58c44f
commit
0c002edefa
@ -1,5 +1,6 @@
|
|||||||
import { type DB, db } from "$lib/server/db/db";
|
import { type DB, db } from "$lib/server/db/db";
|
||||||
import logger from "../logger";
|
import logger from "../logger";
|
||||||
|
|
||||||
class TasksService {
|
class TasksService {
|
||||||
private db: DB;
|
private db: DB;
|
||||||
private caller: "internal" | "api";
|
private caller: "internal" | "api";
|
||||||
@ -24,6 +25,47 @@ class TasksService {
|
|||||||
return false as const;
|
return false as const;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async getByTaskId(taskIds: Array<string>) {
|
||||||
|
const mappedTasks = taskIds.map(x => {
|
||||||
|
const prefix = x.slice(0, 2);
|
||||||
|
const task_id = x.slice(2);
|
||||||
|
return { prefix, task_id };
|
||||||
|
});
|
||||||
|
logger.info(
|
||||||
|
`Fetching ${
|
||||||
|
taskIds.length === 0
|
||||||
|
? "0 records"
|
||||||
|
: taskIds.length < 10
|
||||||
|
? taskIds.join(", ")
|
||||||
|
: `${taskIds.length} records`
|
||||||
|
}.`,
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
const tasks = await db.query.tasks.findMany({
|
||||||
|
with: { type: true },
|
||||||
|
where: (tasks, { inArray }) => inArray(tasks.taskId, mappedTasks.map(x => x.task_id)),
|
||||||
|
});
|
||||||
|
return { tasks, status: "ok" };
|
||||||
|
} catch (error) {
|
||||||
|
logger.error({ msg: "Error querying the database.", error });
|
||||||
|
return { status: "failed", error };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getByDbId(ids: Array<number>) {
|
||||||
|
logger.info(`Fetching ${ids.length} records.`);
|
||||||
|
try {
|
||||||
|
const tasks = await db.query.tasks.findMany({
|
||||||
|
with: { type: true },
|
||||||
|
where: (tasks, { inArray }) => inArray(tasks.id, ids),
|
||||||
|
});
|
||||||
|
return { tasks, status: "ok" };
|
||||||
|
} catch (error) {
|
||||||
|
logger.error({ msg: "Error querying the database.", error });
|
||||||
|
return { status: "failed", error };
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default TasksService;
|
export default TasksService;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user