feat: Add user tracking to project tasks and notes
- Implemented user tracking columns in project_tasks and notes tables. - Added created_by and assigned_to fields to project_tasks. - Introduced created_by field and is_system flag in notes. - Updated API endpoints to handle user tracking during task and note creation. - Enhanced database initialization to include new columns and indexes. - Created utility functions to fetch users for task assignment. - Updated front-end components to display user information for tasks and notes. - Added tests for project-tasks API endpoints to verify functionality.
This commit is contained in:
@@ -2,29 +2,100 @@ import db from "../db.js";
|
||||
|
||||
export function getNotesByProjectId(project_id) {
|
||||
return db
|
||||
.prepare(`SELECT * FROM notes WHERE project_id = ? ORDER BY note_date DESC`)
|
||||
.prepare(
|
||||
`
|
||||
SELECT n.*,
|
||||
u.name as created_by_name,
|
||||
u.email as created_by_email
|
||||
FROM notes n
|
||||
LEFT JOIN users u ON n.created_by = u.id
|
||||
WHERE n.project_id = ?
|
||||
ORDER BY n.note_date DESC
|
||||
`
|
||||
)
|
||||
.all(project_id);
|
||||
}
|
||||
|
||||
export function addNoteToProject(project_id, note) {
|
||||
db.prepare(`INSERT INTO notes (project_id, note) VALUES (?, ?)`).run(
|
||||
project_id,
|
||||
note
|
||||
);
|
||||
export function addNoteToProject(project_id, note, created_by = null) {
|
||||
db.prepare(
|
||||
`
|
||||
INSERT INTO notes (project_id, note, created_by, note_date)
|
||||
VALUES (?, ?, ?, CURRENT_TIMESTAMP)
|
||||
`
|
||||
).run(project_id, note, created_by);
|
||||
}
|
||||
|
||||
export function getNotesByTaskId(task_id) {
|
||||
return db
|
||||
.prepare(`SELECT * FROM notes WHERE task_id = ? ORDER BY note_date DESC`)
|
||||
.prepare(
|
||||
`
|
||||
SELECT n.*,
|
||||
u.name as created_by_name,
|
||||
u.email as created_by_email
|
||||
FROM notes n
|
||||
LEFT JOIN users u ON n.created_by = u.id
|
||||
WHERE n.task_id = ?
|
||||
ORDER BY n.note_date DESC
|
||||
`
|
||||
)
|
||||
.all(task_id);
|
||||
}
|
||||
|
||||
export function addNoteToTask(task_id, note, is_system = false) {
|
||||
export function addNoteToTask(
|
||||
task_id,
|
||||
note,
|
||||
is_system = false,
|
||||
created_by = null
|
||||
) {
|
||||
db.prepare(
|
||||
`INSERT INTO notes (task_id, note, is_system) VALUES (?, ?, ?)`
|
||||
).run(task_id, note, is_system ? 1 : 0);
|
||||
`INSERT INTO notes (task_id, note, is_system, created_by, note_date)
|
||||
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)`
|
||||
).run(task_id, note, is_system ? 1 : 0, created_by);
|
||||
}
|
||||
|
||||
export function deleteNote(note_id) {
|
||||
db.prepare(`DELETE FROM notes WHERE note_id = ?`).run(note_id);
|
||||
}
|
||||
|
||||
// Get all notes with user information (for admin/reporting purposes)
|
||||
export function getAllNotesWithUsers() {
|
||||
return db
|
||||
.prepare(
|
||||
`
|
||||
SELECT n.*,
|
||||
u.name as created_by_name,
|
||||
u.email as created_by_email,
|
||||
p.project_name,
|
||||
COALESCE(pt.custom_task_name, t.name) as task_name
|
||||
FROM notes n
|
||||
LEFT JOIN users u ON n.created_by = u.id
|
||||
LEFT JOIN projects p ON n.project_id = p.project_id
|
||||
LEFT JOIN project_tasks pt ON n.task_id = pt.id
|
||||
LEFT JOIN tasks t ON pt.task_template_id = t.task_id
|
||||
ORDER BY n.note_date DESC
|
||||
`
|
||||
)
|
||||
.all();
|
||||
}
|
||||
|
||||
// Get notes created by a specific user
|
||||
export function getNotesByCreator(userId) {
|
||||
return db
|
||||
.prepare(
|
||||
`
|
||||
SELECT n.*,
|
||||
u.name as created_by_name,
|
||||
u.email as created_by_email,
|
||||
p.project_name,
|
||||
COALESCE(pt.custom_task_name, t.name) as task_name
|
||||
FROM notes n
|
||||
LEFT JOIN users u ON n.created_by = u.id
|
||||
LEFT JOIN projects p ON n.project_id = p.project_id
|
||||
LEFT JOIN project_tasks pt ON n.task_id = pt.id
|
||||
LEFT JOIN tasks t ON pt.task_template_id = t.task_id
|
||||
WHERE n.created_by = ?
|
||||
ORDER BY n.note_date DESC
|
||||
`
|
||||
)
|
||||
.all(userId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user