Skip to content
This repository was archived by the owner on Dec 5, 2020. It is now read-only.
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
53 changes: 53 additions & 0 deletions migrations/20200729065404-add-multi-language-table.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
'use strict';

var dbm;
var type;
var seed;
var fs = require('fs');
var path = require('path');
var Promise;

/**
* We receive the dbmigrate dependency from dbmigrate initially.
* This enables us to not have to rely on NODE_PATH.
*/
exports.setup = function(options, seedLink) {
dbm = options.dbmigrate;
type = dbm.dataType;
seed = seedLink;
Promise = options.Promise;
};

exports.up = function(db) {
var filePath = path.join(__dirname, 'sqls', '20200729065404-add-multi-language-table-up.sql');
return new Promise( function( resolve, reject ) {
fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
if (err) return reject(err);
console.log('received data: ' + data);

resolve(data);
});
})
.then(function(data) {
return db.runSql(data);
});
};

exports.down = function(db) {
var filePath = path.join(__dirname, 'sqls', '20200729065404-add-multi-language-table-down.sql');
return new Promise( function( resolve, reject ) {
fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
if (err) return reject(err);
console.log('received data: ' + data);

resolve(data);
});
})
.then(function(data) {
return db.runSql(data);
});
};

exports._meta = {
"version": 1
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/* Replace with your SQL commands */

DROP TABLE language_preference;
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/* Replace with your SQL commands */

CREATE TABLE language_preference (
id INT GENERATED ALWAYS AS IDENTITY,
user_id INT,
selected_language VARCHAR(60) NULL,
PRIMARY KEY(id),
CONSTRAINT user_id FOREIGN KEY(user_id) REFERENCES users(id)
);
16 changes: 7 additions & 9 deletions src/controllers/courses/course-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ export default class CourseController {
.orderBy("exercises.sequence_num", "asc");
} else {
let xyz =
"(SELECT max(submissions.id) FROM submissions WHERE exercise_id = exercises.id " +
"(SELECT id FROM submissions WHERE exercise_id = exercises.id " +
"AND user_id = " +
request.user_id +
" ORDER BY state ASC LIMIT 1)";
Expand Down Expand Up @@ -176,7 +176,6 @@ export default class CourseController {
.where({ "exercises.course_id": request.params.courseId })
.orderBy("exercises.sequence_num", "asc");
}

query.then(rows => {
let exercise = rows[0];
for (let i = 0; i < rows.length; i++) {
Expand Down Expand Up @@ -208,7 +207,9 @@ export default class CourseController {
}
}
resolve({ data: exercises });
});
}).catch((err) => {
console.log(err)
})
});
}

Expand Down Expand Up @@ -273,13 +274,12 @@ export default class CourseController {
)
.where({ "exercises.slug": request.query.slug });
exerciseQuery.then(rows => {
rows[0].content = rows[0].content.match(/hi_text/g) ? JSON.parse(rows[0].content): rows[0].content;
resolve(rows[0]);


});
} else {
let xyz =
"(SELECT max(submissions.id) FROM submissions WHERE exercise_id = exercises.id " +
"(SELECT id FROM submissions WHERE exercise_id = exercises.id " +
"AND user_id = " +
request.user_id +
" ORDER BY state ASC LIMIT 1)";
Expand Down Expand Up @@ -526,9 +526,7 @@ export default class CourseController {
.then((rows) => {
// here we getting the role of user
const isAdmin =
rows.length > 0 && getUserRoles(rows).isAdmin === true
? true
: false;
rows.length > 0 && getUserRoles(rows).isAdmin === true ? true : false;
if (isAdmin === false) {
reject(
Boom.expectationFailed(
Expand Down
2 changes: 1 addition & 1 deletion src/controllers/courses/course-routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export default function (server: Hapi.Server, serverConfigs: IServerConfiguratio

server.route({
method: 'POST',
path: '/updateCourses{name}',
path: '/updateCourses/{name}',
config: {
description: 'update the courses by Courses name',
validate: {
Expand Down
55 changes: 48 additions & 7 deletions src/controllers/users/user-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { IServerConfigurations } from "../../configurations";
// import { NotesModel } from "../../models/notes-model";

import { UserModel } from "../../models/user-model";

import { SelectLanguageModel } from "../../models/select-language-model";
import * as fs from "fs";
import * as Boom from "boom";
import * as nconf from "nconf";
Expand All @@ -28,12 +28,14 @@ export default class UserController {
private configs: IServerConfigurations;
private database: any;
private userModel: UserModel;
private selectLanguageModel: SelectLanguageModel;
// private notesModel: NotesModel;

constructor(configs: IServerConfigurations, database: any) {
this.database = database;
this.configs = configs;
this.userModel = new UserModel(this.configs);
this.selectLanguageModel = new SelectLanguageModel(this.configs);
// this.notesModel = new NotesModel(this.configs);


Expand Down Expand Up @@ -206,15 +208,24 @@ export default class UserController {
});
}
})
.then((user) => {

.then( async (user) => {

const selected_language = await database('language_preference')
.select("*")
.where({'user_id': user.id})
return {
user,
selected_language
}
})
.then((userDetails) => {
const { selected_language, user } = userDetails;
resolve({
'user': user,
'jwt': this.userModel.getJWTToken(user)
'jwt': this.userModel.getJWTToken(user),
'selected_language': selected_language.length ? selected_language[0].selected_language : 'hi'
});


});
})

});
});
Expand Down Expand Up @@ -362,7 +373,37 @@ export default class UserController {
// });
// }

// Add or update users prefered language.
public addUpdatePreferedLanguage(request, h) {
const selectedLanguageObj = {
user_id: request.params.userId,
selected_language: request.payload.selected_language
}

return new Promise((resolve, rejects) => {
this.selectLanguageModel.upsert(selectedLanguageObj, { 'user_id': selectedLanguageObj['user_id'] }, true)
.then(() => {
resolve({
'status': true
});
}).catch(() => {
resolve({
'status': false
});
});
});
}

// get users prefered language.
public getPreferedLnaguageInfo(request, h) {
let user_id = request.params.userId;
return new Promise((resolve, reject) => {
this.selectLanguageModel.findOne({ user_id: user_id }).then(obj => {
resolve(obj);
});
});
}

public getGitHubAccessUrl(request, h) {
const email = request.params.email;
const githubAccessKey = serverConfigs.githubAccess;
Expand Down
55 changes: 53 additions & 2 deletions src/controllers/users/user-routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import * as Joi from "joi";
import { IServerConfigurations } from "../../configurations";

import UserController from "./user-controller";
import { noteSchema, userSchema } from "./user-schemas";
import { noteSchema, userSchema, languagePreferenceSchema } from "./user-schemas";
import * as Boom from 'boom';

export default function (server: Hapi.Server, serverConfigs: IServerConfigurations, database: any) {
Expand All @@ -30,7 +30,8 @@ export default function (server: Hapi.Server, serverConfigs: IServerConfiguratio
"user": userSchema,
"jwt": Joi.string().required()
.default("xxx.yyy.zzz")
.description("Will authenticate all the future requests.")
.description("Will authenticate all the future requests."),
"selected_language": Joi.string()
})
},
plugins: {
Expand Down Expand Up @@ -290,4 +291,54 @@ export default function (server: Hapi.Server, serverConfigs: IServerConfiguratio
handler: userController.getGitHubAccessUrl,
}
});

server.route({
method: 'POST',
path: '/users/{userId}/selected_language',
config: {
description: 'Select language according to the user preference.',
validate: {
params: {
userId: Joi.number().required(),
},
payload: Joi.object({
selected_language: Joi.string().required()
})
},
response: {
schema: {
status: Joi.bool().required()
}
},
plugins: {
'hapi-swagger': {
responses: {
'201': {
'description': 'successfully added selected language as prefered language.'
}
}
}
},
tags: ['api'],
handler: userController.addUpdatePreferedLanguage
}
});

server.route({
method: 'GET',
path: '/users/{userId}/selected_language',
config: {
description: 'Get users prefred language by user Id.',
validate: {
params: {
userId: Joi.number().required(),
}
},
response: {
schema: languagePreferenceSchema
},
tags: ['api'],
handler: userController.getPreferedLnaguageInfo,
}
});
}
6 changes: 6 additions & 0 deletions src/controllers/users/user-schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,9 @@ export const userRoleSchema: Joi.ObjectSchema = Joi.object({
mentor: Joi.allow(null),
mentee: Joi.number().allow(null),
});

export const languagePreferenceSchema: Joi.ObjectSchema = Joi.object({
id: Joi.number(),
user_id: Joi.number(),
selected_language: Joi.string()
});
16 changes: 16 additions & 0 deletions src/models/select-language-model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//ignore this
// import * as Mongoose from "mongoose";
import database from '../index';
import DBTable from './dbtable';

import {IServerConfigurations} from "../configurations/index";

export class SelectLanguageModel extends DBTable {
configs: any;

constructor(configs: IServerConfigurations) {
super(database, "language_preference");
this.configs = configs;
}

}
2 changes: 2 additions & 0 deletions src/seed-courses/globals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ var courseDir, // Path of the course directory relative to this file
revSeqNumbers = {},
toReadFiles = [],
course_id,
multi_languge = ["hi", "en", "te", "ta"],
defaultCourseLogo = "http://navgurukul.org/img/sqlogo.jpg";

export {
Expand All @@ -18,5 +19,6 @@ export {
revSeqNumbers,
toReadFiles,
course_id,
multi_languge,
defaultCourseLogo
}
Loading