39224-vm/backend/src/db/migrations/1773730665437.js
2026-03-17 06:59:09 +00:00

4897 lines
153 KiB
JavaScript

module.exports = {
/**
* @param {QueryInterface} queryInterface
* @param {Sequelize} Sequelize
* @returns {Promise<void>}
*/
async up(queryInterface, Sequelize) {
/**
* @type {Transaction}
*/
const transaction = await queryInterface.sequelize.transaction();
try {
await queryInterface.createTable('users', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('roles', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('permissions', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('kelas', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('guru', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('siswa', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('mata_pelajaran', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('kktp', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('kktp_detail', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('nilai', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('sikap', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('materi', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('tugas', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('pengumpulan_tugas', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('absensi', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('pengumuman', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('notifikasi', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('ai_insights', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('raport_descriptions', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('audit_logs', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('import_jobs', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.addColumn(
'users',
'firstName',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'lastName',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'phoneNumber',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'email',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'disabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'password',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'emailVerified',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'emailVerificationToken',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'emailVerificationTokenExpiresAt',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'passwordResetToken',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'passwordResetTokenExpiresAt',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'provider',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'app_roleId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'roles',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'roles',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'roles',
'role_customization',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'permissions',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'kelas',
'nama_kelas',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'kelas',
'tingkat',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'kelas',
'tahun_ajaran',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'kelas',
'semester',
{
type: Sequelize.DataTypes.ENUM,
values: ['ganjil','genap'],
},
{ transaction }
);
await queryInterface.addColumn(
'kelas',
'wali_kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'guru',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'guru',
'nip',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'guru',
'nama',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'guru',
'jenis_kelamin',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'guru',
'tempat_lahir',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'guru',
'tanggal_lahir',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'guru',
'alamat',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'guru',
'no_hp',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'guru',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kelas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'nisn',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'nis',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'nama',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'jenis_kelamin',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'tempat_lahir',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'tanggal_lahir',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'alamat',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'nama_ortu',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'no_hp_ortu',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'siswa',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'mata_pelajaran',
'kode_mapel',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'mata_pelajaran',
'nama_mapel',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'mata_pelajaran',
'kelompok',
{
type: Sequelize.DataTypes.ENUM,
values: ['umum','muatan_lokal','pilihan'],
},
{ transaction }
);
await queryInterface.addColumn(
'mata_pelajaran',
'urutan',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'mata_pelajaran',
'guru_pengampuId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'guru',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'mata_pelajaran',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'kktp',
'mata_pelajaranId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'mata_pelajaran',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'kktp',
'kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kelas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'kktp',
'fase',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'kktp',
'nilai_minimum',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'kktp',
'deskripsi_umum',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'kktp',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'kktp_detail',
'kktpId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kktp',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'kktp_detail',
'predikat',
{
type: Sequelize.DataTypes.ENUM,
values: ['A','B','C','D'],
},
{ transaction }
);
await queryInterface.addColumn(
'kktp_detail',
'nilai_min',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'kktp_detail',
'nilai_max',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'kktp_detail',
'deskripsi',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'siswaId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'siswa',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'mata_pelajaranId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'mata_pelajaran',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kelas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'jenis_penilaian',
{
type: Sequelize.DataTypes.ENUM,
values: ['tugas','kuis','ulangan_harian','pts','pas','praktik','proyek','lainnya'],
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'judul_penilaian',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'tanggal_penilaian',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'skor',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'predikat',
{
type: Sequelize.DataTypes.ENUM,
values: ['A','B','C','D'],
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'deskripsi_kktp',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'guru_penginputId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'guru',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'nilai',
'is_locked',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'sikap',
'siswaId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'siswa',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'sikap',
'kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kelas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'sikap',
'semester',
{
type: Sequelize.DataTypes.ENUM,
values: ['ganjil','genap'],
},
{ transaction }
);
await queryInterface.addColumn(
'sikap',
'tahun_ajaran',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'sikap',
'predikat_sikap',
{
type: Sequelize.DataTypes.ENUM,
values: ['sangat_baik','baik','cukup','perlu_bimbingan'],
},
{ transaction }
);
await queryInterface.addColumn(
'sikap',
'catatan_wali_kelas',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'sikap',
'wali_kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'materi',
'mata_pelajaranId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'mata_pelajaran',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'materi',
'kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kelas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'materi',
'guruId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'guru',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'materi',
'judul',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'materi',
'deskripsi',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'materi',
'tipe_konten',
{
type: Sequelize.DataTypes.ENUM,
values: ['pdf','video','link','teks'],
},
{ transaction }
);
await queryInterface.addColumn(
'materi',
'url_video',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'materi',
'published_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'materi',
'is_published',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'tugas',
'mata_pelajaranId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'mata_pelajaran',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'tugas',
'kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kelas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'tugas',
'guruId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'guru',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'tugas',
'jenis',
{
type: Sequelize.DataTypes.ENUM,
values: ['tugas','kuis'],
},
{ transaction }
);
await queryInterface.addColumn(
'tugas',
'judul',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tugas',
'instruksi',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tugas',
'dibuka_pada',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'tugas',
'deadline_pada',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'tugas',
'maks_nilai',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'tugas',
'is_published',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'pengumpulan_tugas',
'tugasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'tugas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'pengumpulan_tugas',
'siswaId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'siswa',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'pengumpulan_tugas',
'dikumpulkan_pada',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'pengumpulan_tugas',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['draft','submitted','late','graded','returned'],
},
{ transaction }
);
await queryInterface.addColumn(
'pengumpulan_tugas',
'jawaban_teks',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'pengumpulan_tugas',
'nilai',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'pengumpulan_tugas',
'feedback_guru',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'pengumpulan_tugas',
'dinilai_olehId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'guru',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'pengumpulan_tugas',
'dinilai_pada',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'absensi',
'kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kelas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'absensi',
'siswaId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'siswa',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'absensi',
'tanggal',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'absensi',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['hadir','izin','sakit','alpa'],
},
{ transaction }
);
await queryInterface.addColumn(
'absensi',
'keterangan',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'absensi',
'dicatat_olehId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'pengumuman',
'judul',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'pengumuman',
'isi',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'pengumuman',
'target_audience',
{
type: Sequelize.DataTypes.ENUM,
values: ['semua','guru','siswa','wali_kelas','kepala_sekolah','kelas_tertentu'],
},
{ transaction }
);
await queryInterface.addColumn(
'pengumuman',
'kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kelas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'pengumuman',
'published_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'pengumuman',
'expires_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'pengumuman',
'is_published',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'pengumuman',
'authorId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'notifikasi',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'notifikasi',
'judul',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'notifikasi',
'pesan',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'notifikasi',
'channel',
{
type: Sequelize.DataTypes.ENUM,
values: ['in_app','fcm'],
},
{ transaction }
);
await queryInterface.addColumn(
'notifikasi',
'kategori',
{
type: Sequelize.DataTypes.ENUM,
values: ['pengumuman','tugas','nilai','absensi','sistem','lainnya'],
},
{ transaction }
);
await queryInterface.addColumn(
'notifikasi',
'is_read',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'notifikasi',
'sent_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'ai_insights',
'siswaId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'siswa',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'ai_insights',
'kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kelas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'ai_insights',
'jenis',
{
type: Sequelize.DataTypes.ENUM,
values: ['prediksi_prestasi','deteksi_kelemahan','rekomendasi_belajar','insight_wali_kelas','ringkasan_kelas'],
},
{ transaction }
);
await queryInterface.addColumn(
'ai_insights',
'skor_keyakinan',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'ai_insights',
'ringkasan',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'ai_insights',
'rekomendasi',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'ai_insights',
'generated_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'ai_insights',
'generated_byId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'siswaId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'siswa',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'kelasId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'kelas',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'mata_pelajaranId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'mata_pelajaran',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'tahun_ajaran',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'semester',
{
type: Sequelize.DataTypes.ENUM,
values: ['ganjil','genap'],
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'nilai_akhir',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'predikat',
{
type: Sequelize.DataTypes.ENUM,
values: ['A','B','C','D'],
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'deskripsi_kktp',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'ranking_kelas',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'rata_rata_kelas',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'ai_prompt',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'ai_output',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'generated_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'raport_descriptions',
'generated_byId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'audit_logs',
'actorId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'audit_logs',
'action',
{
type: Sequelize.DataTypes.ENUM,
values: ['create','update','delete','import','export','login','logout','generate_ai','print_pdf'],
},
{ transaction }
);
await queryInterface.addColumn(
'audit_logs',
'entity_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'audit_logs',
'entity_key',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'audit_logs',
'summary',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'audit_logs',
'ip_address',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'audit_logs',
'user_agent',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'audit_logs',
'logged_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'import_jobs',
'jenis',
{
type: Sequelize.DataTypes.ENUM,
values: ['dapodik_guru','dapodik_siswa','kelas','mata_pelajaran','nilai'],
},
{ transaction }
);
await queryInterface.addColumn(
'import_jobs',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['queued','processing','success','failed','partial'],
},
{ transaction }
);
await queryInterface.addColumn(
'import_jobs',
'total_rows',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'import_jobs',
'success_rows',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'import_jobs',
'failed_rows',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'import_jobs',
'error_report',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'import_jobs',
'requested_byId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'import_jobs',
'started_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'import_jobs',
'finished_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await transaction.commit();
} catch (err) {
await transaction.rollback();
throw err;
}
},
/**
* @param {QueryInterface} queryInterface
* @param {Sequelize} Sequelize
* @returns {Promise<void>}
*/
async down(queryInterface, Sequelize) {
/**
* @type {Transaction}
*/
const transaction = await queryInterface.sequelize.transaction();
try {
await queryInterface.removeColumn(
'import_jobs',
'finished_at',
{ transaction }
);
await queryInterface.removeColumn(
'import_jobs',
'started_at',
{ transaction }
);
await queryInterface.removeColumn(
'import_jobs',
'requested_byId',
{ transaction }
);
await queryInterface.removeColumn(
'import_jobs',
'error_report',
{ transaction }
);
await queryInterface.removeColumn(
'import_jobs',
'failed_rows',
{ transaction }
);
await queryInterface.removeColumn(
'import_jobs',
'success_rows',
{ transaction }
);
await queryInterface.removeColumn(
'import_jobs',
'total_rows',
{ transaction }
);
await queryInterface.removeColumn(
'import_jobs',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'import_jobs',
'jenis',
{ transaction }
);
await queryInterface.removeColumn(
'audit_logs',
'logged_at',
{ transaction }
);
await queryInterface.removeColumn(
'audit_logs',
'user_agent',
{ transaction }
);
await queryInterface.removeColumn(
'audit_logs',
'ip_address',
{ transaction }
);
await queryInterface.removeColumn(
'audit_logs',
'summary',
{ transaction }
);
await queryInterface.removeColumn(
'audit_logs',
'entity_key',
{ transaction }
);
await queryInterface.removeColumn(
'audit_logs',
'entity_name',
{ transaction }
);
await queryInterface.removeColumn(
'audit_logs',
'action',
{ transaction }
);
await queryInterface.removeColumn(
'audit_logs',
'actorId',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'generated_byId',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'generated_at',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'ai_output',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'ai_prompt',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'rata_rata_kelas',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'ranking_kelas',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'deskripsi_kktp',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'predikat',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'nilai_akhir',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'semester',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'tahun_ajaran',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'mata_pelajaranId',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'raport_descriptions',
'siswaId',
{ transaction }
);
await queryInterface.removeColumn(
'ai_insights',
'generated_byId',
{ transaction }
);
await queryInterface.removeColumn(
'ai_insights',
'generated_at',
{ transaction }
);
await queryInterface.removeColumn(
'ai_insights',
'rekomendasi',
{ transaction }
);
await queryInterface.removeColumn(
'ai_insights',
'ringkasan',
{ transaction }
);
await queryInterface.removeColumn(
'ai_insights',
'skor_keyakinan',
{ transaction }
);
await queryInterface.removeColumn(
'ai_insights',
'jenis',
{ transaction }
);
await queryInterface.removeColumn(
'ai_insights',
'kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'ai_insights',
'siswaId',
{ transaction }
);
await queryInterface.removeColumn(
'notifikasi',
'sent_at',
{ transaction }
);
await queryInterface.removeColumn(
'notifikasi',
'is_read',
{ transaction }
);
await queryInterface.removeColumn(
'notifikasi',
'kategori',
{ transaction }
);
await queryInterface.removeColumn(
'notifikasi',
'channel',
{ transaction }
);
await queryInterface.removeColumn(
'notifikasi',
'pesan',
{ transaction }
);
await queryInterface.removeColumn(
'notifikasi',
'judul',
{ transaction }
);
await queryInterface.removeColumn(
'notifikasi',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'pengumuman',
'authorId',
{ transaction }
);
await queryInterface.removeColumn(
'pengumuman',
'is_published',
{ transaction }
);
await queryInterface.removeColumn(
'pengumuman',
'expires_at',
{ transaction }
);
await queryInterface.removeColumn(
'pengumuman',
'published_at',
{ transaction }
);
await queryInterface.removeColumn(
'pengumuman',
'kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'pengumuman',
'target_audience',
{ transaction }
);
await queryInterface.removeColumn(
'pengumuman',
'isi',
{ transaction }
);
await queryInterface.removeColumn(
'pengumuman',
'judul',
{ transaction }
);
await queryInterface.removeColumn(
'absensi',
'dicatat_olehId',
{ transaction }
);
await queryInterface.removeColumn(
'absensi',
'keterangan',
{ transaction }
);
await queryInterface.removeColumn(
'absensi',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'absensi',
'tanggal',
{ transaction }
);
await queryInterface.removeColumn(
'absensi',
'siswaId',
{ transaction }
);
await queryInterface.removeColumn(
'absensi',
'kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'pengumpulan_tugas',
'dinilai_pada',
{ transaction }
);
await queryInterface.removeColumn(
'pengumpulan_tugas',
'dinilai_olehId',
{ transaction }
);
await queryInterface.removeColumn(
'pengumpulan_tugas',
'feedback_guru',
{ transaction }
);
await queryInterface.removeColumn(
'pengumpulan_tugas',
'nilai',
{ transaction }
);
await queryInterface.removeColumn(
'pengumpulan_tugas',
'jawaban_teks',
{ transaction }
);
await queryInterface.removeColumn(
'pengumpulan_tugas',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'pengumpulan_tugas',
'dikumpulkan_pada',
{ transaction }
);
await queryInterface.removeColumn(
'pengumpulan_tugas',
'siswaId',
{ transaction }
);
await queryInterface.removeColumn(
'pengumpulan_tugas',
'tugasId',
{ transaction }
);
await queryInterface.removeColumn(
'tugas',
'is_published',
{ transaction }
);
await queryInterface.removeColumn(
'tugas',
'maks_nilai',
{ transaction }
);
await queryInterface.removeColumn(
'tugas',
'deadline_pada',
{ transaction }
);
await queryInterface.removeColumn(
'tugas',
'dibuka_pada',
{ transaction }
);
await queryInterface.removeColumn(
'tugas',
'instruksi',
{ transaction }
);
await queryInterface.removeColumn(
'tugas',
'judul',
{ transaction }
);
await queryInterface.removeColumn(
'tugas',
'jenis',
{ transaction }
);
await queryInterface.removeColumn(
'tugas',
'guruId',
{ transaction }
);
await queryInterface.removeColumn(
'tugas',
'kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'tugas',
'mata_pelajaranId',
{ transaction }
);
await queryInterface.removeColumn(
'materi',
'is_published',
{ transaction }
);
await queryInterface.removeColumn(
'materi',
'published_at',
{ transaction }
);
await queryInterface.removeColumn(
'materi',
'url_video',
{ transaction }
);
await queryInterface.removeColumn(
'materi',
'tipe_konten',
{ transaction }
);
await queryInterface.removeColumn(
'materi',
'deskripsi',
{ transaction }
);
await queryInterface.removeColumn(
'materi',
'judul',
{ transaction }
);
await queryInterface.removeColumn(
'materi',
'guruId',
{ transaction }
);
await queryInterface.removeColumn(
'materi',
'kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'materi',
'mata_pelajaranId',
{ transaction }
);
await queryInterface.removeColumn(
'sikap',
'wali_kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'sikap',
'catatan_wali_kelas',
{ transaction }
);
await queryInterface.removeColumn(
'sikap',
'predikat_sikap',
{ transaction }
);
await queryInterface.removeColumn(
'sikap',
'tahun_ajaran',
{ transaction }
);
await queryInterface.removeColumn(
'sikap',
'semester',
{ transaction }
);
await queryInterface.removeColumn(
'sikap',
'kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'sikap',
'siswaId',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'is_locked',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'guru_penginputId',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'deskripsi_kktp',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'predikat',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'skor',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'tanggal_penilaian',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'judul_penilaian',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'jenis_penilaian',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'mata_pelajaranId',
{ transaction }
);
await queryInterface.removeColumn(
'nilai',
'siswaId',
{ transaction }
);
await queryInterface.removeColumn(
'kktp_detail',
'deskripsi',
{ transaction }
);
await queryInterface.removeColumn(
'kktp_detail',
'nilai_max',
{ transaction }
);
await queryInterface.removeColumn(
'kktp_detail',
'nilai_min',
{ transaction }
);
await queryInterface.removeColumn(
'kktp_detail',
'predikat',
{ transaction }
);
await queryInterface.removeColumn(
'kktp_detail',
'kktpId',
{ transaction }
);
await queryInterface.removeColumn(
'kktp',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'kktp',
'deskripsi_umum',
{ transaction }
);
await queryInterface.removeColumn(
'kktp',
'nilai_minimum',
{ transaction }
);
await queryInterface.removeColumn(
'kktp',
'fase',
{ transaction }
);
await queryInterface.removeColumn(
'kktp',
'kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'kktp',
'mata_pelajaranId',
{ transaction }
);
await queryInterface.removeColumn(
'mata_pelajaran',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'mata_pelajaran',
'guru_pengampuId',
{ transaction }
);
await queryInterface.removeColumn(
'mata_pelajaran',
'urutan',
{ transaction }
);
await queryInterface.removeColumn(
'mata_pelajaran',
'kelompok',
{ transaction }
);
await queryInterface.removeColumn(
'mata_pelajaran',
'nama_mapel',
{ transaction }
);
await queryInterface.removeColumn(
'mata_pelajaran',
'kode_mapel',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'no_hp_ortu',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'nama_ortu',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'alamat',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'tanggal_lahir',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'tempat_lahir',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'jenis_kelamin',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'nama',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'nis',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'nisn',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'siswa',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'guru',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'guru',
'no_hp',
{ transaction }
);
await queryInterface.removeColumn(
'guru',
'alamat',
{ transaction }
);
await queryInterface.removeColumn(
'guru',
'tanggal_lahir',
{ transaction }
);
await queryInterface.removeColumn(
'guru',
'tempat_lahir',
{ transaction }
);
await queryInterface.removeColumn(
'guru',
'jenis_kelamin',
{ transaction }
);
await queryInterface.removeColumn(
'guru',
'nama',
{ transaction }
);
await queryInterface.removeColumn(
'guru',
'nip',
{ transaction }
);
await queryInterface.removeColumn(
'guru',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'kelas',
'wali_kelasId',
{ transaction }
);
await queryInterface.removeColumn(
'kelas',
'semester',
{ transaction }
);
await queryInterface.removeColumn(
'kelas',
'tahun_ajaran',
{ transaction }
);
await queryInterface.removeColumn(
'kelas',
'tingkat',
{ transaction }
);
await queryInterface.removeColumn(
'kelas',
'nama_kelas',
{ transaction }
);
await queryInterface.removeColumn(
'permissions',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'roles',
'role_customization',
{ transaction }
);
await queryInterface.removeColumn(
'roles',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'app_roleId',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'provider',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'passwordResetTokenExpiresAt',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'passwordResetToken',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'emailVerificationTokenExpiresAt',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'emailVerificationToken',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'emailVerified',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'password',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'disabled',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'email',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'phoneNumber',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'lastName',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'firstName',
{ transaction }
);
await queryInterface.dropTable('import_jobs', { transaction });
await queryInterface.dropTable('audit_logs', { transaction });
await queryInterface.dropTable('raport_descriptions', { transaction });
await queryInterface.dropTable('ai_insights', { transaction });
await queryInterface.dropTable('notifikasi', { transaction });
await queryInterface.dropTable('pengumuman', { transaction });
await queryInterface.dropTable('absensi', { transaction });
await queryInterface.dropTable('pengumpulan_tugas', { transaction });
await queryInterface.dropTable('tugas', { transaction });
await queryInterface.dropTable('materi', { transaction });
await queryInterface.dropTable('sikap', { transaction });
await queryInterface.dropTable('nilai', { transaction });
await queryInterface.dropTable('kktp_detail', { transaction });
await queryInterface.dropTable('kktp', { transaction });
await queryInterface.dropTable('mata_pelajaran', { transaction });
await queryInterface.dropTable('siswa', { transaction });
await queryInterface.dropTable('guru', { transaction });
await queryInterface.dropTable('kelas', { transaction });
await queryInterface.dropTable('permissions', { transaction });
await queryInterface.dropTable('roles', { transaction });
await queryInterface.dropTable('users', { transaction });
await transaction.commit();
} catch (err) {
await transaction.rollback();
throw err;
}
}
};