feat: Implement project search functionality and task management features

- Added search functionality to the Project List page, allowing users to filter projects by name, WP, plot, or investment number.
- Created a new Project Tasks page to manage tasks across all projects, including filtering by status and priority.
- Implemented task status updates and deletion functionality.
- Added a new Task Template Edit page for modifying existing task templates.
- Enhanced Task Template Form to include a description field and loading state during submission.
- Updated UI components for better user experience, including badges for task status and priority.
- Introduced new database queries for managing contracts and projects, including fetching tasks related to projects.
- Added migrations to the database for new columns and improved data handling.
This commit is contained in:
Chop
2025-06-02 23:21:04 +02:00
parent b06aad72b8
commit 35569846bc
24 changed files with 2019 additions and 169 deletions

View File

@@ -0,0 +1,81 @@
import db from "@/lib/db";
import { NextResponse } from "next/server";
// GET: Get a specific task template
export async function GET(req, { params }) {
try {
const template = db
.prepare("SELECT * FROM tasks WHERE task_id = ? AND is_standard = 1")
.get(params.id);
if (!template) {
return NextResponse.json(
{ error: "Task template not found" },
{ status: 404 }
);
}
return NextResponse.json(template);
} catch (error) {
return NextResponse.json(
{ error: "Failed to fetch task template" },
{ status: 500 }
);
}
}
// PUT: Update a task template
export async function PUT(req, { params }) {
try {
const { name, max_wait_days, description } = await req.json();
if (!name) {
return NextResponse.json({ error: "Name is required" }, { status: 400 });
}
const result = db
.prepare(
`UPDATE tasks
SET name = ?, max_wait_days = ?, description = ?
WHERE task_id = ? AND is_standard = 1`
)
.run(name, max_wait_days || 0, description || null, params.id);
if (result.changes === 0) {
return NextResponse.json(
{ error: "Task template not found" },
{ status: 404 }
);
}
return NextResponse.json({ success: true });
} catch (error) {
return NextResponse.json(
{ error: "Failed to update task template" },
{ status: 500 }
);
}
}
// DELETE: Delete a task template
export async function DELETE(req, { params }) {
try {
const result = db
.prepare("DELETE FROM tasks WHERE task_id = ? AND is_standard = 1")
.run(params.id);
if (result.changes === 0) {
return NextResponse.json(
{ error: "Task template not found" },
{ status: 404 }
);
}
return NextResponse.json({ success: true });
} catch (error) {
return NextResponse.json(
{ error: "Failed to delete task template" },
{ status: 500 }
);
}
}