Skip to content

Commit

Permalink
switched to sqlite for easy deployment and related changes to make it…
Browse files Browse the repository at this point in the history
… work with it.
  • Loading branch information
pranav-suri-phc committed Oct 23, 2024
1 parent 4f10def commit f124026
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 59 deletions.
3 changes: 2 additions & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"tabWidth": 4,
"printWidth": 100
"printWidth": 100,
"endOfLine": "lf"
}
2 changes: 1 addition & 1 deletion SAMPLE_DATA/subject_and_teacher_fy_sy_sample.csv
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
teacher_name,teacher_email,subject_name,batch_name,department_name,group_name,is_lab,group_allow_simultaneous
Dr Chandan Kumar Choubey CKC,[email protected],Basic Electrical and Electronics Engineering,fy,ra,core,0,0
Prof Jayshree PandeJP,[email protected],Basic Electrical and Electronics Engineering ,fy,mech,core,0,0
Prof Jayshree PandeJP,[email protected],Basic Electrical and Electronics Engineering,fy,mech,core,0,0
Dr Chandan Kumar Choubey CKC,[email protected],Basic Electrical and Electronics Engineering lab,fy,ra,core,1,0
Prof Jayshree PandeJP,[email protected],Basic Electrical and Electronics Engineering lab,fy,mech,core,1,0
Dr Harikrishan R HKR,[email protected],Basic of Sensors and Microcontrollers,fy,civil,core,0,0
Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"module": "src/index.ts",
"type": "module",
"scripts": {
"start": "if command -v pm2 &> /dev/null; then (pm2 describe backend-dist > /dev/null && pm2 restart backend-dist) || pm2 start bun --name backend-dist -- run start:backend; (pm2 describe frontend-dist > /dev/null && pm2 restart frontend-dist) || pm2 start bun --name frontend-dist -- run start:frontend; else bun add -g pm2 && bun run dev; fi",
"start": "concurrently \"bun run dev:frontend\" \"bun run dev:backend\"",
"start:frontend": "bunx --bun vite",
"start:backend": "bun run src/backend/index.ts",
"dev": "if command -v pm2 &> /dev/null; then (pm2 describe backend > /dev/null && pm2 restart backend) || pm2 start bun --name backend -- run dev:backend; (pm2 describe frontend > /dev/null && pm2 restart frontend) || pm2 start bun --name frontend -- run dev:frontend; else bun add -g pm2 && bun run dev; fi",
Expand All @@ -27,7 +27,9 @@
"@fontsource/roboto": "^5.0.12",
"@mui/icons-material": "^5.15.14",
"@mui/material": "^5.15.14",
"@sequelize/sqlite3": "^7.0.0-alpha.43",
"@types/papaparse": "^5.3.14",
"concurrently": "^9.0.1",
"elysia": "latest",
"mysql2": "^3.9.0",
"papaparse": "^5.4.1",
Expand All @@ -36,6 +38,7 @@
"react-router-dom": "^6.22.3",
"react-to-print": "^2.15.1",
"sequelize": "^6.37.1",
"sqlite3": "^5.1.7",
"uniqolor": "^1.1.1",
"upload-js": "^2.24.3",
"use-immer": "^0.9.0"
Expand Down
69 changes: 43 additions & 26 deletions src/backend/api/upload/dataUpload.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import { Sequelize } from "sequelize";
import {
AcademicYear,
Batch,
Expand All @@ -19,15 +20,10 @@ import {
import Papa from "papaparse";

function removeDuplicates<T>(arr: T[]): T[] {
const uniqueArray = arr.filter((value, index) => {
const _value = JSON.stringify(value);
return (
index ===
arr.findIndex((obj) => {
return JSON.stringify(obj) === _value;
})
);
});
const uniqueArray = Array.from(new Set(arr.map((value) => JSON.stringify(value)))).map((json) =>
JSON.parse(json),
);

return uniqueArray;
}

Expand Down Expand Up @@ -133,17 +129,20 @@ function validateCsvData(
expectedKeys = Object.keys(unavailabilityData);
dataKeys = Object.keys(parsedCsv.data[0]);
break;
case "slot":
case "slot": {
expectedKeys = Object.keys(slotInfo);
dataKeys = Object.keys(parsedCsv.data[0]);
break;
case "timetable":
}
case "timetable": {
expectedKeys = Object.keys(timetableData);
dataKeys = Object.keys(parsedCsv.data[0]);
break;
default:
throw new Error(`Unhandled case in validateCsvData function: ${csvType}`);
break;
}
default: {
const _exhaustiveCheck: never = csvType;
return _exhaustiveCheck;
}
}

// This loop will remove the row with missing data
Expand Down Expand Up @@ -203,7 +202,12 @@ async function uploadBatchAndSubdivsionData(csvData: string, academicYearId: Aca
};
});
batchCreate = removeDuplicates(batchCreate);
const batches = await Batch.bulkCreate(batchCreate);
await Batch.bulkCreate(batchCreate);
const batches = await Batch.findAll({
where: {
AcademicYearId: academicYearId,
},
});
// Creating departments
let departmentCreate: {
departmentName: string;
Expand All @@ -214,15 +218,19 @@ async function uploadBatchAndSubdivsionData(csvData: string, academicYearId: Aca
const batch = batches.find(
(batch) =>
areEqual(batch.batchName, batchName) && batch.AcademicYearId === academicYearId,
)!;
);
if (!batch) {
throw new Error("Batch is undefined");
}
departmentCreate.push({
departmentName,
BatchId: batch.id,
});
}
departmentCreate = removeDuplicates(departmentCreate);
const departments = await Department.bulkCreate(departmentCreate);

await Department.bulkCreate(departmentCreate);
const departments = await Department.findAll();
// Creating divisions
let divisionCreate: {
divisionName: string;
Expand Down Expand Up @@ -250,8 +258,8 @@ async function uploadBatchAndSubdivsionData(csvData: string, academicYearId: Aca
});
}
divisionCreate = removeDuplicates(divisionCreate);
const divisions = await Division.bulkCreate(divisionCreate);

await Division.bulkCreate(divisionCreate);
const divisions = await Division.findAll();
// Creating subdivisions
let subdivisionCreate: {
subdivisionName: string;
Expand Down Expand Up @@ -350,8 +358,12 @@ async function uploadSubjectAndTeacherData(csvData: string, academicYearId: Acad
};
});
teacherCreate = removeDuplicates(teacherCreate);
const teachers = await Teacher.bulkCreate(teacherCreate);

await Teacher.bulkCreate(teacherCreate);
const teachers = await Teacher.findAll({
where: {
AcademicYearId: academicYearId,
},
});
let groupCreate = parsedCsv.data.map((row) => {
return {
groupName: row.group_name,
Expand All @@ -360,7 +372,12 @@ async function uploadSubjectAndTeacherData(csvData: string, academicYearId: Acad
};
});
groupCreate = removeDuplicates(groupCreate);
const groups = await Group.bulkCreate(groupCreate);
await Group.bulkCreate(groupCreate);
const groups = await Group.findAll({
where: {
AcademicYearId: academicYearId,
},
});
const batches = await Batch.findAll({
where: {
AcademicYearId: academicYearId,
Expand Down Expand Up @@ -434,8 +451,8 @@ async function uploadSubjectAndTeacherData(csvData: string, academicYearId: Acad
});
}
subjectCreate = removeDuplicates(subjectCreate);
const subjects = await Subject.bulkCreate(subjectCreate);

await Subject.bulkCreate(subjectCreate);
const subjects = await Subject.findAll();
for (const row of parsedCsv.data) {
const {
batch_name: batchName,
Expand Down Expand Up @@ -733,8 +750,8 @@ async function uploadTimetableData(csvData: string, academicYearId: AcademicYear
});
}
slotDataCreate = removeDuplicates(slotDataCreate);
const slotDatas = await SlotDatas.bulkCreate(slotDataCreate);

await SlotDatas.bulkCreate(slotDataCreate);
const slotDatas = await SlotDatas.findAll();
let slotDataClassesCreate: {
SlotDataId: number;
ClassroomId: number;
Expand Down
8 changes: 4 additions & 4 deletions src/backend/api/upload/sampleUpload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import { AcademicYear } from "../../database";

async function sampleDataUpload({ syncDatabase } = { syncDatabase: true }) {
if (syncDatabase) {
await sequelize
.query("SET FOREIGN_KEY_CHECKS = 0")
.then(() => sequelize.sync({ force: true }))
.then(() => sequelize.query("SET FOREIGN_KEY_CHECKS = 1"))
await sequelize.authenticate()
// .query("SET FOREIGN_KEY_CHECKS = 0")
.then(() => sequelize.sync())
// .then(() => sequelize.query("SET FOREIGN_KEY_CHECKS = 1"))
.then(() => console.log("Database synchronised."));
}
const academicYear1 = await AcademicYear.create({
Expand Down
27 changes: 10 additions & 17 deletions src/backend/database/relations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,20 +114,13 @@ Teach.belongsTo(Subject);
// },
// });

await AcademicYear.sync();
await Batch.sync();
await Group.sync();
await Teacher.sync();
await Classroom.sync();
await Slot.sync();

await Department.sync();
await Division.sync();
await Subdivision.sync();
await Subject.sync();

await Teach.sync();
await TeacherUnavailable.sync();
await SlotDatas.sync();
await SlotDataClasses.sync();
await SlotDataSubdivisions.sync();
// sequelize.sync();

// await sequelize.query("SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));");

// await sequelize
// .query("SET FOREIGN_KEY_CHECKS = 0")
// .then(() => sequelize.sync({ force: true }))
// .then(() => sequelize.query("SET FOREIGN_KEY_CHECKS = 1"))
// .then(() => console.log("Database synchronised."))
// .catch((err) => console.log(err));
9 changes: 1 addition & 8 deletions src/backend/database/sequelize.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import { Sequelize } from "sequelize";
import Logger from "../../utils/logging";

const sequelize = new Sequelize("timetable_manager", "root", Bun.env.DB_PASS, {
dialect: "mysql",
logging: Logger.sqlLog,
port: 3306,
dialectOptions: {
socketPath: "/var/run/mysqld/mysqld.sock"
},
});
const sequelize = new Sequelize("sqlite::memory:");

export default sequelize;
2 changes: 1 addition & 1 deletion src/backend/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ console.log("Listening on port 3000\nhttp://localhost:3000/");
export type AppType = typeof app;

// This function will upload the sample data to the database, uncomment to run.
// await sampleDataUpload({ syncDatabase: true });
await sampleDataUpload();

0 comments on commit f124026

Please sign in to comment.