diff --git a/server/src/setupTests.ts b/server/src/setupTests.ts index 86676662f321b50ddd91347ba08bb092590124de..52ee95a8bef604bb472ed206790f1fe4bb8f9cd6 100644 --- a/server/src/setupTests.ts +++ b/server/src/setupTests.ts @@ -83,7 +83,7 @@ async function loadTestData() { text: 'Project0 Text', color: '#00f', status: 'open', - deadline: new Date('2020-10-10'), + deadline: Date.parse('2020-10-10'), }, { id: '00000000-0000-4000-8000-000000000001', name: 'Project1', @@ -126,8 +126,8 @@ async function loadTestData() { icon: '0', status: 'open', priority: 'medium', - created: new Date('2020-10-05'), - edited: new Date('2020-10-10'), + created: Date.parse('2020-10-05'), + edited: Date.parse('2020-10-10'), }, { id: '00000000-0000-4000-8000-000000000001', project_id: '00000000-0000-4000-8000-000000000001', @@ -136,8 +136,8 @@ async function loadTestData() { icon: '1', status: 'closed', priority: 'high', - created: new Date('2020-10-10'), - edited: new Date('2020-10-15'), + created: Date.parse('2020-10-10'), + edited: Date.parse('2020-10-15'), }, { id: '00000000-0000-4000-8000-000000000002', project_id: '00000000-0000-4000-8000-000000000002', @@ -146,8 +146,8 @@ async function loadTestData() { icon: '2', status: 'open', priority: 'low', - created: new Date('2020-10-15'), - edited: new Date('2020-10-20'), + created: Date.parse('2020-10-15'), + edited: Date.parse('2020-10-20'), }, { id: '00000000-0000-4000-8000-000000000003', project_id: '00000000-0000-4000-8000-000000000002', @@ -156,8 +156,8 @@ async function loadTestData() { icon: '3', status: 'closed', priority: 'urgent', - created: new Date('2020-10-15'), - edited: new Date('2020-10-20'), + created: Date.parse('2020-10-15'), + edited: Date.parse('2020-10-20'), }, { id: '00000000-0000-4000-8000-000000000004', project_id: '00000000-0000-4000-8000-000000000002', @@ -166,8 +166,8 @@ async function loadTestData() { icon: '4', status: 'suspended', priority: 'urgent', - created: new Date('2020-10-15'), - edited: new Date('2020-10-20'), + created: Date.parse('2020-10-15'), + edited: Date.parse('2020-10-20'), }, { id: '00000000-0000-4000-8000-000000000005', project_id: '00000000-0000-4000-8000-000000000002', @@ -176,8 +176,8 @@ async function loadTestData() { icon: '5', status: 'open', priority: 'urgent', - created: new Date('2020-10-15'), - edited: new Date('2020-10-20'), + created: Date.parse('2020-10-15'), + edited: Date.parse('2020-10-20'), } ]); await database('task_requirements') @@ -222,19 +222,19 @@ async function loadTestData() { id: '00000000-0000-4000-8000-000000000000', task_id: '00000000-0000-4000-8000-000000000005', user_id: '00000000-0000-4000-8000-000000000000', - started: new Date('2020-10-10T00:00:00'), - finished: new Date('2020-10-10T01:00:00'), + started: Date.parse('2020-10-10T12:00:00'), + finished: Date.parse('2020-10-10T13:00:00'), }, { id: '00000000-0000-4000-8000-000000000001', task_id: '00000000-0000-4000-8000-000000000005', user_id: '00000000-0000-4000-8000-000000000000', - started: new Date('2020-10-10T03:00:00'), - finished: new Date('2020-10-10T04:00:00'), + started: Date.parse('2020-10-10T13:00:00'), + finished: Date.parse('2020-10-10T14:00:00'), }, { id: '00000000-0000-4000-8000-000000000002', task_id: '00000000-0000-4000-8000-000000000005', user_id: '00000000-0000-4000-8000-000000000000', - started: new Date('2020-10-11T05:00:00'), + started: Date.parse('2020-10-11T12:00:00'), finished: null, } ]); @@ -245,22 +245,22 @@ async function loadTestData() { task_id: '00000000-0000-4000-8000-000000000005', user_id: '00000000-0000-4000-8000-000000000000', text: 'Comment0', - created: new Date('2020-10-10T00:00:00'), - edited: new Date('2020-10-10T01:00:00'), + created: Date.parse('2020-10-10T00:00:00'), + edited: Date.parse('2020-10-10T01:00:00'), }, { id: '00000000-0000-4000-8000-000000000001', task_id: '00000000-0000-4000-8000-000000000005', user_id: '00000000-0000-4000-8000-000000000001', text: 'Comment1', - created: new Date('2020-10-10T03:00:00'), - edited: new Date('2020-10-10T04:00:00'), + created: Date.parse('2020-10-10T03:00:00'), + edited: Date.parse('2020-10-10T04:00:00'), }, { id: '00000000-0000-4000-8000-000000000002', task_id: '00000000-0000-4000-8000-000000000005', user_id: '00000000-0000-4000-8000-000000000001', text: 'Comment2', - created: new Date('2020-10-10T05:00:00'), - edited: new Date('2020-10-10T05:00:00'), + created: Date.parse('2020-10-10T05:00:00'), + edited: Date.parse('2020-10-10T05:00:00'), } ]); } diff --git a/server/src/v1/comment.ts b/server/src/v1/comment.ts index 66fef84296a7f62fd91f5aeef727bc0a12bf7813..4d691c9138a7efea3434203c5626e2d1178a06bb 100644 --- a/server/src/v1/comment.ts +++ b/server/src/v1/comment.ts @@ -36,8 +36,8 @@ comment.post('/', async (req, res) => { task_id: task_id, user_id: req.body.token.id, text: req.body.text, - created: new Date(), - edited: new Date(), + created: Date.now(), + edited: Date.now(), }); res.status(200).json({ status: 'success', @@ -82,7 +82,7 @@ comment.put('/:uuid', async (req, res) => { const comment = await database('comments') .update({ text: req.body.text, - edited: new Date(), + edited: Date.now(), }) .where({ 'comments.user_id': req.body.token.id, diff --git a/server/src/v1/project.ts b/server/src/v1/project.ts index 4605e66898012901585d2186d44ecadabc3bc122..6a33e994ab4c32b3ad037e0c756f8cc865ed158c 100644 --- a/server/src/v1/project.ts +++ b/server/src/v1/project.ts @@ -187,7 +187,8 @@ project.get('/:uuid/work', async (req, res) => { try { const id = req.params.uuid; if (validate(id)) { - const since = (req.query.since ?? 0) as number; + const since = new Date(parseInt(req.query.since as string ?? 0)); + const to = new Date(parseInt(req.query.to as string ?? Date.now())); const work = await database({ ut: 'team_members' }) .innerJoin('team_projects', 'ut.team_id', 'team_projects.team_id') .innerJoin('tasks', 'team_projects.project_id', 'tasks.project_id') @@ -203,7 +204,8 @@ project.get('/:uuid/work', async (req, res) => { 'ut.user_id': req.body.token.id, 'team_projects.project_id': id, }) - .andWhere('workhours.started', '>=', since) + .andWhere('workhours.started', '>=', since.getTime()) + .andWhere('workhours.started', '<=', to.getTime()) .groupBy('workhours.id'); res.status(200).json({ status: 'success', @@ -227,8 +229,8 @@ project.get('/:uuid/activity', async (req, res) => { try { const id = req.params.uuid; if (validate(id)) { - const since = (req.query.since ?? 0) as number; - const to = (req.query.to ?? Date.now()) as number; + const since = new Date(parseInt(req.query.since as string ?? 0)); + const to = new Date(parseInt(req.query.to as string ?? Date.now())); const activity = await database( database('team_members') .innerJoin('team_projects', 'team_members.team_id', 'team_projects.team_id') @@ -243,12 +245,12 @@ project.get('/:uuid/activity', async (req, res) => { 'team_projects.project_id': id, }) .andWhereNot({ 'workhours.finished': null }) - .andWhere('workhours.started', '>=', since) - .andWhere('workhours.started', '<=', to) + .andWhere('workhours.started', '>=', since.getTime()) + .andWhere('workhours.started', '<=', to.getTime()) .groupBy('workhours.id') ) .select({ - day: database.raw('Date(`started` / 1000, \'unixepoch\')'), + day: database.raw('Date(`started` / 1000, \'unixepoch\')'), // TODO: does not work in prostgres }) .sum({ time: database.raw('`finished` - `started`') }) .groupBy('day'); @@ -263,7 +265,6 @@ project.get('/:uuid/activity', async (req, res) => { }); } } catch (e) { - console.error(e); res.status(400).json({ status: 'error', message: 'failed get activity', @@ -275,8 +276,8 @@ project.get('/:uuid/completion', async (req, res) => { try { const id = req.params.uuid; if (validate(id)) { - const since = (req.query.since ?? 0) as number; - const to = (req.query.to ?? Date.now()) as number; + const since = new Date(parseInt(req.query.since as string ?? 0)); + const to = new Date(parseInt(req.query.to as string ?? Date.now())); const completion = await database( database('team_members') .innerJoin('team_projects', 'team_members.team_id', 'team_projects.team_id') @@ -294,8 +295,8 @@ project.get('/:uuid/completion', async (req, res) => { 'team_members.user_id': req.body.token.id, 'team_projects.project_id': id, }) - .andWhere('tasks.edited', '>=', since) - .andWhere('tasks.created', '<=', to) + .andWhere('tasks.edited', '>=', since.getTime()) + .andWhere('tasks.created', '<=', to.getTime()) .groupBy('tasks.id') ) .select({ @@ -360,7 +361,7 @@ project.post('/', async (req, res) => { name: req.body.name, text: req.body.text, color: req.body.color, - deadline: req.body.deadline ? new Date(req.body.deadline) : null, + deadline: req.body.deadline ? Date.parse(req.body.deadline) : null, status: 'open', }) await transaction('team_projects').insert( diff --git a/server/src/v1/task.ts b/server/src/v1/task.ts index 6dc5bc6d703e29342af7d05f4cf9bc1b7f6b226e..8510369a4d32e6694cf99b43954ed4ca1ff16660 100644 --- a/server/src/v1/task.ts +++ b/server/src/v1/task.ts @@ -265,7 +265,8 @@ task.get('/:uuid/work', async (req, res) => { try { const id = req.params.uuid; if (validate(id)) { - const since = (req.query.since ?? 0) as number; + const since = new Date(parseInt(req.query.since as string ?? 0)); + const to = new Date(parseInt(req.query.to as string ?? Date.now())); const work = await database({ ut: 'team_members' }) .innerJoin('team_projects', 'ut.team_id', 'team_projects.team_id') .innerJoin('tasks', 'team_projects.project_id', 'tasks.project_id') @@ -281,7 +282,8 @@ task.get('/:uuid/work', async (req, res) => { 'ut.user_id': req.body.token.id, 'tasks.id': id, }) - .andWhere('workhours.started', '>=', since) + .andWhere('workhours.started', '>=', since.getTime()) + .andWhere('workhours.started', '<=', to.getTime()) .groupBy('workhours.id'); res.status(200).json({ status: 'success', @@ -475,8 +477,8 @@ task.post('/', async (req, res) => { icon: req.body.icon, priority: req.body.priority, status: 'open', - created: new Date(), - edited: new Date(), + created: Date.now(), + edited: Date.now(), }); if (requirements.length !== 0) { await transaction('task_requirements').insert( @@ -593,7 +595,7 @@ task.put('/:uuid', async (req, res) => { icon: req.body.icon, priority: req.body.priority, status: req.body.status, - edited: new Date(), + edited: Date.now(), }) .where({ 'tasks.id': task_id, diff --git a/server/src/v1/team.ts b/server/src/v1/team.ts index c42806975a5b5b5007225ac2bc2905d2ca92d1b1..a106fe79c0782e57b9c2f1043cb9b542cffe7899 100644 --- a/server/src/v1/team.ts +++ b/server/src/v1/team.ts @@ -314,7 +314,8 @@ team.get('/:uuid/work', async (req, res) => { try { const id = req.params.uuid; if (validate(id)) { - const since = (req.query.since ?? 0) as number; + const since = new Date(parseInt(req.query.since as string ?? 0)); + const to = new Date(parseInt(req.query.to as string ?? Date.now())); const work = await database({ ut: 'team_members' }) .innerJoin('team_members', 'ut.team_id', 'team_members.team_id') .innerJoin('workhours', 'team_members.user_id', 'workhours.user_id') @@ -329,7 +330,8 @@ team.get('/:uuid/work', async (req, res) => { 'ut.user_id': req.body.token.id, 'ut.team_id': id, }) - .andWhere('workhours.started', '>=', since) + .andWhere('workhours.started', '>=', since.getTime()) + .andWhere('workhours.started', '<=', to.getTime()) .groupBy('workhours.id'); res.status(200).json({ status: 'success', @@ -353,13 +355,13 @@ team.get('/:uuid/activity', async (req, res) => { try { const id = req.params.uuid; if (validate(id)) { - const since = (req.query.since ?? 0) as number; - const to = (req.query.to ?? Date.now()) as number; + const since = new Date(parseInt(req.query.since as string ?? 0)); + const to = new Date(parseInt(req.query.to as string ?? Date.now())); const activity = await database({ ut: 'team_members' }) .innerJoin('team_members', 'ut.team_id', 'team_members.team_id') .innerJoin('workhours', 'team_members.user_id', 'workhours.user_id') .select({ - day: database.raw('Date(`workhours`.`started` / 1000, \'unixepoch\')'), + day: database.raw('Date(`workhours`.`started` / 1000, \'unixepoch\')'), // TODO: does not work in postgres }) .sum({ time: database.raw('`workhours`.`finished` - `workhours`.`started`') }) .where({ @@ -367,8 +369,8 @@ team.get('/:uuid/activity', async (req, res) => { 'ut.team_id': id, }) .andWhereNot({ 'workhours.finished': null }) - .andWhere('workhours.started', '>=', since) - .andWhere('workhours.started', '<=', to) + .andWhere('workhours.started', '>=', since.getTime()) + .andWhere('workhours.started', '<=', to.getTime()) .groupBy('day'); res.status(200).json({ status: 'success', @@ -392,8 +394,8 @@ team.get('/:uuid/completion', async (req, res) => { try { const id = req.params.uuid; if (validate(id)) { - const since = (req.query.since ?? 0) as number; - const to = (req.query.to ?? Date.now()) as number; + const since = new Date(parseInt(req.query.since as string ?? 0)); + const to = new Date(parseInt(req.query.to as string ?? Date.now())); const completion = await database( database('team_members') .innerJoin('team_projects', 'team_members.team_id', 'team_projects.team_id') @@ -411,8 +413,8 @@ team.get('/:uuid/completion', async (req, res) => { 'team_members.user_id': req.body.token.id, 'team_members.team_id': id, }) - .andWhere('tasks.edited', '>=', since) - .andWhere('tasks.created', '<=', to) + .andWhere('tasks.edited', '>=', since.getTime()) + .andWhere('tasks.created', '<=', to.getTime()) .groupBy('tasks.id') ) .select({ diff --git a/server/src/v1/user.ts b/server/src/v1/user.ts index 5fe655e997a20ffd748e8c9ffaa6bea80e449204..43e9244309be3818dd2a904919358875b56d20d1 100644 --- a/server/src/v1/user.ts +++ b/server/src/v1/user.ts @@ -32,7 +32,6 @@ user.get('/name/:username', async (req, res) => { }); } } catch (e) { - console.log(e); res.status(400).json({ status: 'error', message: 'failed get user', @@ -160,8 +159,8 @@ user.get('/tasks', async (req, res) => { user.get('/work', async (req, res) => { try { - const since = parseInt(req.query.since as string ?? 0); - const to = parseInt(req.query.to as string ?? Date.now()); + const since = new Date(parseInt(req.query.since as string ?? 0)); + const to = new Date(parseInt(req.query.to as string ?? Date.now())); const work = await database('workhours') .select({ id: 'workhours.id', @@ -173,8 +172,8 @@ user.get('/work', async (req, res) => { .where({ 'workhours.user_id': req.body.token.id, }) - .andWhere('workhours.started', '>=', since) - .andWhere('workhours.started', '<=', to) + .andWhere('workhours.started', '>=', since.getTime()) + .andWhere('workhours.started', '<=', to.getTime()) .groupBy('workhours.id'); res.status(200).json({ status: 'success', @@ -190,26 +189,25 @@ user.get('/work', async (req, res) => { user.get('/activity', async (req, res) => { try { - const since = parseInt(req.query.since as string ?? 0); - const to = parseInt(req.query.to as string ?? Date.now()); + const since = new Date(parseInt(req.query.since as string ?? 0)); + const to = new Date(parseInt(req.query.to as string ?? Date.now())); const activity = await database('workhours') .select({ - day: database.raw('Date(`started` / 1000, \'unixepoch\')'), + day: database.raw('Date(`started` / 1000, \'unixepoch\')'), // TODO: This does not work in postgres }) .sum({ time: database.raw('`finished` - `started`') }) .where({ 'workhours.user_id': req.body.token.id, }) .andWhereNot({ 'workhours.finished': null }) - .andWhere('workhours.started', '>=', since) - .andWhere('workhours.started', '<=', to) + .andWhere('workhours.started', '>=', since.getTime()) + .andWhere('workhours.started', '<=', to.getTime()) .groupBy('day'); res.status(200).json({ status: 'success', activity: activity, }); } catch (e) { - console.error(e); res.status(400).json({ status: 'error', message: 'failed get activity', @@ -219,8 +217,8 @@ user.get('/activity', async (req, res) => { user.get('/completion', async (req, res) => { try { - const since = (req.query.since ?? 0) as number; - const to = (req.query.to ?? Date.now()) as number; + const since = new Date(parseInt(req.query.since as string ?? 0)); + const to = new Date(parseInt(req.query.to as string ?? Date.now())); const completion = await database( database('task_assignees') .leftJoin('tasks', 'task_assignees.task_id', 'tasks.id') @@ -236,8 +234,8 @@ user.get('/completion', async (req, res) => { .where({ 'task_assignees.user_id': req.body.token.id, }) - .andWhere('tasks.edited', '>=', since) - .andWhere('tasks.created', '<=', to) + .andWhere('tasks.edited', '>=', since.getTime()) + .andWhere('tasks.created', '<=', to.getTime()) .groupBy('tasks.id') ) .select({ diff --git a/server/src/v1/work.ts b/server/src/v1/work.ts index 65e32237c409d9c7586702dd10ac8a1900e53c57..aae5946e637b165655c2e9fd5970da4fe90dafe2 100644 --- a/server/src/v1/work.ts +++ b/server/src/v1/work.ts @@ -33,7 +33,7 @@ work.post('/start', async (req, res) => { await database.transaction(async transaction => { await transaction('workhours') .update({ - finished: new Date(), + finished: Date.now(), }) .where({ user_id: req.body.token.id, @@ -44,7 +44,7 @@ work.post('/start', async (req, res) => { id: work_id, task_id: task_id, user_id: req.body.token.id, - started: new Date(), + started: Date.now(), finished: null, }); }); @@ -82,7 +82,7 @@ work.put('/finish', async (req, res) => { try { const work = await database('workhours') .update({ - finished: new Date(), + finished: Date.now(), }) .where({ user_id: req.body.token.id,