Commit b1063c95 authored by Kamal Thennakoon's avatar Kamal Thennakoon

create portfolio-user routes

parent a12e8dc4
......@@ -2,6 +2,145 @@ const { default: axios } = require("axios");
const HttpError = require("../helpers/http-error");
const User = require("../models/user");
const checkUserAvailabity = async (req, res, next) => {
const reqUsername = req.params.username;
const username=reqUsername.toLowerCase();
try {
const user = await User.findOne({ username });
console.log(username);
if (user) {
return res.status(200).json({
msg: "User portfolio exists",
valid: true,
});
} else {
return res.status(200).json({
msg: "No portfolio exists",
valid: false,
});
}
} catch (err) {
return res.status(304).json({
msg: "something else went wrong:",
err,
});
}
};
const getAllUserNames = async (req, res, next) => {
let usernames;
try {
usernames = await User.find().select("username");
res.status(201).json(usernames);
} catch (err) {
res.status(302).json({ msg: "something went wrong::", err });
}
};
const sortedLeaderboardUsers = async (req, res, next) => {
let usernames;
try {
usernames = await User.find().select("username name git_points").sort({git_points:-1});
res.status(201).json(usernames);
} catch (err) {
res.status(302).json({ msg: "something went wrong::", err });
}
};
const createUser = async (req, res, next) => {
const reqUsername = req.params.username;
const username=reqUsername.toLowerCase();
let user;
try {
user = await User.findOne({ username });
if (user) {
console.log("user already exists");
return res.status(201).json({ msg: "user exists", valid: false });
} else {
user = new User({
username,
});
await user.save();
return res.status(201).json({
msg: "user has been created successfully",
valid: true,
});
}
} catch (err) {
console.log("error:", err);
return res.status(302).json({
msg: `something went wrong:${err}`,
valid: false,
});
}
};
const saveUserGitInfo = async (req, res, next) => {
const {
username,
name,
avatar_url,
bio,
company,
location,
created_at,
git_level,
git_score,
git_badge,
git_points,
total_prs,
total_commits,
total_issues,
total_stars,
contributed_to,
} = req.body;
console.log("retrived Data set", req.body);
const lowercasedUser=username.toLowerCase();
try {
console.log('lowerCasedUser',lowercasedUser);
let user = await User.findOne({ username:lowercasedUser });
console.log('user info:',user)
if (user) {
// update user
user.username = username.toLowerCase();
user.name = name;
user.avatar_url = avatar_url;
user.bio = bio;
user.company = company;
user.location = location;
user.created_at = created_at;
user.git_level = git_level;
user.git_score = git_score;
user.git_badge = git_badge;
user.git_points = git_points;
user.total_prs = total_prs;
user.total_issues = total_issues;
user.total_stars = total_stars;
user.total_commits = total_commits;
user.contributed_to = contributed_to;
user.latestUpdate = Date.now();
await user.save();
return res.status(202).json({
msg: "user has been updated successfully!",
});
} else {
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",
});
}
} catch (err) {
return res.status(500).send("Server issue: " + err);
}
};
// deprecated (only for dev purposes)
const getUserInfo = async (req, res, next) => {
const url = "https://api.github.com/users/dasunx";
const response = await axios.get(url);
......@@ -57,41 +196,9 @@ const getUserInfo = async (req, res, next) => {
}
};
const saveUserGitInfo = async (req, res, next) => {
const { name, username, avatar_url, level, score } = req.body;
console.log('retrived Data set',req.body)
try {
let user = await User.findOne({ username });
if (user) {
// update user instead
user.username=username;
user.name=name;
user.avatar_url=avatar_url,
user.level=level,
user.score=score,
user.latestUpdate=Date.now()
await user.save();
return res.status(202).json({
msg:"user has been updated successfully!"
})
} else {
const newUser = new User({
username,
name,
avatar_url,
level,
score,
latestUpdate:Date.now()
});
await newUser.save();
return res.status(201).json({
msg:"user has been created successfully!"
})
}
} catch (err) {
return res.status(500).send("Server issue: " + err);
}
};
exports.getUserInfo = getUserInfo;
exports.saveUserGitInfo = saveUserGitInfo;
exports.checkUserAvailabity = checkUserAvailabity;
exports.createUser = createUser;
exports.getAllUserNames = getAllUserNames;
exports.sortedLeaderboardUsers=sortedLeaderboardUsers;
\ No newline at end of file
......@@ -4,19 +4,21 @@ const Schema=mongoose.Schema;
const userSchema=new Schema({
username:{type:String,required:true,unique:true},
name:{type:String,required:true},
name:{type:String},
avatar_url:{type:String},
location:{type:String},
level:{type:String},
score:{type:Number},
blog:{type:String},
bio:{type:String},
total_star_received:{type:Number},
total_public_repos:{type:Number},
company:{type:String},
location:{type:String},
created_at:{type:String},
git_level:{type:Number},
git_score:{type:Number},
git_badge:{type:String},
git_points:{type:Number},
total_prs:{type:Number},
total_commits:{type:Number},
total_issues:{type:Number},
total_stars:{type:Number},
contributed_to:{type:Number},
git_rank:{type:String},
git_score:{type:Number},
latestUpdate:{type:Date}
})
userSchema.plugin(uniqueValidator);
......
const express=require('express');
const { getUserInfo, saveUserGitInfo } = require('../controllers/user-controller');
const { getUserInfo, saveUserGitInfo, checkUserAvailabity, createUser, getAllUserNames, sortedLeaderboardUsers } = require('../controllers/user-controller');
const router=express.Router();
router.get('/get-all-usernames',getAllUserNames);
router.get('/get-info',getUserInfo);
router.get('/check-availability/:username',checkUserAvailabity);
router.get('/getSortedUsers',sortedLeaderboardUsers)
router.post('/create/:username',createUser);
router.post('/save-git-info',saveUserGitInfo);
module.exports=router;
\ No newline at end of file
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