Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

introduce cockroachdb #411

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
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
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,10 @@ DATABASE_NAME=<database name>
DATABASE_USERNAME=<database username>
DATABASE_PASSWORD=<database password>
DATABASE_HOST=<database server>
DATABASE_PORT=<database port | default 5432>
DATABASE_DB=<**cockroach** or **postgres** | default **postgres**>
FRONTEND_URL=<url of your frontend>
AUTH_METHOD=<**local** or **cognito**>
AUTH_METHOD=<**local** or **cognito** | default **local**>
COGNITO_REGION=<required only if using cognito auth method>
COGNITO_POOL_ID=<required only if using cognito auth method>
COGNITO_CLIENT_ID=<required only if using cognito auth method>
Expand Down
1 change: 1 addition & 0 deletions api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"pg": "^8.5.1",
"pg-hstore": "^2.3.3",
"sequelize": "^6.6.2",
"sequelize-cockroachdb": "^6.0.1",
"sharp": "^0.28.3",
"shortid": "^2.2.16"
},
Expand Down
1 change: 1 addition & 0 deletions api/src/config/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ module.exports = {
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME,
host: process.env.DATABASE_HOST,
port: process.env.DATABASE_PORT || 5432,
dialect: 'postgres'
}
}
3 changes: 2 additions & 1 deletion api/src/config/database.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const { Sequelize } = require('sequelize')
const { Sequelize } = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')

module.exports = new Sequelize(process.env.DATABASE_NAME, process.env.DATABASE_USERNAME, process.env.DATABASE_PASSWORD, {
host: process.env.DATABASE_HOST,
port: process.env.DATABASE_PORT || 5432,
dialect: 'postgres'
})
2 changes: 1 addition & 1 deletion api/src/controllers/calendarController.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const Calendar = require('../models/calendarModel')
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const Op = Sequelize.Op

// @desc Fetch all calendars events
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/collectionController.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const Collection = require('../models/collectionModel')
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const Op = Sequelize.Op

// @desc Fetch all collection
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/communityController.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const db = require('../models')
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const { sequelize } = require('../models')
const Op = Sequelize.Op
const { changeFormat } = require('../helpers/filehelpers')
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/communityGroupController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const Op = Sequelize.Op
const db = require('../models')
const { changeFormat } = require('../helpers/filehelpers')
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/courseController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const Op = Sequelize.Op
const db = require('../models')
const NotFoundError = require('../errors/notFoundError')
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/enterpriseUserController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { Op } = require('sequelize')
const { Op } = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const db = require('../models')

// @desc Get the enterprises-users
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/enterprisesController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const Op = Sequelize.Op
const db = require('../models')
const { changeFormat } = require('../helpers/filehelpers')
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/groupUserController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { Op } = require('sequelize')
const { Op } = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const db = require('../models')

// @desc Get the groups-users
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/newsController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const db = require('../models')
const Op = Sequelize.Op
const { changeFormat } = require('../helpers/filehelpers')
Expand Down
63 changes: 29 additions & 34 deletions api/src/controllers/questionController.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// const Question = require('../models/questionModel')
const db = require('../models/index')
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const Op = Sequelize.Op
const sequelize = require('../config/database.js')
const { fn, col } = sequelize
Expand All @@ -23,31 +23,29 @@ const getQuestions = (req, res) => {
const getLessonQuestions = async (req, res) => {
try {
const pageSize = 10
const page = Number(req.query.pageNumber) || 0
const order = req.query.order || 'ASC'
const ordervalue = order && [['question', order]]

const test = await db.Test.findOne({where: {lessonId: req.params.id}});
const page = Number(req.query.pageNumber) || 0
const order = req.query.order || 'ASC'
const ordervalue = order && [['question', order]]

if(!test) return res.json({message: 'test doesn\'t exist.'})
const test = await db.Test.findOne({ where: { lessonId: req.params.id } })

const newquestions = await db.Question.findAll({ offset: page, limit: pageSize, order: [['position', "ASC"]], where: {testId: test.id} })
if (!test) return res.json({ message: 'test doesn\'t exist.' })

const questions = newquestions.map(item => {
if(item.type === "mcq") {
item.options = item.options.filter(el => el !== item.answer)
}
return item;
})
const newquestions = await db.Question.findAll({ offset: page, limit: pageSize, order: [['position', 'ASC']], where: { testId: test.id } })

res.json({ questions, page, pageSize }).status(200)
const questions = newquestions.map(item => {
if (item.type === 'mcq') {
item.options = item.options.filter(el => el !== item.answer)
}
return item
})

res.json({ questions, page, pageSize }).status(200)
} catch (error) {
res.json(error);
res.json(error)
}
}


// randomize the answers
function randomAnswer (array) {
let currentIndex = array.length; let temporaryValue; let randomIndex
Expand All @@ -71,17 +69,16 @@ const getTestQuestions = (req, res) => {
db.Question.findAll({
offset: page,
limit: pageSize,
order: [['position', "ASC"]],
order: [['position', 'ASC']],
where: {
testId: req.params.id
},
attributes: ['options', 'question', 'type']
})
.then(questions => {
if (questions) {

questions.forEach(item => {
if(item.type === "mcq") randomAnswer(item.options)
if (item.type === 'mcq') randomAnswer(item.options)
})

// let newOptions = randomArrayShuffle(options);
Expand Down Expand Up @@ -117,26 +114,24 @@ const addQuestion = (req, res) => {
// @route PUT /api/question/:id
// @access Public
const updateQuestion = async (req, res) => {

try {
const {
question, answer, options, testId, type
} = req.body
const id = req.params.id
const {
question, answer, options, testId, type
} = req.body
const id = req.params.id

const questionExist = await db.Question.findByPk(id);
const questionExist = await db.Question.findByPk(id)

if(!questionExist) return res.json({message: 'Question doesn\'t exist'});
if (!questionExist) return res.json({ message: 'Question doesn\'t exist' })

if(questionExist.type === "subjective") {
await db.Question.update({question, testId, type}, {where: {id}})
return res.json({message: 'Question updated !!!'}).status(200)
}

await db.Question.update({question, answer, options: [...options, answer], testId, type}, {where: {id}})
if (questionExist.type === 'subjective') {
await db.Question.update({ question, testId, type }, { where: { id } })
return res.json({ message: 'Question updated !!!' }).status(200)
}

return res.json({message: 'Question updated !!!'}).status(200)
await db.Question.update({ question, answer, options: [...options, answer], testId, type }, { where: { id } })

return res.json({ message: 'Question updated !!!' }).status(200)
} catch (error) {
res.json(error)
}
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/resourceController.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const Resource = require('../models/resourceModel.js')
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const Op = Sequelize.Op
const { changeFormat } = require('../helpers/filehelpers')

Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/testController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const Op = Sequelize.Op
const db = require('../models')
// @desc Fetch all tests
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/userController.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const generateToken = require('../utils/generateToken.js')
const db = require('../models')
const Amplify = require('aws-amplify').Amplify
const Auth = require('aws-amplify').Auth
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
// const User = require('../models/userModel.js')
// const LocalAuth = require('../models/localAuthModel.js')
const Op = Sequelize.Op
Expand Down
2 changes: 1 addition & 1 deletion api/src/controllers/userTestController.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const db = require('../models/index')
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')

// @desc Fetch all tests
// @route GET /api/user_tests/lesson/:lessonId
Expand Down
6 changes: 3 additions & 3 deletions api/src/migrations/20210709110431-alter-user-test-tbl.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
'use strict';
'use strict'

module.exports = {
up: async (queryInterface, Sequelize) => {
Expand All @@ -11,7 +11,7 @@ module.exports = {
},

down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('users_tests', 'total_marks')
await queryInterface.removeColumn('users_tests', 'total_marks')
await queryInterface.removeColumn('users_tests', 'is_passed')
}
};
}
6 changes: 3 additions & 3 deletions api/src/migrations/20210713063557-alter-question-tbl.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
'use strict';
'use strict'

module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('questions', 'type', {
await queryInterface.addColumn('questions', 'type', {
type: Sequelize.STRING
})
},

down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('questions', 'type')
}
};
}
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
'use strict';
'use strict'

module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('questions', "answer", {
await queryInterface.changeColumn('questions', 'answer', {
type: Sequelize.TEXT,
allowNull: true
allowNull: true
})
await queryInterface.changeColumn('questions', "options", {
await queryInterface.changeColumn('questions', 'options', {
type: Sequelize.ARRAY(Sequelize.TEXT),
allowNull: true
allowNull: true
})
await queryInterface.changeColumn('questions', "question", {
await queryInterface.changeColumn('questions', 'question', {
type: Sequelize.TEXT,
allowNull: false,
unique: false
})
},

down: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('questions', "answer", {
await queryInterface.changeColumn('questions', 'answer', {
type: Sequelize.TEXT,
allowNull: false
allowNull: false
})
await queryInterface.changeColumn('questions', "options", {
await queryInterface.changeColumn('questions', 'options', {
type: Sequelize.ARRAY(Sequelize.TEXT),
allowNull: false
allowNull: false
})
await queryInterface.changeColumn('questions', "question", {
await queryInterface.changeColumn('questions', 'question', {
type: Sequelize.TEXT,
allowNull: false,
unique: true
})
}
};
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
'use strict';
'use strict'

module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('questions', 'position', {
await queryInterface.addColumn('questions', 'position', {
type: Sequelize.INTEGER
})
},

down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('questions', 'position')
}
};
}
12 changes: 6 additions & 6 deletions api/src/migrations/20210716090113-create-user-test-answers.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
'use strict';
'use strict'

module.exports = {
up: async (queryInterface, Sequelize) => {
Expand All @@ -12,21 +12,21 @@ module.exports = {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: "users_tests",
model: 'users_tests',
key: 'id'
}
},
question: {
type: Sequelize.TEXT,
allowNull: false,
allowNull: false
},
answer: {
type: Sequelize.TEXT,
type: Sequelize.TEXT
}
})
},

down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('user_test_answers');
await queryInterface.dropTable('user_test_answers')
}
};
}
12 changes: 7 additions & 5 deletions api/src/migrations/20210726102757-alter-questions-constraint.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.removeConstraint('questions', 'questions_question_key')
await queryInterface.removeIndex('questions', ['question'], {
indexName: 'questions_question_key',
indicesType: 'UNIQUE'
})
},
down: async (queryInterface, Sequelize) => {
await queryInterface.addConstraint('questions', {
fields: ['question'],
type: 'unique',
name: 'questions_question_key'
await queryInterface.addIndex('questions', ['question'], {
indexName: 'questions_question_key',
indicesType: 'UNIQUE'
})
}
}
2 changes: 1 addition & 1 deletion api/src/models/calendarModel.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const db = require('../config/database.js')

const Calendar = db.define(
Expand Down
2 changes: 1 addition & 1 deletion api/src/models/categoryModel.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Sequelize = require('sequelize')
const Sequelize = process.env.DB === 'cockroach' ? require('sequelize-cockroachdb') : require('sequelize')
const db = require('../config/database.js')

const Category = db.define(
Expand Down
Loading