51 lines
2.3 KiB
TypeScript
51 lines
2.3 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 OverviewController extends WorklenzControllerBase {
|
|
@HandleExceptions()
|
|
public static async getById(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
|
|
const q = `
|
|
SELECT id,
|
|
name,
|
|
color_code,
|
|
notes,
|
|
(SELECT name FROM clients WHERE id = projects.client_id) AS client_name,
|
|
|
|
(SELECT COALESCE(ARRAY_TO_JSON(ARRAY_AGG(ROW_TO_JSON(rec))), '[]'::JSON)
|
|
FROM (SELECT team_member_id AS id,
|
|
(SELECT task_id
|
|
FROM tasks_assignees
|
|
WHERE EXISTS(SELECT id FROM tasks WHERE project_id = $1)
|
|
AND project_member_id = id) AS task_count,
|
|
(SELECT name
|
|
FROM users
|
|
WHERE id =
|
|
(SELECT user_id
|
|
FROM team_members
|
|
WHERE team_member_id = project_members.team_member_id)),
|
|
(SELECT name
|
|
FROM job_titles
|
|
WHERE id = (SELECT job_title_id
|
|
FROM team_members
|
|
WHERE id = project_members.team_member_id)) AS job_title
|
|
FROM project_members
|
|
WHERE project_id = projects.id
|
|
ORDER BY name ASC) rec) AS members,
|
|
|
|
(SELECT COALESCE(ARRAY_TO_JSON(ARRAY_AGG(ROW_TO_JSON(rec))), '[]'::JSON)
|
|
FROM (SELECT id, name, done FROM tasks WHERE project_id = projects.id ORDER BY name ASC) rec) AS tasks
|
|
FROM projects
|
|
WHERE id = $1
|
|
AND team_id = $2;
|
|
`;
|
|
const result = await db.query(q, [req.params.id, req.user?.team_id || null]);
|
|
const [data] = result.rows;
|
|
return res.status(200).send(new ServerResponse(true, data));
|
|
}
|
|
}
|