Commit 19890737 authored by Kamal Thennakoon's avatar Kamal Thennakoon

update createUser controller

parent dc14d909
const { default: axios } = require("axios");
const {
getGithubInfo,
checkGitUserAvailability,
} = require("../actions/shared-action");
const HttpError = require("../helpers/http-error");
const User = require("../models/user");
const { spawn } = require('child_process');
const path=require('path');
const checkUserAvailabity = async (req, res, next) => {
const reqUsername = req.params.username;
const username=reqUsername.toLowerCase();
const reqUsername = req.params.username;
const username = reqUsername.toLowerCase();
try {
const user = await User.findOne({ username });
console.log(username);
if (user) {
const gitInfo = await getGithubInfo(username);
return res.status(200).json({
msg: "User portfolio exists",
info: gitInfo,
valid: true,
});
} else {
......@@ -40,8 +48,10 @@ const getAllUserNames = async (req, res, next) => {
const sortedLeaderboardUsers = async (req, res, next) => {
let usernames;
try {
usernames = await User.find().select("username name git_points").sort({git_points:-1});
usernames = await User.find()
.select("username name coding")
.sort({ "coding.points": -1 });
res.status(201).json(usernames);
} catch (err) {
res.status(302).json({ msg: "something went wrong::", err });
......@@ -49,8 +59,8 @@ const sortedLeaderboardUsers = async (req, res, next) => {
};
const createUser = async (req, res, next) => {
const reqUsername = req.params.username;
const username=reqUsername.toLowerCase();
const reqUsername = req.params.username;
const username = reqUsername.toLowerCase();
let user;
try {
user = await User.findOne({ username });
......@@ -58,12 +68,67 @@ const createUser = async (req, res, next) => {
console.log("user already exists");
return res.status(201).json({ msg: "user exists", valid: false });
} else {
user = new User({
username,
// call github graphql api
const gitInfo = await getGithubInfo(username);
let newUser = new User();
// cal stof scrapper
// call stackoverflow web scrapper
const pythonScript = spawn("python", [
path.join(__dirname, "..", "python", "portfolio", "main.py"),newUser._id,'351048'
]);
pythonScript.stdout.on("data", (data) => {
console.log("Python test output", data.toString());
});
await user.save();
pythonScript.stdout.on("end", () => {
console.log("Python script has finshed executing");
});
newUser.username = username.toLowerCase();
newUser.name = gitInfo.stats.name;
newUser.avatar_url = gitInfo.userBio.avatar_url;
newUser.bio = gitInfo.userBio.bio;
newUser.company = gitInfo.userBio.company;
newUser.location = gitInfo.userBio.location;
newUser.created_at = gitInfo.userBio.created_at;
newUser.coding.level = gitInfo.stats.rank.level;
newUser.coding.score = gitInfo.stats.rank.score;
newUser.coding.badge = gitInfo.stats.rank.badge;
newUser.coding.points = gitInfo.stats.rank.points;
newUser.total_prs = gitInfo.stats.totalPRs;
newUser.total_issues = gitInfo.stats.totalIssues;
newUser.total_stars = gitInfo.stats.totalStars;
newUser.total_commits = gitInfo.stats.totalCommits;
newUser.contributed_to = gitInfo.stats.contributedTo;
newUser.total_repos = gitInfo.stats.totalRepositories;
newUser.total_followers = gitInfo.stats.followers;
newUser.is_hireable = gitInfo.stats.isHireable;
newUser.contribute_high_repos = gitInfo.stats.highRepos;
newUser.contribute_mid_repos = gitInfo.stats.midRepos;
newUser.contribute_low_repos = gitInfo.stats.lowRepos;
newUser.individual_high_repos = gitInfo.stats.highIndividualRepos;
newUser.individual_mid_repos = gitInfo.stats.midIndividualRepos;
newUser.individual_low_repos = gitInfo.stats.lowIndividualRepos;
newUser.profile_age = gitInfo.stats.profileAge;
newUser.total_discussions = gitInfo.stats.totalDiscussions;
newUser.answered_discussions = gitInfo.stats.answeredDiscussions;
// languages
if (gitInfo.toLang !== null) {
Object.values(gitInfo.topLang).forEach((lang) => {
newUser.git_langs.push({ name: lang.name, lines: lang.size });
});
}
newUser.latest_update = Date.now();
const userRes = await newUser.save();
console.log("mongoResponse:", userRes);
return res.status(201).json({
msg: "user has been created successfully",
response: userRes,
valid: true,
});
}
......@@ -76,6 +141,41 @@ const createUser = async (req, res, next) => {
}
};
const getUserById = async (req, res, next) => {
const { uname } = req.params;
let selectedPortfolio;
try {
selectedPortfolio = await User.findOne({ username: uname });
if (!selectedPortfolio) {
return res.status(404).json({
msg: `Oops! User not found`,
});
} else {
return res.status(200).json({
portfolio: selectedPortfolio,
});
}
} catch (err) {
console.log("error:", err);
return res.status(302).json({
msg: `Snap! Error: ${err}`,
});
}
};
// // check whether git account available or not via github vercel serverless api
const checkGitAccountAvailability = async (req, res, next) => {
const username = req.params.username;
try {
const gitInfo = await checkGitUserAvailability(username);
return res.status(200).json(gitInfo);
} catch (err) {
return res
.status(406)
.json({ msg: `something went wrong: ${err}`, valid: false });
}
};
const saveUserGitInfo = async (req, res, next) => {
const {
username,
......@@ -96,13 +196,13 @@ const saveUserGitInfo = async (req, res, next) => {
contributed_to,
} = req.body;
console.log("retrived Data set", req.body);
const lowercasedUser=username.toLowerCase();
const lowercasedUser = username.toLowerCase();
try {
console.log('lowerCasedUser',lowercasedUser);
let user = await User.findOne({ username:lowercasedUser });
console.log('user info:',user)
console.log("lowerCasedUser", lowercasedUser);
let user = await User.findOne({ username: lowercasedUser });
console.log("user info:", user);
if (user) {
// update user
user.username = username.toLowerCase();
......@@ -128,7 +228,7 @@ const saveUserGitInfo = async (req, res, next) => {
msg: "user has been updated successfully!",
});
} else {
console.log('You have taken the wrong route to create the user');
console.log("You have taken the wrong route to create the user");
return res.status(201).json({
msg: "You have taken the wrong route to create the user",
});
......@@ -138,8 +238,6 @@ const saveUserGitInfo = async (req, res, next) => {
}
};
// deprecated (only for dev purposes)
const getUserInfo = async (req, res, next) => {
const url = "https://api.github.com/users/dasunx";
......@@ -201,4 +299,6 @@ exports.saveUserGitInfo = saveUserGitInfo;
exports.checkUserAvailabity = checkUserAvailabity;
exports.createUser = createUser;
exports.getAllUserNames = getAllUserNames;
exports.sortedLeaderboardUsers=sortedLeaderboardUsers;
\ No newline at end of file
exports.sortedLeaderboardUsers = sortedLeaderboardUsers;
exports.getUserById = getUserById;
exports.checkGitAccountAvailability = checkGitAccountAvailability;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment