This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
const { AcademicYear } = require('../models');
|
||||
const { cacheUtils } = require('../config/redis');
|
||||
const { addDatabaseWriteJob } = require('../config/bullmq');
|
||||
|
||||
|
||||
/**
|
||||
* Academic Year Controller - Quản lý năm học
|
||||
@@ -146,24 +146,23 @@ class AcademicYearController {
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new academic year (async via BullMQ)
|
||||
* Create new academic year
|
||||
*/
|
||||
async createAcademicYear(req, res, next) {
|
||||
try {
|
||||
const academicYearData = req.body;
|
||||
|
||||
// Add to job queue for async processing
|
||||
const job = await addDatabaseWriteJob('create', 'AcademicYear', academicYearData);
|
||||
// Create academic year directly
|
||||
const academicYear = await AcademicYear.create(academicYearData);
|
||||
|
||||
// Invalidate related caches
|
||||
await cacheUtils.deletePattern('academic_years:list:*');
|
||||
await cacheUtils.delete('academic_year:current');
|
||||
|
||||
res.status(202).json({
|
||||
res.status(201).json({
|
||||
success: true,
|
||||
message: 'Academic year creation job queued',
|
||||
jobId: job.id,
|
||||
data: academicYearData,
|
||||
message: 'Academic year created successfully',
|
||||
data: academicYear,
|
||||
});
|
||||
} catch (error) {
|
||||
next(error);
|
||||
@@ -171,28 +170,34 @@ class AcademicYearController {
|
||||
}
|
||||
|
||||
/**
|
||||
* Update academic year (async via BullMQ)
|
||||
* Update academic year
|
||||
*/
|
||||
async updateAcademicYear(req, res, next) {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const updates = req.body;
|
||||
|
||||
// Add to job queue for async processing
|
||||
const job = await addDatabaseWriteJob('update', 'AcademicYear', {
|
||||
id,
|
||||
updates,
|
||||
});
|
||||
const academicYear = await AcademicYear.findByPk(id);
|
||||
|
||||
if (!academicYear) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: 'Academic year not found',
|
||||
});
|
||||
}
|
||||
|
||||
// Update academic year directly
|
||||
await academicYear.update(updates);
|
||||
|
||||
// Invalidate related caches
|
||||
await cacheUtils.delete(`academic_year:${id}`);
|
||||
await cacheUtils.deletePattern('academic_years:list:*');
|
||||
await cacheUtils.delete('academic_year:current');
|
||||
|
||||
res.status(202).json({
|
||||
res.json({
|
||||
success: true,
|
||||
message: 'Academic year update job queued',
|
||||
jobId: job.id,
|
||||
message: 'Academic year updated successfully',
|
||||
data: academicYear,
|
||||
});
|
||||
} catch (error) {
|
||||
next(error);
|
||||
@@ -200,24 +205,32 @@ class AcademicYearController {
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete academic year (async via BullMQ)
|
||||
* Delete academic year
|
||||
*/
|
||||
async deleteAcademicYear(req, res, next) {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
// Add to job queue for async processing
|
||||
const job = await addDatabaseWriteJob('delete', 'AcademicYear', { id });
|
||||
const academicYear = await AcademicYear.findByPk(id);
|
||||
|
||||
if (!academicYear) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: 'Academic year not found',
|
||||
});
|
||||
}
|
||||
|
||||
// Delete academic year directly
|
||||
await academicYear.destroy();
|
||||
|
||||
// Invalidate related caches
|
||||
await cacheUtils.delete(`academic_year:${id}`);
|
||||
await cacheUtils.deletePattern('academic_years:list:*');
|
||||
await cacheUtils.delete('academic_year:current');
|
||||
|
||||
res.status(202).json({
|
||||
res.json({
|
||||
success: true,
|
||||
message: 'Academic year deletion job queued',
|
||||
jobId: job.id,
|
||||
message: 'Academic year deleted successfully',
|
||||
});
|
||||
} catch (error) {
|
||||
next(error);
|
||||
@@ -231,20 +244,31 @@ class AcademicYearController {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
// Add to job queue to update current year
|
||||
const job = await addDatabaseWriteJob('update', 'AcademicYear', {
|
||||
id,
|
||||
updates: { is_current: true },
|
||||
// Will also set all other years to is_current: false
|
||||
});
|
||||
const academicYear = await AcademicYear.findByPk(id);
|
||||
|
||||
if (!academicYear) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: 'Academic year not found',
|
||||
});
|
||||
}
|
||||
|
||||
// Set all other years to not current
|
||||
await AcademicYear.update(
|
||||
{ is_current: false },
|
||||
{ where: {} }
|
||||
);
|
||||
|
||||
// Set this year as current
|
||||
await academicYear.update({ is_current: true });
|
||||
|
||||
// Invalidate all academic year caches
|
||||
await cacheUtils.deletePattern('academic_year*');
|
||||
|
||||
res.status(202).json({
|
||||
res.json({
|
||||
success: true,
|
||||
message: 'Set current academic year job queued',
|
||||
jobId: job.id,
|
||||
message: 'Academic year set as current successfully',
|
||||
data: academicYear,
|
||||
});
|
||||
} catch (error) {
|
||||
next(error);
|
||||
|
||||
Reference in New Issue
Block a user