Browse Source

Move post meta info to instance method

sbkwgh 8 years ago
parent
commit
a307c32c89
2 changed files with 25 additions and 19 deletions
  1. 23 0
      models/user.js
  2. 2 19
      routes/user.js

+ 23 - 0
models/user.js

@@ -1,6 +1,7 @@
 let bcrypt = require('bcryptjs')
 let randomColor = require('randomcolor')
 
+let pagination = require('../lib/pagination.js')
 const Errors = require('../lib/errors.js')
 
 module.exports = (sequelize, DataTypes) => {
@@ -78,6 +79,28 @@ module.exports = (sequelize, DataTypes) => {
 			},
 			async comparePassword (password) {
 				return await bcrypt.compare(password, this.hash)
+			},
+			async getMeta (limit) {
+				let Post = sequelize.models.Post
+				let meta = {}
+
+				let nextId = await pagination.getNextIdDesc(Post, { userId: this.id }, this.Posts)
+
+				if(nextId === null) {
+					meta.nextURL = null
+					meta.nextPostsCount = 0
+				} else {
+					meta.nextURL =
+						`/api/v1/user/${user.username}?posts=true&limit=${limit}&from=${nextId - 1}`
+
+					meta.nextPostsCount = await pagination.getNextCount(
+						Post, this.Posts, limit,
+						{ UserId: this.id },
+						true
+					)
+				}
+
+				return meta
 			}
 		},
 		classMethods: {

+ 2 - 19
routes/user.js

@@ -79,26 +79,9 @@ router.get('/:username', async (req, res) => {
 			let user = await User.findOne(queryObj)
 			if(!user) throw Errors.accountDoesNotExist
 
-			let resUser = user.toJSON()
-			resUser.meta = {}
+			let meta = await user.getMeta(limit)
 
-			let nextId = await pagination.getNextIdDesc(Post, { userId: user.id }, resUser.Posts)
-
-			if(nextId === null) {
-				resUser.meta.nextURL = null
-				resUser.meta.nextPostsCount = 0
-			} else {
-				resUser.meta.nextURL =
-					`/api/v1/user/${user.username}?posts=true&limit=${limit}&from=${nextId - 1}`
-
-				resUser.meta.nextPostsCount = await pagination.getNextCount(
-					Post, resUser.Posts, limit,
-					{ UserId: user.id },
-					true
-				)
-			}
-
-			res.json(resUser)
+			res.json(Object.assign( user.toJSON(limit), { meta } ))
 		} else if(req.query.threads) {
 			let queryString = ''