Skip to content

Commit

Permalink
Develop <> Master 2 (#51)
Browse files Browse the repository at this point in the history
* #167313388 configure eslint  (#2)

* chore(eslint) add eslint dev dependencies

add eslint config airbnbbase and eslint import pligin dependencies

[Start #167313388]

* chore(eslint) add .eslintrc file

[Continue #167313388]

* chore(eslint) delete unwanted folders

[Continue #167313388]

* chore(eslint) delete unwanted files

[Continue #167313388]

* chore(eslint) add eslint dev dependencies

add eslint config airbnbbase and eslint import pligin dependencies

[Start #167313388]

* chore(eslint) add .eslintrc file

[Continue #167313388]

* chore(eslint) delete unwanted files

[Continue #167313388]

* #167313386 Integrate TravisCI with readme badge (#3)

* chore(setup-travis-ci):Integrate TravisCI with readme badge [Finishes #167313386]

* chore(setup-travis-ci):Fix the failing travis [Finishes #167313386]

* chore(setup-travis-ci):Integrate travis CI with README  [Finishes #167313386]

* chore(setup-travis-ci):Change npm install to npm ci  [Finishes #167313386]

* chore(setup-travis-ci):Update the lock file  [Finishes #167313386]

* chore(configure postgres and sequelize): (#4)

Instlled sequelize
created src folder with config, migrations, models, seeds folders
configured postgres
created User model
Configured babel

[Finishes #167313387]
[Finishes #167595103]

* #167313394 Setup API documentation using swagger (#6)

* chore(api-doc): Setup API documentation using swagger

* chore(api documentation): Setup api documentation using swagger

  - create entry point of application in src/app.js
  - create swagger specification implementation in src/swagger.js
  - create api documentation endpoint in src/routes/api/inde.route.js
  - create 404 error route handler
  - create 500 error route handler
  - create pull request template

[Finishes #167313394]

* #167313389 Integrated HoundCi  (#5)

* chore(houndci):added .hound.yml[finished#1167313389]

* chore(houndci):added houndci badge[finishes#1167313389]

* chore(houndci):added added new line .hound.yml[finishes#1167313389]

* Ch api test setup 167313391 (#7)

* What does this PR do?

 Setup unit testing for the backend

Tasks to be accomplished

  - Add required dependancies for running tests
  - Create test directory with general test setup module
  - Update test running script
  - Test the index route

How to test the test setup

  - Clone this repo and run git checkout -b ch-api-test-setup-167313391
  - Run git pull ch-api-test-setup-167313391
  - Run npm test

Usage

  To add tests,
  - Open/Create a file for the given tests in the test directory, es test users
  - Import {chai, app} from ./test-setuo
  - Ensure that required modules/functions not in the test-setup package are imported from their respective sources
  - Write the test suite(s)/cases

Pivotal tracker story

  [finishes #167313391](https://www.pivotaltracker.com/story/show/167313391)

* What does this PR do?

 Setup unit testing for the backend

Tasks to be accomplished

  - Add required dependancies for running tests
  - Create test directory with general test setup module
  - Update test running script
  - Test the index route

How to test the test setup

  - Clone this repo and run git checkout -b ch-api-test-setup-167313391
  - Run git pull ch-api-test-setup-167313391
  - Run npm test

Usage

  To add tests,
  - Open/Create a file for the given tests in the test directory, es test users
  - Import {chai, app} from ./test-setuo
  - Ensure that required modules/functions not in the test-setup package are imported from their respective sources
  - Write the test suite(s)/cases

Pivotal tracker story

  [finishes #167313391](https://www.pivotaltracker.com/story/show/167313391)

* rename imported server

* fix index route response property name error and stream line server name

* Update package.json

* Update package.json

* modify test script to report coverage

* What does this PR do?

 Setup unit testing for the backend

Tasks to be accomplished

  - Add required dependancies for running tests
  - Create test directory with general test setup module
  - Update test running script
  - Test the index route

How to test the test setup

  - Clone this repo and run git checkout -b ch-api-test-setup-167313391
  - Run git pull ch-api-test-setup-167313391
  - Run npm test

Usage

  To add tests,
  - Open/Create a file for the given tests in the test directory, es test users
  - Import {chai, app} from ./test-setuo
  - Ensure that required modules/functions not in the test-setup package are imported from their respective sources
  - Write the test suite(s)/cases

Pivotal tracker story

  [finishes #167313391](https://www.pivotaltracker.com/story/show/167313391)

* What does this PR do?

 Setup unit testing for the backend

Tasks to be accomplished

  - Add required dependancies for running tests
  - Create test directory with general test setup module
  - Update test running script
  - Test the index route

How to test the test setup

  - Clone this repo and run git checkout -b ch-api-test-setup-167313391
  - Run git pull ch-api-test-setup-167313391
  - Run npm test

Usage

  To add tests,
  - Open/Create a file for the given tests in the test directory, es test users
  - Import {chai, app} from ./test-setuo
  - Ensure that required modules/functions not in the test-setup package are imported from their respective sources
  - Write the test suite(s)/cases

Pivotal tracker story

  [finishes #167313391](https://www.pivotaltracker.com/story/show/167313391)

* rename imported server

* fix index route response property name error and stream line server name

* Update package.json

* modify test script to report coverage

* #167313389 Integrated HoundCi  (#5)

* chore(houndci):added .hound.yml[finished#1167313389]

* chore(houndci):added houndci badge[finishes#1167313389]

* chore(houndci):added added new line .hound.yml[finishes#1167313389]

* What does this PR do?

 Setup unit testing for the backend

Tasks to be accomplished

  - Add required dependancies for running tests
  - Create test directory with general test setup module
  - Update test running script
  - Test the index route

How to test the test setup

  - Clone this repo and run git checkout -b ch-api-test-setup-167313391
  - Run git pull ch-api-test-setup-167313391
  - Run npm test

Usage

  To add tests,
  - Open/Create a file for the given tests in the test directory, es test users
  - Import {chai, app} from ./test-setuo
  - Ensure that required modules/functions not in the test-setup package are imported from their respective sources
  - Write the test suite(s)/cases

Pivotal tracker story

  [finishes #167313391](https://www.pivotaltracker.com/story/show/167313391)

* What does this PR do?

 Setup unit testing for the backend

Tasks to be accomplished

  - Add required dependancies for running tests
  - Create test directory with general test setup module
  - Update test running script
  - Test the index route

How to test the test setup

  - Clone this repo and run git checkout -b ch-api-test-setup-167313391
  - Run git pull ch-api-test-setup-167313391
  - Run npm test

Usage

  To add tests,
  - Open/Create a file for the given tests in the test directory, es test users
  - Import {chai, app} from ./test-setuo
  - Ensure that required modules/functions not in the test-setup package are imported from their respective sources
  - Write the test suite(s)/cases

Pivotal tracker story

  [finishes #167313391](https://www.pivotaltracker.com/story/show/167313391)

* rename imported server

* fix index route response property name error and stream line server name

* Update package.json

* Update package.json

* modify test script to report coverage

* What does this PR do?

 Setup unit testing for the backend

Tasks to be accomplished

  - Add required dependancies for running tests
  - Create test directory with general test setup module
  - Update test running script
  - Test the index route

How to test the test setup

  - Clone this repo and run git checkout -b ch-api-test-setup-167313391
  - Run git pull ch-api-test-setup-167313391
  - Run npm test

Usage

  To add tests,
  - Open/Create a file for the given tests in the test directory, es test users
  - Import {chai, app} from ./test-setuo
  - Ensure that required modules/functions not in the test-setup package are imported from their respective sources
  - Write the test suite(s)/cases

Pivotal tracker story

  [finishes #167313391](https://www.pivotaltracker.com/story/show/167313391)

* rename imported server

* fix index route response property name error and stream line server name

* Update package.json

* modify test script to report coverage

* chore(coveralls):added coveralls badge[Finishes #167313393]

* add coveralls badge, change to use expect for assetion and fix typo

* remove duplicate application title

* remove duplicate title and improve index route test

* #167313390 deploy base application to heroku  (#8)

* chore(heroku) add app.json file

to enable heroku to review each open pull request so that we can test app on heroku before merging branch to develop
[Starts #167313390]

* chore(heroku) add procfile
[Continue  #167313390]

* chore(heroku) add app.json file

to enable heroku to review each open pull request so that we can test app on heroku before merging branch to develop
[Starts #167313390]

* chore(heroku) add procfile
[Continue  #167313390]

* chore(heroku) add index.js to test
[Continue  #167313390]

* chore(heroku) add index.js to test
[Continue  #167313390]

* chore(heroku) rebase from develop
[Continue  #167313390]

* chore(heroku) finish heroku configuration
[Finishes  #167313390]

* fix covaralls badge (#9)

* #167313396 Build out Admin REST endpoints for resources(CRUD) (#10)

* updated develop branch

* feature(apis):implemented crud operations[finishes:167313396]

* feature(users):added username fields[finished:167313396]

* feature(code-refactoring):fixed-eslint[Finish:167313396]

* feature(tests):added tests[Finishes:167313396]

* feature(testing):added tests[Finishes:#167313396]

* feature(testing):fixed travis[Finishes:167313396]

* #167313398 Users should receive descriptive signup/Registration validation errors (#11)

* feature(signup-validations):Users should receive descriptive signup/Registration validation errors [Finishes 167313398]

* (signup-validation):Refactor validations [Finishes #167313398]

* (signup-validation):Refactor signup validations [Finishes #167313398]

* #167313399 User should be able to sign out (#12)

* feature(signout): add user signout logic

* feature(logout): add user can logout functionality

* feature(email verification): Email should be verified before a registered user gets access to different routes [Finishes #167313397] (#13)

* bg(heroku) rename Procfile file (#15)

* bg(heroku) rename Procfile file

[Starts #167804454]

* bg(heroku) rebasing

[Finishes  #167804454]

* bg(coveralls): add coverage script (#16)

* chore(improve test coverage): improves the test coverage [Finishes 167815352] (#17)

* feature(reset password): add user reset password functionality [Finishes #167313400] (#18)

* Ft api social login 167313401 (#14)

* feature(social login): user has to login with social platforms [Finishes #167313401]

* Purpose of this PR

  Add social login

Tasks to be acomplished

  - Login from social account if user exists
  - Create user and login if social user does not exist

How to test manually

  - In a browser enter the url http://<base url>/login/<social account>
    - Get the base URL in the documentation
    - social account is facebook or google for the respective logins
  - Follow the prompts and observe the response in the browser

Related PT story

  [WIP #167313401](https://www.pivotaltracker.com/story/show/167313401)

* feature(api-social-login):remove twitter [#167313401

* feature(social login): user has to login with social platforms [Finishes #167313401]

* feature(social login): user has to login with social platforms [Finishes #167313401]

* Purpose of this PR

  Add social login

Tasks to be acomplished

  - Login from social account if user exists
  - Create user and login if social user does not exist

How to test manually

  - In a browser enter the url http://<base url>/login/<social account>
    - Get the base URL in the documentation
    - social account is facebook or google for the respective logins
  - Follow the prompts and observe the response in the browser

Related PT story

  [WIP #167313401](https://www.pivotaltracker.com/story/show/167313401)

* Purpose of this PR

  Add social login

Tasks to be acomplished

  - Login from social account if user exists
  - Create user and login if social user does not exist

How to test manually

  - In a browser enter the url http://<base url>/login/<social account>
    - Get the base URL in the documentation
    - social account is facebook or google for the respective logins
  - Follow the prompts and observe the response in the browser

Related PT story

  [WIP #167313401](https://www.pivotaltracker.com/story/show/167313401)

* feature(api-social-login):remove twitter [#167313401

* feature(api-social-login):remove twitter [#167313401

* Purpose

  Add social login feature

Tasks to be accomplished

  - Enable social login via twitter, google and facebook
  - Add creation of new users from social accounts on login
  - Document routes

How can this feature be tested manualy

  - In the browser address bar, enter the url https://codepirates-ah-backend.herokuapp.com/login/<social>,
where social can be facebook, google or twitter
  - In the resulting window, enter your credentials for the given social platform
  - If your account exists with this app, you should be logged in and your details and a token displayed in the browser
  - If your account does not exist, you will get a message in the broswer asking to creat an account
  - Enter https://codepirates-ah-backend.herokuapp.com/signup/social in the browser address bar and hit enter
  - You will get a message that your account has been created and a verification email sent along with your details and an access token

Pivotal tracker story

  [finishes #167313401]

* disable failing tests for further inspection

* resolve merge conflict

* Purpose of this commit:

  Resolve build failure

Story ID

  [finished #167313401](https://www.pivotaltracker.com/story/show/167313401)

* fix history packag-lock error

* work around twitter account security concern

* work around twitter account security concern

* pp

* twitter security

* twitter security

* twitter security

* Update test-socialLogin.js

* feature(social login): user has to login with social platforms [Finishes #167313401]

* feature(social login): user has to login with social platforms [Finishes #167313401]

* feature(social login): user has to login with social platforms [Finishes #167313401]

* Purpose of this PR

  Add social login

Tasks to be acomplished

  - Login from social account if user exists
  - Create user and login if social user does not exist

How to test manually

  - In a browser enter the url http://<base url>/login/<social account>
    - Get the base URL in the documentation
    - social account is facebook or google for the respective logins
  - Follow the prompts and observe the response in the browser

Related PT story

  [WIP #167313401](https://www.pivotaltracker.com/story/show/167313401)

* Purpose of this PR

  Add social login

Tasks to be acomplished

  - Login from social account if user exists
  - Create user and login if social user does not exist

How to test manually

  - In a browser enter the url http://<base url>/login/<social account>
    - Get the base URL in the documentation
    - social account is facebook or google for the respective logins
  - Follow the prompts and observe the response in the browser

Related PT story

  [WIP #167313401](https://www.pivotaltracker.com/story/show/167313401)

* Purpose of this PR

  Add social login

Tasks to be acomplished

  - Login from social account if user exists
  - Create user and login if social user does not exist

How to test manually

  - In a browser enter the url http://<base url>/login/<social account>
    - Get the base URL in the documentation
    - social account is facebook or google for the respective logins
  - Follow the prompts and observe the response in the browser

Related PT story

  [WIP #167313401](https://www.pivotaltracker.com/story/show/167313401)

* feature(api-social-login):remove twitter [#167313401

* feature(api-social-login):remove twitter [#167313401

* feature(api-social-login):remove twitter [#167313401

* Purpose

  Add social login feature

Tasks to be accomplished

  - Enable social login via twitter, google and facebook
  - Add creation of new users from social accounts on login
  - Document routes

How can this feature be tested manualy

  - In the browser address bar, enter the url https://codepirates-ah-backend.herokuapp.com/login/<social>,
where social can be facebook, google or twitter
  - In the resulting window, enter your credentials for the given social platform
  - If your account exists with this app, you should be logged in and your details and a token displayed in the browser
  - If your account does not exist, you will get a message in the broswer asking to creat an account
  - Enter https://codepirates-ah-backend.herokuapp.com/signup/social in the browser address bar and hit enter
  - You will get a message that your account has been created and a verification email sent along with your details and an access token

Pivotal tracker story

  [finishes #167313401]

* disable failing tests for further inspection

* resolve merge conflict

* Purpose of this commit:

  Resolve build failure

Story ID

  [finished #167313401](https://www.pivotaltracker.com/story/show/167313401)

* fix history packag-lock error

* work around twitter account security concern

* work around twitter account security concern

* pp

* twitter security

* twitter security

* twitter security

* Update test-socialLogin.js

* respond to feedback

* fix merge error

* feature(social auth): add social authentication functionality

* #167313409 Users should be able to follow each other (#20)

* rebase

* feature(follow-users):Users should be able to follow each other [Finishes #167313409]

* feature(follow-users):Improve follow user tests[Finishes #167313409]

* feature(create articles): user can create, read, update, and delete an article [Finishes #167313403] (#19)

* #167313402  user profile CRUD operation (#22)

*  controller business logic

* adding testing and validation

[Continue #167313402]

* remove unwanted dependency

* feature(rate article): add user should be able to give a rating to an article [Finishes 167313404] (#21)

* feature(view authors' profiles): user can view the profiles of all authors [Finishes #167313413] (#24)

* feature(commentes):added comment controllers-167313407 (#26)

* bug(improve api doc): make api documentation more readable and interactive (#28)

[Finishes #167942825]

* Ft like dislike article 167313408 (#29)

* add migration models

* routes

* docummentation

* feature(read time): add users should be able to see time it takes to read an article functinality (#30)

[Finishes #167313415]

* bug(fixing create article mocking tests):Only cloudinary function is mocked instead of the whole creating article route [Finishes #168000401] (#31)

* unhandled sendgrid error fix (#34)

* #167313410 Users should be able to receive notifications (#35)

*  updated develop

* User should get notifications

* feature(notifications): User should be able to get notifications [Finishes #167313410]

* feature(notifications):Remove unnecessary files [Finishes #167313410]

* feature(notifications):Remove all unnecessary files [Finishes #167313410]

* feature(notifications):Remove nodemailer files [Finishes #167313410]

* bg(mock fail): add mock test for interaction with external I/O services (#42)

* #167313411 Authenticated users should be able to tag articles (#37)

* #167313411 Users should be able to tag articles

* remove console.log

* enable all tests

* #167313417 Users should be able to bookmark articles for later reading (#44)

* feature(create articles): user can create, read, update, and delete an article [Finishes #167313403]

* basic bookmarking

* #167313417 user should be able to bookmark articles

* fix error in package-lock

* add package lock to git ignore

* correct status codes and refactor

* remove cascsede update for user to article association

* feature(highlight text in the article): user can highlight a content in the article, comment on the highlight, and share the highlight on different social platforms [Finishes #167313423] (#47)

* feature(package.lock):deleted[finished:167313424] (#45)

* #167313416 Users should be able to share articles across different channels (#46)

* save changes

* feature(share-articles): Users should be able to share articles across different channels [Finishes #167313416]

* feature(share-articles): Use util helper fuctions [Finishes #167313416]

* reset to previous commit

* Updated doc.yml file

* feature(like comment): add user can like a specific comment [Finishes #167313419] (#48)

* #167313420 A user should be able to see their reading statistics (#49)

* 167313420 a user should be able to view their reading stats

[WIP #167313420]

* 167313420 user should be able to view their stats

[(Needs review) #167313420]

* rebase and incorporate latest changes

* 167313420 rebase and rename stats test to run before other stats populating test request

* resolve conflict in articles controller

* reolve conflict in articles ctrler

* reolve conflict in articles ctrler

* resolve merge conflict

* #167313406 refactoring and pagintion for rating  article (#50)

* rating(paginating) paginate and refactor rating

[Starts #167313406]

* rating(refactor) add testing for rating and its pagination

[Finishes #167313406]

* #168213200 change setError to setSuccess upon success execution (#52)

* save changes

* feature(share-articles): Users should be able to share articles across different channels [Finishes #167313416]

* feature(share-articles): Use util helper fuctions [Finishes #167313416]

* reset to previous commit

* Updated doc.yml file

* fix setError to setSuccess

* Fix setError to setSucess in comments file

* Remove duplicate code due to rebasing
  • Loading branch information
Mnickii committed Sep 2, 2019
1 parent b5eac2c commit 9828602
Show file tree
Hide file tree
Showing 41 changed files with 1,227 additions and 328 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,9 @@ typings/
#ignore DS_Store
.DS_Store

#ignore DS_Store
.DS_Store

# ignore package-lock
package-lock.json

Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
[![Reviewed by Hound CI](https://img.shields.io/badge/Reviewed%20by-Hound%20CI-blue.svg)](https://houndci.com)

Authors Haven - A Social platform for the creative at heart.
=======

## Vision

Expand Down
106 changes: 53 additions & 53 deletions app.json
Original file line number Diff line number Diff line change
@@ -1,54 +1,54 @@
{
"name": "codepirates-ah-backend",
"scripts": {},
"env": {
"ADMIN_EMAIL": {
"required": true
},
"ADMIN_PASSWORD": {
"required": true
},
"API_VERSION": {
"required": true
},
"DATABASE_URL": {
"required": true
},
"DB_HOST": {
"required": true
},
"DB_NAME": {
"required": true
},
"DB_PASSWORD": {
"required": true
},
"DB_PORT": {
"required": true
},
"DB_USER": {
"required": true
},
"SECRET": {
"required": true
},
"STATE": {
"required": true
},
"USER_PASSWORD": {
"required": true
}
},
"formation": {
"web": {
"quantity": 1
}
},
"addons": [],
"buildpacks": [
{
"url": "heroku/nodejs"
}
],
"stack": "heroku-18"
}
"name": "codepirates-ah-backend",
"scripts": {},
"env": {
"ADMIN_EMAIL": {
"required": true
},
"ADMIN_PASSWORD": {
"required": true
},
"API_VERSION": {
"required": true
},
"DATABASE_URL": {
"required": true
},
"DB_HOST": {
"required": true
},
"DB_NAME": {
"required": true
},
"DB_PASSWORD": {
"required": true
},
"DB_PORT": {
"required": true
},
"DB_USER": {
"required": true
},
"SECRET": {
"required": true
},
"STATE": {
"required": true
},
"USER_PASSWORD": {
"required": true
}
},
"formation": {
"web": {
"quantity": 1
}
},
"addons": [],
"buildpacks": [
{
"url": "heroku/nodejs"
}
],
"stack": "heroku-18"
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"undoseeds": "babel-node node_modules/.bin/sequelize db:seed:undo:all",
"migration": "babel-node node_modules/.bin/sequelize db:migrate",
"undomigration": "babel-node node_modules/.bin/sequelize db:migrate:undo:all",
"runmigrations": "npm run undoseeds && npm run migration && npm run seeds",
"runmigrations": " npm run undomigration && npm run migration && npm run seeds",
"coveralls": "nyc report --reporter=text-lcov | coveralls",
"test": "export NODE_ENV=test && npm run undomigration && npm run migration && npm run seeds && nyc --reporter=html --reporter=text mocha ./test --exit --require @babel/register",
"dev": "nodemon --exec babel-node ./src/app.js"
Expand Down
1 change: 1 addition & 0 deletions src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import routes from './routes/index';
import './config/cloudinary.config';
import { mock } from './middlewares/validators/socialLogin-mock';


const app = express();

if (process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'development') {
Expand Down
14 changes: 10 additions & 4 deletions src/controllers/articles.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import NotificationServices from '../services/notification.service';
import cloudinaryHelper from '../helpers/cloudinaryHelper';
import OpenUrlHelper from '../helpers/share.article.helper';
import Util from '../helpers/util';

import statsService from '../services/db.service';

const { notifyViaEmailAndPush } = NotificationServices;
const util = new Util();
Expand Down Expand Up @@ -123,6 +123,12 @@ class Articles {
const article = _.pick(findArticle, ['slug', 'title', 'description', 'body', 'taglist', 'favorited', 'favoritedcount', 'flagged', 'images', 'views']);
const readTime = Helper.calculateReadTime(article.body);
article.readtime = readTime;
if (req.auth) {
const { description } = article;
const readerId = req.auth.id;
const item = 'article';
await statsService.createStat({ description, item, readerId }, 'Stats');
}
return res.status(200).json({
status: 200,
message: 'Article successfully retrieved',
Expand Down Expand Up @@ -223,15 +229,15 @@ class Articles {
switch (req.params.channel) {
case 'facebook':
await OpenUrlHelper.openUrl(`https:www.facebook.com/sharer/sharer.php?u=${url}`);
util.setError(200, `Article shared to ${req.params.channel}`);
util.setSuccess(200, `Article shared to ${req.params.channel}`, url);
return util.send(res);
case 'twitter':
await OpenUrlHelper.openUrl(`https://twitter.com/intent/tweet?url=${url}`);
util.setError(200, `Article shared to ${req.params.channel}`);
util.setSuccess(200, `Article shared to ${req.params.channel}`, url);
return util.send(res);
case 'mail':
await OpenUrlHelper.openUrl(`mailto:?subject=${article.title}&body=${url}`);
util.setError(200, `Article shared to ${req.params.channel}`);
util.setSuccess(200, `Article shared to ${req.params.channel}`, url);
return util.send(res);
default:
break;
Expand Down
105 changes: 105 additions & 0 deletions src/controllers/comments.controller.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import commentsService from '../services/comments.service';
import UserService from '../services/user.service';
import models from '../models';
import Helper from '../helpers/helper';
import NotificationServices from '../services/notification.service';
import Util from '../helpers/util';
import StatsService from '../services/db.service';


const util = new Util();

Expand Down Expand Up @@ -107,6 +110,9 @@ class Comments {
await util.setError(200, 'No comments found');
return util.send(res);
}
const readerId = req.auth.id;
const item = 'comment';
await StatsService.createStat({ readerId, item, slug: 'all comments' }, 'Stats');
await util.setSuccess(200, 'All comments successfully retrieved', comments);
return util.send(res);
}
Expand Down Expand Up @@ -140,5 +146,104 @@ class Comments {
await util.setSuccess(200, 'Update is successfully', updateComment);
return util.send(res);
}

/**
*
*
* @static
* @param {*} req
* @param {*} res
* @returns {Object} return json object
* @memberof Comments
*/
static async likeComment(req, res) {
const { id } = req.params;
const { username } = req.auth;
const comment = await commentsService.findOne(id);

if (!comment) {
util.setError(404, `Comment with id: ${id} does not exist.`);
return util.send(res);
}
let { likesCount, likeInfo } = comment;
const userHasLikedBefore = likeInfo.search(username);
if (userHasLikedBefore >= 0) {
util.setError(400, 'You liked this comment already');
return util.send(res);
}

likesCount += 1;
likeInfo = `${username}, ${likeInfo}`;
await commentsService.updateComment(id, { likesCount, likeInfo });

const formattedLikeInfo = Helper.formatLikeInfo(likeInfo);
util.setSuccess(201, { likesCount, formattedLikeInfo });
return util.send(res);
}

/**
*
*
* @static
* @param {*} req
* @param {*} res
* @returns {Object} return json object
* @memberof Comments
*/
static async updateLikeComment(req, res) {
const { id } = req.params;
const { username } = req.auth;
const comment = await commentsService.findOne(id);
if (!comment) {
util.setError(404, `Comment with id: ${id} does not exist.`);
return util.send(res);
}

let { likesCount, likeInfo } = comment;
const userHasLikedBefore = likeInfo.search(username);

if (userHasLikedBefore === -1) {
util.setError(400, 'You did not like this comment before');
return util.send(res);
}

likesCount -= 1;
likeInfo = likeInfo.replace(`${username}, `, '');
await commentsService.updateComment(id, { likesCount, likeInfo });

util.setSuccess(200, 'You unliked this comment successfully');
return util.send(res);
}

/**
*
*
* @static
* @param {*} req
* @param {*} res
* @returns {Object} return json object
* @memberof Comments
*/
static async getLikesComments(req, res) {
const { id } = req.params;
const { username } = req.auth;
const comment = await commentsService.findOne(id);

if (!comment) {
util.setError(404, `Comment with id: ${id} does not exist.`);
return util.send(res);
}
const { likesCount, likeInfo } = comment;

const userHasLikedBefore = likeInfo.search(username);

if (userHasLikedBefore === -1) {
util.setSuccess(200, 'Likes successfully retrieved', { data: { likesCount, likeInfo } });
return util.send(res);
}
const formattedLikeInfo = Helper.formatLikeInfo(likeInfo.replace(`${username}, `, ''));
util.setSuccess(200, { data: { likesCount, formattedLikeInfo } });
return util.send(res);
}
}
export default Comments;
Loading

0 comments on commit 9828602

Please sign in to comment.