Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
2021-155
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
2021-155
2021-155
Commits
19890737
Commit
19890737
authored
Oct 16, 2021
by
Kamal Thennakoon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update createUser controller
parent
dc14d909
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
118 additions
and
18 deletions
+118
-18
portfolio-backend/controllers/user-controller.js
portfolio-backend/controllers/user-controller.js
+118
-18
No files found.
portfolio-backend/controllers/user-controller.js
View file @
19890737
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
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment