update
All checks were successful
Deploy to Production / deploy (push) Successful in 21s

This commit is contained in:
silverpro89
2026-01-28 11:21:21 +07:00
parent 57c45d27a3
commit 3791b7cae1
23 changed files with 1033 additions and 317 deletions

View File

@@ -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);