Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions prisma/migrations/20240809171401_timestamps/migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Session" ADD COLUMN "resumedOrPausedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
4 changes: 3 additions & 1 deletion prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ model Session {
time Int
elapsed Int
elapsedSincePause Int
// this timestamp is from when the session was last resumed or paused
resumedOrPausedAt DateTime @default(now())

completed Boolean
cancelled Boolean
Expand Down Expand Up @@ -130,4 +132,4 @@ model Scrapbook {
createdAt DateTime @default(now())

sessions Session[]
}
}
93 changes: 17 additions & 76 deletions src/clock.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { prisma } from "./lib/prisma.js";
import { getElapsed, getElapsedSincePaused, prisma } from "./lib/prisma.js";
import { emitter } from "./lib/emitter.js";
import { Constants } from "./lib/constants.js";
import { Session } from "./lib/corelib.js";

emitter.on('minute', async () => {
try {
Expand All @@ -25,87 +26,27 @@ emitter.on('minute', async () => {
let updatedSession = session;

if (session.paused) {
updatedSession = await prisma.session.update({
where: {
id: session.id
},
data: {
elapsedSincePause: {
increment: 1
}
}
});

if (updatedSession.elapsedSincePause > Constants.AUTO_CANCEL) {
updatedSession = await prisma.session.update({
where: {
id: session.id
},
data: {
paused: false,
cancelled: true,
}
});

emitter.emit('cancel', updatedSession);
// in minutes
let elapsedSincePause = getElapsedSincePaused(session);

if (elapsedSincePause > Constants.AUTO_CANCEL) {
await Session.cancel(session);
} else {
if (updateWithRatelimit) {
if (updatedSession.elapsedSincePause % 5 === 0) {
emitter.emit('sessionUpdate', { updatedSession, updateSlack: true });
} else {
emitter.emit('sessionUpdate', { updatedSession, updateSlack: false });
}
} else {
emitter.emit('sessionUpdate', { updatedSession, updateSlack: true });
}
const updateSlack = !updateWithRatelimit || elapsedSincePause % 5 === 0;
emitter.emit('sessionUpdate', { updatedSession, updateSlack });
}

continue;
} else {
updatedSession = await prisma.session.update({
where: {
id: session.id
},
data: {
elapsed: {
increment: 1
}
}
});
}

await prisma.user.update({
where: {
id: session.userId
},
data: {
lifetimeMinutes: {
increment: 1
},
}
});

if (updatedSession.elapsed >= updatedSession.time) { // TODO: Commit hours to goal, verify hours with events
updatedSession = await prisma.session.update({
where: {
id: session.id
},
data: {
completed: true
}
});

emitter.emit('complete', updatedSession);
let elapsed = getElapsed(session);


if (elapsed >= updatedSession.time) { // TODO: Commit hours to goal, verify hours with events
await Session.complete(updatedSession);
} else {
if (updateWithRatelimit) {
if (updatedSession.elapsed % 5 === 0) {
emitter.emit('sessionUpdate', { updatedSession, updateSlack: true });
} else {
emitter.emit('sessionUpdate', { updatedSession, updateSlack: false });
}
} else {
emitter.emit('sessionUpdate', { updatedSession, updateSlack: true });
}
const updateSlack = !updateWithRatelimit || elapsed % 5 === 0;
emitter.emit('sessionUpdate', { updatedSession, updateSlack });
}
}
} catch (error) {
Expand Down Expand Up @@ -141,4 +82,4 @@ emitter.on('error', async (errorRef) => {

emitter.on('init', async () => {
console.log('[Clock] 🕒 Core Subroutine Initialized!');
});
});
26 changes: 12 additions & 14 deletions src/extensions/api/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { prisma, uid } from "../../lib/prisma.js";
import { getElapsed, prisma, uid } from "../../lib/prisma.js";
import { Slack, app, express } from "../../lib/bolt.js";
import { AirtableAPI } from "../../lib/airtable.js";

Expand Down Expand Up @@ -72,7 +72,7 @@ declare global {
// createdAt: session.createdAt,
// endedAt: new Date(),
// time: session.time,
// elapsed: session.elapsed,
// elapsed: getElapsed(session),
// completed: session.completed,
// cancelled: session.cancelled,
// paused: session.paused,
Expand All @@ -90,7 +90,7 @@ declare global {
// await postEndpoints(session);
// });

express.set('trust proxy', true)
express.set('trust proxy', true)

express.use((req, res, next) => {
const authHeader = req.headers['authorization'];
Expand Down Expand Up @@ -174,16 +174,13 @@ express.get('/api/clock/:slackId', readLimit, async (req, res) => {
userId: slackUser.userId,
completed: false,
cancelled: false,
paused: false,
// paused: false,
},
});

if (result) {
const startTime = result.createdAt.getTime();
const duration = result.time * 60 * 1000; // convert from minutes to milliseconds
const currTime = new Date().getTime();
const elapsedTime = currTime - startTime;
const leftTime = duration - elapsedTime;
const elapsed = getElapsed(result);
const leftTime = result.time - elapsed;
return res.status(200).send(leftTime.toString());
} else {
return res.status(200).send((-1).toString());
Expand Down Expand Up @@ -235,7 +232,8 @@ express.get('/api/session/:slackId', readLimit, async (req, res) => {

if (result) {
const now = new Date();
const endTime = new Date(now.getTime() + (result.time - result.elapsed) * 60 * 1000);
const elapsed = getElapsed(result);
const endTime = new Date(now.getTime() + (result.time - elapsed) * 60 * 1000);

endTime.setMilliseconds(0);
endTime.setSeconds(0);
Expand All @@ -246,8 +244,8 @@ express.get('/api/session/:slackId', readLimit, async (req, res) => {
id: slackUser.slackId,
createdAt: result.createdAt,
time: result.time,
elapsed: result.elapsed,
remaining: result.time - result.elapsed,
elapsed,
remaining: result.time - elapsed,
endTime: endTime,
paused: result.paused,
completed: result.completed || result.cancelled,
Expand Down Expand Up @@ -424,7 +422,7 @@ express.get('/api/history/:slackId', readLimit, async (req, res) => {
return {
createdAt: r.createdAt,
time: r.time,
elapsed: r.elapsed,
elapsed: getElapsed(r),

goal: r.goal.name,
ended: r.completed || r.cancelled,
Expand Down Expand Up @@ -704,4 +702,4 @@ express.post('/api/pause/:slackId', limiter, async (req, res) => {
} catch (error) {
emitter.emit('error', { error });
}
});
});
18 changes: 9 additions & 9 deletions src/extensions/arcade/slack/views/sessions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Slack } from "../../../../lib/bolt.js";
import { Actions, Environment } from "../../../../lib/constants.js";
import { AirtableAPI } from "../../../../lib/airtable.js";
import { formatHour, pfps } from "../../../../lib/templates.js";
import { prisma } from "../../../../lib/prisma.js";
import { getElapsed, prisma } from "../../../../lib/prisma.js";
import { Loading } from "../../../slack/views/loading.js";

export class Sessions {
Expand Down Expand Up @@ -45,7 +45,7 @@ export class Sessions {
text: {
type: "plain_text",
text:
`You have ${airtableUser.fields['Balance (Hours)']} :tw_admission_tickets: remaining.`,
`You have ${airtableUser.fields['Balance (Hours)']} :tw_admission_tickets: remaining.`,
emoji: true
}
}, {
Expand Down Expand Up @@ -74,8 +74,8 @@ _Lifetime minutes: ${airtableUser.fields['Minutes (All)']} minutes (${formatHour
type: "section",
text: {
type: "mrkdwn",
text:
`Tickets spent: ${Math.floor(airtableUser.fields['Spent Incl. Pending (Minutes)'] / 60)} :tw_admission_tickets:`
text:
`Tickets spent: ${Math.floor(airtableUser.fields['Spent Incl. Pending (Minutes)'] / 60)} :tw_admission_tickets:`
}
}, {
"type": "actions",
Expand Down Expand Up @@ -133,7 +133,7 @@ _Lifetime minutes: ${airtableUser.fields['Minutes (All)']} minutes (${formatHour
type: "section",
text: {
type: "mrkdwn",
text: `*${session.createdAt.getMonth() + 1}/${session.createdAt.getDate()}* - ${session.elapsed} minutes\n${session.metadata?.work}\n*Status: In Progress*\n<${permalink?.permalink}|View Session>`
text: `*${session.createdAt.getMonth() + 1}/${session.createdAt.getDate()}* - ${getElapsed((session))} minutes\n${session.metadata?.work}\n*Status: In Progress*\n<${permalink?.permalink}|View Session>`
}
}, {
type: "divider"
Expand All @@ -146,7 +146,7 @@ _Lifetime minutes: ${airtableUser.fields['Minutes (All)']} minutes (${formatHour
type: "section",
text: {
type: "mrkdwn",
text: `*${session.createdAt.getMonth() + 1}/${session.createdAt.getDate()}* - ${session.elapsed} minutes\n${session.metadata?.work}\n*Status: Not Found*\n<${permalink?.permalink}|View Session>`
text: `*${session.createdAt.getMonth() + 1}/${session.createdAt.getDate()}* - ${getElapsed(session)} minutes\n${session.metadata?.work}\n*Status: Not Found*\n<${permalink?.permalink}|View Session>`
}
}, {
type: "divider"
Expand All @@ -162,7 +162,7 @@ _Lifetime minutes: ${airtableUser.fields['Minutes (All)']} minutes (${formatHour
type: "section",
text: {
type: "mrkdwn",
text: `*${session.createdAt.getMonth() + 1}/${session.createdAt.getDate()}* - ${session.elapsed} minutes\n${session.metadata?.work}\n*Status: Not Found*\n<${permalink?.permalink}|View Session>`
text: `*${session.createdAt.getMonth() + 1}/${session.createdAt.getDate()}* - ${getElapsed(session)} minutes\n${session.metadata?.work}\n*Status: Not Found*\n<${permalink?.permalink}|View Session>`
}
}, {
type: "divider"
Expand All @@ -183,7 +183,7 @@ _Lifetime minutes: ${airtableUser.fields['Minutes (All)']} minutes (${formatHour
text: {
type: "mrkdwn",
text:
`*${session.createdAt.getMonth() + 1}/${session.createdAt.getDate()}* - ${session.elapsed} minutes
`*${session.createdAt.getMonth() + 1}/${session.createdAt.getDate()}* - ${getElapsed(session)} minutes
${session.metadata?.work}
*Status: ${airtableSession.fields["Status"]}*${airtableSession.fields["Reason"] ? `- ${airtableSession.fields["Reason"]}` : ""}
${approved ? `*Has Scrapbook?*: ${banked ? `yup!` : `noo ):`}` : ``}
Expand Down Expand Up @@ -251,4 +251,4 @@ ${approved ? `*Has Scrapbook?*: ${banked ? `yup!` : `noo ):`}` : ``}
}),
}
}
}
}
Loading