Files
worklenz/worklenz-backend/src/controllers/personal-overview-controller.ts

73 lines
3.1 KiB
TypeScript

import {IWorkLenzRequest} from "../interfaces/worklenz-request";
import {IWorkLenzResponse} from "../interfaces/worklenz-response";
import db from "../config/db";
import {ServerResponse} from "../models/server-response";
import WorklenzControllerBase from "./worklenz-controller-base";
import HandleExceptions from "../decorators/handle-exceptions";
export default class PersonalOverviewController extends WorklenzControllerBase {
@HandleExceptions()
public static async getTasksDueToday(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
const q = `
SELECT id,
name,
(SELECT name FROM projects WHERE project_id = projects.id) AS project_name,
(SELECT name FROM task_statuses WHERE id = t.status_id) AS status,
(SELECT task_priorities.name FROM task_priorities WHERE id = t.priority_id) AS priority,
start_date,
end_date
FROM tasks t
JOIN tasks_assignees ta ON t.id = ta.task_id
WHERE t.archived IS FALSE AND t.end_date::DATE = NOW()::DATE
AND is_member_of_project(t.project_id, $2, $1)
ORDER BY end_date DESC
LIMIT 5;
`;
const result = await db.query(q, [req.user?.team_id || null, req.user?.id || null]);
return res.status(200).send(new ServerResponse(true, result.rows));
}
@HandleExceptions()
public static async getTasksRemaining(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
const q = `
SELECT id,
name,
(SELECT name FROM projects WHERE project_id = projects.id) AS project_name,
(SELECT name FROM task_statuses WHERE id = t.status_id) AS status,
(SELECT task_priorities.name FROM task_priorities WHERE id = t.priority_id) AS priority,
start_date,
end_date
FROM tasks t
JOIN tasks_assignees ta ON t.id = ta.task_id
WHERE t.archived IS FALSE AND t.end_date::DATE > NOW()::DATE
AND is_member_of_project(t.project_id, $2, $1)
ORDER BY end_date DESC
LIMIT 5;
`;
const result = await db.query(q, [req.user?.team_id || null, req.user?.id || null]);
return res.status(200).send(new ServerResponse(true, result.rows));
}
@HandleExceptions()
public static async getTaskOverview(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
const q = `
SELECT id,
name,
color_code,
(SELECT MIN(start_date) FROM tasks WHERE archived IS FALSE AND project_id = projects.id) AS min_date,
(SELECT MAX(end_date) FROM tasks WHERE archived IS FALSE AND project_id = projects.id) AS max_date
FROM projects
WHERE team_id = $1
AND (CASE
WHEN (is_owner($2, $1) OR
is_admin($2, $1)) THEN TRUE
ELSE is_member_of_project(projects.id, $2,
$1) END)
ORDER BY NAME;
`;
const result = await db.query(q, [req.user?.team_id || null, req.user?.id || null]);
return res.status(200).send(new ServerResponse(true, result.rows));
}
}