2022-10-31 00:20:36 +00:00
|
|
|
import {db, setRepo} from './db';
|
|
|
|
import GymSet from './gym-set';
|
2022-09-04 04:56:46 +00:00
|
|
|
import {Periods} from './periods';
|
|
|
|
|
2022-10-16 00:39:59 +00:00
|
|
|
export const getOneRepMax = async ({
|
|
|
|
name,
|
|
|
|
period,
|
|
|
|
}: {
|
|
|
|
name: string;
|
|
|
|
period: Periods;
|
|
|
|
}) => {
|
|
|
|
// Brzycki formula https://en.wikipedia.org/wiki/One-repetition_maximum#Brzycki
|
|
|
|
const select = `
|
|
|
|
SELECT max(weight / (1.0278 - 0.0278 * reps)) AS weight,
|
|
|
|
STRFTIME('%Y-%m-%d', created) as created, unit
|
|
|
|
FROM sets
|
|
|
|
WHERE name = ? AND NOT hidden
|
|
|
|
AND DATE(created) >= DATE('now', 'weekday 0', ?)
|
|
|
|
GROUP BY name, STRFTIME(?, created)
|
|
|
|
`;
|
|
|
|
let difference = '-7 days';
|
|
|
|
if (period === Periods.Monthly) difference = '-1 months';
|
|
|
|
else if (period === Periods.Yearly) difference = '-1 years';
|
|
|
|
let group = '%Y-%m-%d';
|
|
|
|
if (period === Periods.Yearly) group = '%Y-%m';
|
|
|
|
const [result] = await db.executeSql(select, [name, difference, group]);
|
|
|
|
return result.rows.raw();
|
|
|
|
};
|
|
|
|
|
2022-10-31 00:20:36 +00:00
|
|
|
export const getBestSet = async (name: string): Promise<GymSet> => {
|
|
|
|
return setRepo
|
|
|
|
.createQueryBuilder()
|
|
|
|
.select()
|
|
|
|
.addSelect('MAX(weight)', 'weight')
|
|
|
|
.where('name = :name', {name})
|
|
|
|
.groupBy('name')
|
|
|
|
.addGroupBy('reps')
|
|
|
|
.orderBy('weight', 'DESC')
|
|
|
|
.addOrderBy('reps', 'DESC')
|
|
|
|
.getOne();
|
2022-09-04 04:56:46 +00:00
|
|
|
};
|