96 lines
2.1 KiB
JavaScript
96 lines
2.1 KiB
JavaScript
import { PrismaClient } from '@prisma/client';
|
|
|
|
// Initialize Prisma client
|
|
const prisma = new PrismaClient();
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
// Get query parameters
|
|
const query = getQuery(event);
|
|
const caseId = query.caseId;
|
|
const status = query.status;
|
|
const assignedTo = query.assignedTo;
|
|
const page = parseInt(query.page) || 1;
|
|
const limit = parseInt(query.limit) || 10;
|
|
const skip = (page - 1) * limit;
|
|
|
|
// Build where clause
|
|
const where = {};
|
|
|
|
if (caseId) {
|
|
where.caseID = parseInt(caseId);
|
|
}
|
|
|
|
if (status) {
|
|
where.taskStatus = status;
|
|
}
|
|
|
|
if (assignedTo) {
|
|
where.taskAssignedTo = parseInt(assignedTo);
|
|
}
|
|
|
|
// Fetch tasks
|
|
const tasks = await prisma.task.findMany({
|
|
where,
|
|
include: {
|
|
case: {
|
|
select: {
|
|
caseID: true,
|
|
caseUUID: true,
|
|
caseName: true,
|
|
caseStatus: true,
|
|
process: {
|
|
select: {
|
|
processID: true,
|
|
processUUID: true,
|
|
processName: true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
assignedTo: {
|
|
select: {
|
|
userID: true,
|
|
userFullName: true,
|
|
userUsername: true
|
|
}
|
|
},
|
|
form: {
|
|
select: {
|
|
formID: true,
|
|
formUUID: true,
|
|
formName: true,
|
|
formDescription: true
|
|
}
|
|
}
|
|
},
|
|
orderBy: {
|
|
taskCreatedDate: 'desc'
|
|
},
|
|
skip,
|
|
take: limit
|
|
});
|
|
|
|
// Count total tasks for pagination
|
|
const totalTasks = await prisma.task.count({ where });
|
|
|
|
return {
|
|
success: true,
|
|
tasks,
|
|
pagination: {
|
|
page,
|
|
limit,
|
|
totalItems: totalTasks,
|
|
totalPages: Math.ceil(totalTasks / limit)
|
|
}
|
|
};
|
|
} catch (error) {
|
|
console.error('Error fetching tasks:', error);
|
|
|
|
return {
|
|
success: false,
|
|
error: 'Failed to fetch tasks',
|
|
details: process.env.NODE_ENV === 'development' ? error.message : undefined
|
|
};
|
|
}
|
|
});
|