75 lines
2.3 KiB
TypeScript
75 lines
2.3 KiB
TypeScript
import { IGroceryList } from "../schemas";
|
|
import pool from "../db";
|
|
|
|
export class GroceryList {
|
|
async getAll() {
|
|
try {
|
|
const statement = 'SELECT * FROM recipin.grocerylist';
|
|
const result = await pool.query(statement);
|
|
if (result.rows.length) return result.rows;
|
|
return null;
|
|
} catch (e: any) {
|
|
throw new Error(e);
|
|
}
|
|
}
|
|
|
|
async getOne(id: string) {
|
|
try {
|
|
const statement = `SELECT * FROM recipin.grocerylist WHERE id = $1`
|
|
const result = await pool.query(statement, [id]);
|
|
if (result.rows.length) return result.rows[0];
|
|
return null;
|
|
} catch (e: any) {
|
|
throw new Error(e);
|
|
}
|
|
}
|
|
|
|
async getByUserID(userid: string) {
|
|
try {
|
|
const statement = `SELECT * FROM recipin.grocerylist WHERE ownerid = $1`
|
|
const result = await pool.query(statement, [userid]);
|
|
if (result.rows.length) return result.rows;
|
|
return null;
|
|
} catch (e: any) {
|
|
throw new Error(e);
|
|
}
|
|
}
|
|
|
|
async post(data: IGroceryList) {
|
|
try {
|
|
// assumes that any new list will be active on creation
|
|
const statement = `
|
|
INSERT INTO recipin.grocerylist
|
|
(name, active, ownerid)
|
|
VALUES ($1, true, $2)
|
|
RETURNING *;
|
|
`
|
|
const values = [data.name, data.ownerid];
|
|
const result = await pool.query(statement, values);
|
|
if (result.rows.length) return result.rows[0];
|
|
return null;
|
|
} catch (e: any) {
|
|
throw new Error(e);
|
|
}
|
|
}
|
|
|
|
async put(id: string, data: IGroceryList) {
|
|
try {
|
|
const statement = `
|
|
UPDATE recipin.grocerylist
|
|
SET name = $1,
|
|
active = $2,
|
|
ownerid = $3
|
|
WHERE id = $4
|
|
RETURNING *
|
|
`
|
|
const values = [data.name, data.active, data.ownerid, id];
|
|
|
|
const result = await pool.query(statement, values);
|
|
if (result.rows.length) return result.rows[0];
|
|
return null;
|
|
} catch (e: any) {
|
|
throw new Error(e);
|
|
}
|
|
}
|
|
} |