From 6ffdca22d7e837029de479eb073d8d7547aa4a1e Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 30 Nov 2018 16:06:52 +0700 Subject: [PATCH] backend: populated routes --- backend/routes/auth/check.js | 8 +++++++- backend/routes/route/get.js | 6 +++--- backend/routes/route/post.js | 9 ++++++--- src/constants/auth.js | 2 +- src/utils/api.js | 9 ++++++++- 5 files changed, 25 insertions(+), 9 deletions(-) diff --git a/backend/routes/auth/check.js b/backend/routes/auth/check.js index be2545d..39ca59e 100644 --- a/backend/routes/auth/check.js +++ b/backend/routes/auth/check.js @@ -4,7 +4,13 @@ const { generateGuest, generateRandomUrl } = require('./guest'); module.exports = async (req, res) => { const { id, token } = req.query; - const user = await User.findOne({ _id: id, token }); + const user = await User.findOne({ _id: id, token }).populate({ + path: 'routes', + options: { + limit: 100, + sort: { updated: 1 }, + } + }); const random_url = await generateRandomUrl(); if (user) { diff --git a/backend/routes/route/get.js b/backend/routes/route/get.js index 85b02ff..57fbd48 100644 --- a/backend/routes/route/get.js +++ b/backend/routes/route/get.js @@ -1,11 +1,11 @@ -const { User, Route } = require('../../models'); +const { Route } = require('../../models'); module.exports = async (req, res) => { - const { query: { id, token, name } } = req; + const { query: { name } } = req; if (!name) return res.send({ success: false, mode: 'not_found_1' }); - const exists = await Route.findOne({ _id: name }).populate('owner'); + const exists = await Route.findOne({ _id: name }).populate('owner', '_id'); if (!exists) return res.send({ success: false, mode: 'not_found_2' }); const data = exists.toObject(); diff --git a/backend/routes/route/post.js b/backend/routes/route/post.js index 2dc9a2f..e22a5d8 100644 --- a/backend/routes/route/post.js +++ b/backend/routes/route/post.js @@ -5,7 +5,7 @@ const { parseRoute, parseStickers, parseString, parseNumber } = require('../../u module.exports = async (req, res) => { const { body, body: { id, token, force } } = req; - const owner = await User.findOne({ _id: id, token }); + const owner = await User.findOne({ _id: id, token }).populate('routes'); if (!owner) return res.send({ success: false, reason: 'unauthorized', id, token }); const title = parseString(body.title, 32); @@ -19,7 +19,7 @@ module.exports = async (req, res) => { return res.send({ success: false, mode: 'empty' }); } - const exists = await Route.findOne({ _id: address }).populate('owner'); + const exists = await Route.findOne({ _id: address }).populate('owner', '_id'); if (exists && exists.owner._id !== id) return res.send({ success: false, mode: 'exists' }); if (exists && !force) return res.send({ success: false, mode: 'overwriting' }); @@ -32,10 +32,13 @@ module.exports = async (req, res) => { }); } - await Route.create({ + const created = await Route.create({ _id: address, title, route, stickers, owner, logo, distance, }); + await owner.routes.push(created); + await owner.save(); + return res.send({ success: true, title, address, route, stickers }); diff --git a/src/constants/auth.js b/src/constants/auth.js index 913d249..b56a6f7 100644 --- a/src/constants/auth.js +++ b/src/constants/auth.js @@ -8,7 +8,7 @@ export const DEFAULT_USER = { place_types: {}, random_url: '', role: ROLES.guest, - routes: [], + routes: {}, success: false, id: null, token: null, diff --git a/src/utils/api.js b/src/utils/api.js index d2772b9..0b0e218 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -2,9 +2,16 @@ import axios from 'axios/index'; import { API } from '$constants/api'; +const arrayToObject = (array, key) => array.reduce((obj, el) => ({ ...obj, [el[key]]: el })); + export const checkUserToken = ({ id, token }) => axios.get(API.CHECK_TOKEN, { params: { id, token } -}).then(result => (result && result.data && { ...result.data, id, token })); +}).then(result => (result && result.data && { + ...result.data, + id, + token, + routes: (result.data.routes && result.data.routes.length > 0 && arrayToObject(result.data.routes, '_id')) || {}, +})); export const getGuestToken = () => axios.get(API.GET_GUEST).then(result => (result && result.data));