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
d73a4fb6
Commit
d73a4fb6
authored
Jul 03, 2021
by
Kamal Thennakoon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implement portfolio backend
parent
f888e3df
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
2006 additions
and
0 deletions
+2006
-0
portfolio-backend/app.js
portfolio-backend/app.js
+63
-0
portfolio-backend/controllers/user-controller.js
portfolio-backend/controllers/user-controller.js
+97
-0
portfolio-backend/models/user.js
portfolio-backend/models/user.js
+23
-0
portfolio-backend/package-lock.json
portfolio-backend/package-lock.json
+1783
-0
portfolio-backend/package.json
portfolio-backend/package.json
+33
-0
portfolio-backend/routes/user-routes.js
portfolio-backend/routes/user-routes.js
+7
-0
No files found.
portfolio-backend/app.js
0 → 100644
View file @
d73a4fb6
const
express
=
require
(
"
express
"
);
const
bodyParser
=
require
(
"
body-parser
"
);
const
mongoose
=
require
(
"
mongoose
"
);
const
cors
=
require
(
"
cors
"
);
const
morgan
=
require
(
'
morgan
'
)
require
(
"
dotenv
"
).
config
();
// imports (routes)
const
userRoutes
=
require
(
'
./routes/user-routes
'
);
const
HttpError
=
require
(
"
./helpers/http-error
"
);
// db connection
mongoose
.
connect
(
process
.
env
.
DATABASE
,
{
useNewUrlParser
:
true
,
useUnifiedTopology
:
true
,
useFindAndModify
:
false
,
useCreateIndex
:
true
})
.
then
(()
=>
{
console
.
log
(
"
DB connected!!!
"
);
})
.
catch
((
err
)
=>
{
console
.
log
(
err
);
});
const
app
=
express
();
// middlewares
app
.
use
(
morgan
(
'
dev
'
));
app
.
use
(
bodyParser
.
json
());
// cors error handler
if
(
process
.
env
.
NODE_ENV
===
"
development
"
)
{
app
.
use
(
cors
({
origin
:
`
${
process
.
env
.
CLIENT_URL
}
`
}));
}
else
{
app
.
use
(
cors
());
}
// routes middlewares
app
.
use
(
'
/api/user
'
,
userRoutes
);
// Error Handler
app
.
use
(()
=>
{
const
error
=
new
HttpError
(
"
page not found!
"
,
404
);
throw
error
;
});
app
.
use
((
error
,
req
,
res
,
next
)
=>
{
if
(
res
.
headerSent
)
{
// when headers already sent, we can't output a error. because response already sent. so just return next
return
next
(
error
);
}
res
.
status
(
error
.
code
||
500
);
res
.
json
({
error
:
error
.
message
||
"
An unknown error occurred !!
"
});
return
next
();
});
// port
const
port
=
process
.
env
.
PORT
||
8000
;
app
.
listen
(
port
,
()
=>
{
console
.
log
(
`server is running on port :
${
port
}
`
);
});
portfolio-backend/controllers/user-controller.js
0 → 100644
View file @
d73a4fb6
const
{
default
:
axios
}
=
require
(
"
axios
"
);
const
HttpError
=
require
(
"
../helpers/http-error
"
);
const
User
=
require
(
"
../models/user
"
);
const
getUserInfo
=
async
(
req
,
res
,
next
)
=>
{
const
url
=
"
https://api.github.com/users/dasunx
"
;
const
response
=
await
axios
.
get
(
url
);
const
result
=
await
response
.
data
;
let
repo_res
;
let
repo_data
;
let
user
;
if
(
result
)
{
user
=
{
username
:
result
.
login
,
name
:
result
.
name
,
avatar_url
:
result
.
avatar_url
||
null
,
location
:
result
.
location
,
blog
:
result
.
blog
||
null
,
bio
:
result
.
bio
||
null
,
};
if
(
result
.
repos_url
)
{
repo_res
=
await
axios
.
get
(
result
.
repos_url
);
repo_data
=
await
repo_res
.
data
;
// total_stargazer_count & repo count
let
total_star_received
=
0
;
let
total_public_repos
=
0
;
repo_data
.
map
((
r
)
=>
{
total_star_received
+=
r
.
stargazers_count
;
total_public_repos
++
;
});
userWithRepo
=
{
...
user
,
total_star_received
,
total_public_repos
};
}
// create user obj(mongo)
const
newUser
=
new
User
(
user
);
try
{
await
newUser
.
save
();
//saving in the db
}
catch
(
err
)
{
const
error
=
new
HttpError
(
"
Data hasn't been saved, reason:
"
+
err
,
500
);
return
next
(
error
);
}
res
.
status
(
200
).
json
({
userInfo
:
userWithRepo
,
msg
:
"
success
"
,
repos
:
repo_data
,
});
}
else
{
res
.
status
(
403
).
json
({
msg
:
"
something went wrong
"
,
});
}
};
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
;
portfolio-backend/models/user.js
0 → 100644
View file @
d73a4fb6
const
mongoose
=
require
(
'
mongoose
'
);
const
uniqueValidator
=
require
(
'
mongoose-unique-validator
'
);
const
Schema
=
mongoose
.
Schema
;
const
userSchema
=
new
Schema
({
username
:{
type
:
String
,
required
:
true
,
unique
:
true
},
name
:{
type
:
String
,
required
:
true
},
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
},
total_prs
:{
type
:
Number
},
contributed_to
:{
type
:
Number
},
git_rank
:{
type
:
String
},
git_score
:{
type
:
Number
},
latestUpdate
:{
type
:
Date
}
})
userSchema
.
plugin
(
uniqueValidator
);
module
.
exports
=
User
=
mongoose
.
model
(
'
User
'
,
userSchema
);
portfolio-backend/package-lock.json
0 → 100644
View file @
d73a4fb6
This diff is collapsed.
Click to expand it.
portfolio-backend/package.json
0 → 100644
View file @
d73a4fb6
{
"name"
:
"github-data-miner-be"
,
"version"
:
"1.0.0"
,
"description"
:
"This will gather github user informations"
,
"main"
:
"index.js"
,
"scripts"
:
{
"test"
:
"echo
\"
Error: no test specified
\"
&& exit 1"
,
"start"
:
"node app.js"
,
"dev"
:
"nodemon app.js"
},
"keywords"
:
[
"e-learning"
],
"author"
:
"tmKamal"
,
"license"
:
"ISC"
,
"dependencies"
:
{
"axios"
:
"^0.21.1"
,
"body-parser"
:
"^1.19.0"
,
"cors"
:
"^2.8.5"
,
"dotenv"
:
"^8.2.0"
,
"express"
:
"^4.17.1"
,
"express-jwt"
:
"^6.0.0"
,
"express-validator"
:
"^6.9.2"
,
"jsonwebtoken"
:
"^8.5.1"
,
"mongoose"
:
"^5.11.15"
,
"mongoose-unique-validator"
:
"^2.0.3"
,
"morgan"
:
"^1.10.0"
,
"slugify"
:
"^1.4.6"
},
"devDependencies"
:
{
"nodemon"
:
"^2.0.7"
}
}
portfolio-backend/routes/user-routes.js
0 → 100644
View file @
d73a4fb6
const
express
=
require
(
'
express
'
);
const
{
getUserInfo
,
saveUserGitInfo
}
=
require
(
'
../controllers/user-controller
'
);
const
router
=
express
.
Router
();
router
.
get
(
'
/get-info
'
,
getUserInfo
);
router
.
post
(
'
/save-git-info
'
,
saveUserGitInfo
);
module
.
exports
=
router
;
\ No newline at end of file
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