Skip to content

Commit

Permalink
Merge c841dad into 6a9c72d
Browse files Browse the repository at this point in the history
  • Loading branch information
CEOehis committed Sep 11, 2018
2 parents 6a9c72d + c841dad commit 8418d8e
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module.exports = {
up: (queryInterface, Sequelize) => queryInterface.addColumn(
'Articles',
'timeToRead',
{
type: Sequelize.INTEGER,
},
),

down: queryInterface => queryInterface.removeColumn(
'Articles',
'timeToRead',
)
};
13 changes: 11 additions & 2 deletions server/models/article.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import calculateTimeToRead from '../utils/calculateTimeToRead';

module.exports = (sequelize, DataTypes) => {
const Article = sequelize.define('Article', {
title: {
Expand All @@ -18,8 +20,15 @@ module.exports = (sequelize, DataTypes) => {
type: DataTypes.INTEGER,
allowNull: false,
},
likeDislikeId: DataTypes.INTEGER
}, {});
likeDislikeId: DataTypes.INTEGER,
timeToRead: DataTypes.INTEGER,
}, {
hooks: {
beforeCreate: (articleData) => {
articleData.timeToRead = calculateTimeToRead(articleData);
}
}
});

Article.associate = (models) => {
const { Comment } = models;
Expand Down
1 change: 1 addition & 0 deletions server/tests/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ import './middleware/auth.test';
import './routes/index';
import './utils/token.test';
import './models/index';
import './utils/calculateTimeToRead.test';
13 changes: 13 additions & 0 deletions server/tests/utils/calculateTimeToRead.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { expect } from 'chai';
import calculateTimeToRead from '../../utils/calculateTimeToRead';

describe('calculateTimeToRead', () => {
it('should calculate time to read an article', () => {
const article = {
body: 'Some short article',
};

const timeToRead = calculateTimeToRead(article);
expect(timeToRead).to.be.a('number');
});
});
17 changes: 17 additions & 0 deletions server/utils/calculateTimeToRead.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/**
* calculates time to read an article
*
* @param {string} article
* @returns {number} timeToRead - time it takes to read an article
*/
const calculateTimeToRead = (article) => {
const averageReadSpeed = 265; // words per minute

// get article word count
const articleWordCount = article.body.split(' ').length;
const timeToRead = articleWordCount / averageReadSpeed;

return Math.ceil(timeToRead);
};

export default calculateTimeToRead;

0 comments on commit 8418d8e

Please sign in to comment.