Skip to content
This repository has been archived by the owner on Jan 10, 2024. It is now read-only.

changed from mongodb to mysql using sequelize #3

Merged
merged 1 commit into from
Aug 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions database/controllers/repo.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const Repo = require("../models/repo.model");
const User = require("../models/user.model");

const saveRepo = async (
githubRepoId,
DEICommitSHA,
repoLink,
badgeType,
attachment,
name
) => {
try {
// Find a user by their name
const user = await User.findOne({ where: { name } });

if (!user) {
throw new Error(`User with name '${name}' not found.`);
}

// Create a new repo associated with the user
const repo = await Repo.create({
githubRepoId,
DEICommitSHA,
repoLink,
badgeType,
attachment,
UserId: user.id,
});

return repo.id;
} catch (error) {
console.error("Error saving repo:", error.message);
}
};

module.exports = saveRepo;
48 changes: 48 additions & 0 deletions database/controllers/user.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
const User = require("../models/user.model");

const saveUser = async (login, name, email, githubId) => {
try {
// Find a user by their GitHub ID
let user = await User.findOne({ where: { githubId } });

if (!user) {
// If the user doesn't exist, create a new one
user = await User.create({
login,
name,
email,
githubId,
});
console.log("New user created");
return `New user created: ${user.login}`;
} else {
// User already exists; update if necessary
const updates = [];

if (user.name !== name) {
user.name = name;
updates.push(`name from '${user.name}' to '${name}'`);
}
if (user.email !== email) {
user.email = email;
updates.push(`email from '${user.email}' to '${email}'`);
}
if (user.login !== login) {
user.login = login;
updates.push(`username from '${user.login}' to '${login}'`);
}

if (updates.length > 0) {
await user.save();
return `User ${user.login} updated: ${updates.join(", ")}`;
}

console.log("User Already Exists");
return "User Already Exists";
}
} catch (error) {
return `Error saving user: ${error.message}`;
}
};

module.exports = saveUser;
23 changes: 23 additions & 0 deletions database/helpers/dbconnect.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const sequelize = require("./sequelize");
const dbconnect = async () => {
try {
await sequelize.authenticate();
try {
await sequelize.sync();
/**
* to drop all tables and re-create them use:
*
* await sequelize.sync({ force: true });
*
* this is useful during development when model structure is
* changing frequently
*/
} catch (error) {
console.error(error);
}
} catch (error) {
console.error("Error connecting to MySQL:", error);
}
};

module.exports = dbconnect;
14 changes: 14 additions & 0 deletions database/helpers/sequelize.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const Sequelize = require("sequelize");
require("dotenv").config();

const sequelize = new Sequelize(
process.env.DB_NAME,
process.env.DB_USER,
process.env.DB_PASSWORD,
{
host: process.env.DB_HOST,
dialect: process.env.DB_DIALECT,
}
);

module.exports = sequelize;
32 changes: 32 additions & 0 deletions database/models/repo.model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// models/Repo.js
const { DataTypes } = require("sequelize");
const sequelize = require("../helpers/sequelize");
const User = require("./user.model");

const Repo = sequelize.define("repos", {
githubRepoId: {
type: DataTypes.INTEGER,
allowNull: false,
},
DEICommitSHA: {
type: DataTypes.STRING,
allowNull: false,
},
repoLink: {
type: DataTypes.STRING,
allowNull: false,
},
badgeType: {
type: DataTypes.STRING,
allowNull: false,
},
attachment: {
type: DataTypes.STRING,
allowNull: false,
},
});

// Define associations (foreign key)
Repo.belongsTo(User);

module.exports = Repo;
23 changes: 23 additions & 0 deletions database/models/user.model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const { DataTypes } = require("sequelize");
const sequelize = require("../helpers/sequelize");

const User = sequelize.define("users", {
login: {
type: DataTypes.STRING,
allowNull: false,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
email: {
type: DataTypes.STRING,
allowNull: false,
},
githubId: {
type: DataTypes.INTEGER,
allowNull: false,
},
});

module.exports = User;
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ require("dotenv").config();
const bodyParser = require("body-parser");
const cors = require("cors");
const routes = require("./src/routes/routes.js");
const { dbconnect } = require("./src/database/dblogic.js");
const dbconnect = require("./database/helpers/dbconnect");

const app = express();
app.use(express.static("public"));
Expand Down
Loading