From 633965afaab042ceb49ae52b0ccd7cec3430c756 Mon Sep 17 00:00:00 2001 From: Lizzy Hunt Date: Fri, 24 Mar 2023 16:34:55 -0600 Subject: [PATCH] Add past week action --- src/actions.js | 1 + src/aggietime.js | 29 +++++++++++++++++++++++++++++ src/constants.js | 3 +++ 3 files changed, 33 insertions(+) diff --git a/src/actions.js b/src/actions.js index af22c3a..c1e8d23 100644 --- a/src/actions.js +++ b/src/actions.js @@ -6,6 +6,7 @@ const ACTIONS = { "current-shift": aggietime.current_shift, "current-user": aggietime.get_user_info, "status-line": aggietime.get_status_line, + "past-week": aggietime.last_week, }; export const do_action = async (body) => { diff --git a/src/aggietime.js b/src/aggietime.js index 413188a..5c0ff72 100644 --- a/src/aggietime.js +++ b/src/aggietime.js @@ -5,8 +5,10 @@ import { USER_CACHE_EXP_SEC, CLOCKIN_PATH, CLOCKOUT_PATH, + SUMMARY_PATH, OPEN_SHIFT_PATH, OPEN_SHIFT_EXP_SEC, + PAST_WEEK_EXP_SEC, } from "./constants.js"; import { with_exponential_retry } from "./exponential_retry.js"; @@ -119,3 +121,30 @@ export const get_status_line = async () => { } return { status: expireCache.get("status_line") }; }; + +export const last_week = async ({ position_id }) => { + position_id = await get_user_position_or_specified(position_id); + const [start, end] = [ + ((d) => { + const day = d.getDay(); + const diff = d.getDate() - day + (day == 0 ? -6 : 1); + return new Date(d.setDate(diff)); + })(new Date()), + new Date(), + ].map((d) => d.toISOString().split("T")[0]); + + if (!expireCache.get("past_week")) { + const { anumber } = await get_user_info(); + + const hours = await aggietime + .get(replace_path_args(SUMMARY_PATH, { position_id, start, end })) + .then(({ data: { undisputed_hours } }) => undisputed_hours); + + expireCache.set( + "past_week", + `${anumber} - ${hours} hours`, + PAST_WEEK_EXP_SEC + ); + } + return { status: expireCache.get("past_week") }; +}; diff --git a/src/constants.js b/src/constants.js index 7ae26c0..8d5b6b6 100644 --- a/src/constants.js +++ b/src/constants.js @@ -11,8 +11,11 @@ export const LOGIN_PATH = "api/v1/auth/login"; export const CLOCKIN_PATH = "api/v1/positions/:position_id/clock_in"; export const CLOCKOUT_PATH = "api/v1/positions/:position_id/clock_out"; export const USER_PATH = "api/v1/auth/get_user_info"; +export const SUMMARY_PATH = + "api/v1/positions/:position_id/summary?start=:start&end=:end"; export const OPEN_SHIFT_PATH = "api/v1/users/:anumber/open_shift"; export const OPEN_SHIFT_EXP_SEC = 60; +export const PAST_WEEK_EXP_SEC = 180; export const USER_CACHE_EXP_SEC = 30;