Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
3fa096f
Editted user modal/migration and seeder from template, and set restri…
DarianRushworth Aug 24, 2020
e071628
Model and migration setup for exercises, with restrictions
DarianRushworth Aug 24, 2020
c93d83b
Model and migration setup for completed exercises, with restrictions
DarianRushworth Aug 24, 2020
a5aeb0a
Relation for user setup
DarianRushworth Aug 24, 2020
c52be14
Relation for exercise setup
DarianRushworth Aug 24, 2020
8ed7f23
Added seeder files
DarianRushworth Aug 24, 2020
a23a5cf
Seeders setup for exercises and completed exercises, all migrated well
DarianRushworth Aug 24, 2020
10ff1ca
Hiding DB url
DarianRushworth Aug 24, 2020
709445f
Hiding Port
DarianRushworth Aug 24, 2020
983eedb
GET router for exercises setup
DarianRushworth Aug 24, 2020
e43f6a1
Router completed for Redo and first time completion
DarianRushworth Aug 24, 2020
0dc1f88
Profile router setup
DarianRushworth Aug 24, 2020
42c4e16
Router setup for Profile page
DarianRushworth Aug 24, 2020
724e57f
Router setup for fastest times within specific exercise
DarianRushworth Aug 24, 2020
7cb57d2
Merge pull request #2 from codeMonkeyMasters/darian-Routers
StephBerg86 Aug 25, 2020
b58cc65
Added total exp to users
DarianRushworth Aug 25, 2020
0559432
Setup two new models
DarianRushworth Aug 25, 2020
0e0ce28
Restrictions set in place and relations setup
DarianRushworth Aug 25, 2020
2d627c7
Seeders setup, awaiting information, relations editted and running sm…
DarianRushworth Aug 25, 2020
891a630
Router added for quiz questions, edit on other PATCH router
DarianRushworth Aug 25, 2020
f907ed9
Adding proper questions to seeders
DarianRushworth Aug 25, 2020
28708d0
Quiz questions set in models
DarianRushworth Aug 25, 2020
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
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
/node_modules
/node_modules
.env
6 changes: 4 additions & 2 deletions config/config.json → config/config.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
{
require("dotenv").config()

module.exports = {
"development": {
"url": "YOUR_ELEPHANTSQL_URL_HERE",
"url": process.env.DATABASE_URL_DEV,
"dialect": "postgres",
"operatorsAliases": "0"
},
Expand Down
2 changes: 1 addition & 1 deletion config/constants.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module.exports = {
SALT_ROUNDS: 10,
PORT: process.env.PORT || 4000
PORT: process.env.PORT || 4000,
};
11 changes: 6 additions & 5 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
require("dotenv").config()

const express = require("express");
const loggerMiddleWare = require("morgan");
const corsMiddleWare = require("cors");
const { PORT } = require("./config/constants");
const authRouter = require("./routers/auth");
const authMiddleWare = require("./auth/middleware");
const exercises = require("./routers/exercisesRouter")
const profile = require("./routers/ProfileRouter")

const app = express();

Expand Down Expand Up @@ -113,11 +117,8 @@ if (process.env.DELAY) {
*
*/

/**
* Routes
*
* Define your routes here (now that middlewares are configured)
*/
app.use("/exercises", exercises)
app.use("/profile", profile)

// GET endpoint for testing purposes, can be removed
app.get("/", (req, res) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ module.exports = {
primaryKey: true,
type: Sequelize.INTEGER,
},
name: {
fullName: {
type: Sequelize.STRING,
allowNull: false,
},
image : {
type: Sequelize.STRING,
allowNull: false,
},
Expand All @@ -21,6 +25,14 @@ module.exports = {
type: Sequelize.STRING,
allowNull: false,
},
ranking: {
type: Sequelize.STRING,
allowNull: false,
},
totalExp: {
type: Sequelize.INTEGER,
allowNull: false,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
Expand Down
32 changes: 32 additions & 0 deletions migrations/1-create-exercise.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('exercises', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
name: {
type: Sequelize.STRING,
allowNull: false,
},
content: {
type: Sequelize.TEXT,
allowNull: false,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('exercises');
}
};
52 changes: 52 additions & 0 deletions migrations/2-create-completed-exercise.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('completedExercises', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
userId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: "users",
key: "id",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
},
exerciseId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: "exercises",
key: "id",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
},
timeTaken: {
type: Sequelize.TIME,
allowNull: false,
},
exp: {
type: Sequelize.INTEGER,
allowNull: false,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('completedExercises');
}
};
54 changes: 54 additions & 0 deletions migrations/3-create-quiz-question.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('quizQuestions', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
question: {
type: Sequelize.TEXT,
allowNull: false,
},
answer: {
type: Sequelize.TEXT,
allowNull: false,
},
incorrect1: {
type: Sequelize.TEXT,
allowNull: false,
},
incorrect2: {
type: Sequelize.TEXT,
allowNull: false,
},
incorrect3: {
type: Sequelize.TEXT,
allowNull: false,
},
exerciseId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: "exercises",
key: "id",
},
onUpdate: "CASCADE",
onDelete: "SET NULL",
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('quizQuestions');
}
};
48 changes: 48 additions & 0 deletions migrations/4-create-completed-quiz.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('completedQuizzes', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
userId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: "users",
key: "id",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
},
quizQuestionId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: "quizQuestions",
key: "id",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
},
exp: {
type: Sequelize.INTEGER,
allowNull: false,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('completedQuizzes');
}
};
50 changes: 50 additions & 0 deletions models/completedexercise.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class completedExercise extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
};
completedExercise.init({
userId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: "users",
key: "id",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
},
exerciseId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: "exercises",
key: "id",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
},
timeTaken: {
type: DataTypes.TIME,
allowNull: false,
},
exp: {
type: DataTypes.INTEGER,
allowNull: false,
}
}, {
sequelize,
modelName: 'completedExercise',
});
return completedExercise;
};
46 changes: 46 additions & 0 deletions models/completedquiz.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class completedQuiz extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
};
completedQuiz.init({
userId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: "users",
key: "id",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
},
quizQuestionId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: "quizQuestions",
key: "id",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
},
exp: {
type: DataTypes.INTEGER,
allowNull: false,
}
}, {
sequelize,
modelName: 'completedQuiz',
});
return completedQuiz;
};
Loading