2022-10-05 10:38:52 +00:00
|
|
|
import CountMany from './count-many';
|
2022-09-04 04:56:46 +00:00
|
|
|
import {db} from './db';
|
|
|
|
import Set from './set';
|
|
|
|
|
2022-09-16 09:07:02 +00:00
|
|
|
export const updateSet = async (value: Set) => {
|
2022-09-04 04:56:46 +00:00
|
|
|
const update = `
|
|
|
|
UPDATE sets
|
2022-10-01 02:35:52 +00:00
|
|
|
SET name = ?, reps = ?, weight = ?, unit = ?, image = ?
|
2022-09-04 04:56:46 +00:00
|
|
|
WHERE id = ?
|
|
|
|
`;
|
|
|
|
return db.executeSql(update, [
|
|
|
|
value.name,
|
|
|
|
value.reps,
|
|
|
|
value.weight,
|
|
|
|
value.unit,
|
2022-10-01 02:35:52 +00:00
|
|
|
value.image,
|
2022-09-04 04:56:46 +00:00
|
|
|
value.id,
|
|
|
|
]);
|
|
|
|
};
|
|
|
|
|
2022-09-23 01:52:33 +00:00
|
|
|
export const addSets = async (columns: string, values: string) => {
|
|
|
|
console.log({columns, values});
|
2022-09-04 04:56:46 +00:00
|
|
|
const insert = `
|
2022-09-23 01:52:33 +00:00
|
|
|
INSERT INTO sets(${columns})
|
2022-09-04 04:56:46 +00:00
|
|
|
VALUES ${values}
|
|
|
|
`;
|
|
|
|
return db.executeSql(insert);
|
|
|
|
};
|
|
|
|
|
|
|
|
export const addSet = async (value: Set) => {
|
2022-09-20 23:50:20 +00:00
|
|
|
const keys = Object.keys(value) as (keyof Set)[];
|
|
|
|
const questions = keys.map(() => '?').join(',');
|
2022-09-04 04:56:46 +00:00
|
|
|
const insert = `
|
2022-09-20 23:50:20 +00:00
|
|
|
INSERT INTO sets(${keys.join(',')},created)
|
|
|
|
VALUES (${questions},strftime('%Y-%m-%dT%H:%M:%S','now','localtime'))
|
2022-09-04 04:56:46 +00:00
|
|
|
`;
|
2022-09-20 23:50:20 +00:00
|
|
|
const values = keys.map(key => value[key]);
|
|
|
|
return db.executeSql(insert, values);
|
2022-09-04 04:56:46 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export const deleteSets = async () => {
|
|
|
|
return db.executeSql(`DELETE FROM sets`);
|
|
|
|
};
|
|
|
|
|
|
|
|
export const deleteSet = async (id: number) => {
|
|
|
|
return db.executeSql(`DELETE FROM sets WHERE id = ?`, [id]);
|
|
|
|
};
|
|
|
|
|
|
|
|
export const deleteSetsBy = async (name: string) => {
|
|
|
|
return db.executeSql(`DELETE FROM sets WHERE name = ?`, [name]);
|
|
|
|
};
|
|
|
|
|
|
|
|
export const getAllSets = async (): Promise<Set[]> => {
|
|
|
|
const select = `SELECT * from sets`;
|
|
|
|
const [result] = await db.executeSql(select);
|
|
|
|
return result.rows.raw();
|
|
|
|
};
|
|
|
|
|
2022-09-23 01:52:33 +00:00
|
|
|
interface PageParams {
|
2022-09-04 04:56:46 +00:00
|
|
|
search: string;
|
|
|
|
limit: number;
|
|
|
|
offset: number;
|
2022-10-02 06:07:52 +00:00
|
|
|
format?: string;
|
2022-09-04 04:56:46 +00:00
|
|
|
}
|
|
|
|
|
2022-10-21 05:39:06 +00:00
|
|
|
export const getSet = async (name: string): Promise<Set> => {
|
|
|
|
const select = `
|
|
|
|
SELECT *
|
|
|
|
FROM sets
|
|
|
|
WHERE name = ?
|
|
|
|
LIMIT 1
|
|
|
|
`;
|
|
|
|
const [result] = await db.executeSql(select, [name]);
|
|
|
|
return result.rows.item(0);
|
|
|
|
};
|
|
|
|
|
2022-09-04 04:56:46 +00:00
|
|
|
export const getSets = async ({
|
|
|
|
search,
|
|
|
|
limit,
|
|
|
|
offset,
|
2022-10-02 06:07:52 +00:00
|
|
|
format,
|
2022-09-04 04:56:46 +00:00
|
|
|
}: PageParams): Promise<Set[]> => {
|
|
|
|
const select = `
|
2022-10-02 05:04:36 +00:00
|
|
|
SELECT id, name, reps, weight, sets, minutes, seconds,
|
|
|
|
STRFTIME(?, created) as created, unit, image, steps
|
|
|
|
FROM sets
|
2022-09-04 04:56:46 +00:00
|
|
|
WHERE name LIKE ? AND NOT hidden
|
2022-10-02 06:07:52 +00:00
|
|
|
ORDER BY STRFTIME('%Y-%m-%d %H:%M', created) DESC
|
2022-09-04 04:56:46 +00:00
|
|
|
LIMIT ? OFFSET ?
|
|
|
|
`;
|
2022-10-02 05:04:36 +00:00
|
|
|
const [result] = await db.executeSql(select, [
|
|
|
|
format,
|
|
|
|
`%${search}%`,
|
|
|
|
limit,
|
|
|
|
offset,
|
|
|
|
]);
|
2022-09-04 04:56:46 +00:00
|
|
|
return result.rows.raw();
|
|
|
|
};
|
|
|
|
|
2022-09-22 02:32:37 +00:00
|
|
|
export const defaultSet: Set = {
|
2022-09-04 04:56:46 +00:00
|
|
|
name: '',
|
|
|
|
reps: 10,
|
|
|
|
weight: 20,
|
|
|
|
unit: 'kg',
|
|
|
|
};
|
|
|
|
|
2022-09-20 23:50:20 +00:00
|
|
|
export const updateManySet = async ({
|
|
|
|
oldName,
|
|
|
|
newName,
|
|
|
|
minutes,
|
|
|
|
seconds,
|
|
|
|
sets,
|
2022-09-23 01:52:33 +00:00
|
|
|
steps,
|
2022-09-20 23:50:20 +00:00
|
|
|
}: {
|
|
|
|
oldName: string;
|
|
|
|
newName: string;
|
|
|
|
minutes: string;
|
|
|
|
seconds: string;
|
|
|
|
sets: string;
|
2022-09-24 02:48:52 +00:00
|
|
|
steps?: string;
|
2022-09-20 23:50:20 +00:00
|
|
|
}) => {
|
|
|
|
const update = `
|
2022-09-23 01:52:33 +00:00
|
|
|
UPDATE sets SET name = ?, minutes = ?, seconds = ?, sets = ?, steps = ?
|
2022-09-20 23:50:20 +00:00
|
|
|
WHERE name = ?
|
|
|
|
`;
|
2022-09-23 01:52:33 +00:00
|
|
|
return db.executeSql(update, [
|
|
|
|
newName,
|
|
|
|
minutes,
|
|
|
|
seconds,
|
|
|
|
sets,
|
|
|
|
steps,
|
|
|
|
oldName,
|
|
|
|
]);
|
2022-09-04 04:56:46 +00:00
|
|
|
};
|
|
|
|
|
2022-09-16 09:07:02 +00:00
|
|
|
export const updateSetImage = async (name: string, image: string) => {
|
2022-09-04 04:56:46 +00:00
|
|
|
const update = `UPDATE sets SET image = ? WHERE name = ?`;
|
2022-09-10 07:02:16 +00:00
|
|
|
return db.executeSql(update, [image, name]);
|
2022-09-04 04:56:46 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export const getNames = async (): Promise<string[]> => {
|
|
|
|
const [result] = await db.executeSql('SELECT DISTINCT name FROM sets');
|
2022-09-04 05:33:05 +00:00
|
|
|
const values: {name: string}[] = result.rows.raw();
|
|
|
|
return values.map(value => value.name);
|
2022-09-04 04:56:46 +00:00
|
|
|
};
|
|
|
|
|
2022-09-25 05:05:15 +00:00
|
|
|
export const getToday = async (): Promise<Set | undefined> => {
|
|
|
|
const select = `
|
2022-09-30 00:00:12 +00:00
|
|
|
SELECT name, reps, weight, sets, minutes, seconds, unit, image FROM sets
|
2022-09-25 05:05:15 +00:00
|
|
|
WHERE NOT hidden
|
|
|
|
AND created LIKE strftime('%Y-%m-%d%%', 'now', 'localtime')
|
|
|
|
ORDER BY created DESC
|
|
|
|
LIMIT 1
|
|
|
|
`;
|
|
|
|
const [result] = await db.executeSql(select);
|
|
|
|
return result.rows.item(0);
|
|
|
|
};
|
|
|
|
|
|
|
|
export const countToday = async (name: string): Promise<number> => {
|
|
|
|
const select = `
|
|
|
|
SELECT COUNT(*) as total FROM sets
|
|
|
|
WHERE created LIKE strftime('%Y-%m-%d%%', 'now', 'localtime')
|
2022-09-30 00:00:12 +00:00
|
|
|
AND name = ? AND NOT hidden
|
2022-09-25 05:05:15 +00:00
|
|
|
`;
|
|
|
|
const [result] = await db.executeSql(select, [name]);
|
|
|
|
return Number(result.rows.item(0)?.total);
|
|
|
|
};
|
|
|
|
|
2022-10-05 10:38:52 +00:00
|
|
|
export const countManyToday = async (): Promise<CountMany[]> => {
|
|
|
|
const select = `
|
2022-10-16 03:46:38 +00:00
|
|
|
SELECT COUNT(*) as total, name FROM sets
|
2022-10-05 10:38:52 +00:00
|
|
|
WHERE created LIKE strftime('%Y-%m-%d%%', 'now', 'localtime')
|
|
|
|
AND NOT hidden
|
|
|
|
GROUP BY name
|
|
|
|
`;
|
|
|
|
const [result] = await db.executeSql(select);
|
|
|
|
return result.rows.raw();
|
|
|
|
};
|
|
|
|
|
2022-09-18 06:08:09 +00:00
|
|
|
export const getDistinctSets = async ({
|
2022-09-04 04:56:46 +00:00
|
|
|
search,
|
|
|
|
limit,
|
|
|
|
offset,
|
2022-09-24 02:48:52 +00:00
|
|
|
}: PageParams): Promise<Set[]> => {
|
2022-09-04 04:56:46 +00:00
|
|
|
const select = `
|
2022-09-24 02:48:52 +00:00
|
|
|
SELECT name, image, sets, minutes, seconds, steps
|
2022-09-04 04:56:46 +00:00
|
|
|
FROM sets
|
|
|
|
WHERE sets.name LIKE ?
|
2022-09-20 23:50:20 +00:00
|
|
|
GROUP BY sets.name
|
2022-09-04 04:56:46 +00:00
|
|
|
ORDER BY sets.name
|
|
|
|
LIMIT ? OFFSET ?
|
|
|
|
`;
|
|
|
|
const [result] = await db.executeSql(select, [search, limit, offset]);
|
|
|
|
return result.rows.raw();
|
|
|
|
};
|