mirror of
https://github.com/muerwre/orchidmap-front.git
synced 2025-04-25 02:56:41 +07:00
backend: route save / restore
This commit is contained in:
parent
032821329b
commit
d932fcb287
17 changed files with 163 additions and 43 deletions
|
@ -8,8 +8,8 @@ const cookieParser = require('cookie-parser');
|
|||
const lessMiddleware = require('less-middleware');
|
||||
const logger = require('morgan');
|
||||
const bodyParser = require('body-parser');
|
||||
const indexRouter = require('./routes/index');
|
||||
const usersRouter = require('./routes/users');
|
||||
|
||||
const routeRouter = require('./routes/route');
|
||||
const authRouter = require('./routes/auth');
|
||||
const db = require('./config/db');
|
||||
|
||||
|
@ -31,9 +31,13 @@ app.use((req, res, next) => {
|
|||
next();
|
||||
});
|
||||
|
||||
app.use(bodyParser.json());
|
||||
app.use(express.json());
|
||||
|
||||
// app.use('/', indexRouter);
|
||||
// app.use('/users', usersRouter);
|
||||
app.use('/auth', authRouter);
|
||||
app.use('/route', routeRouter);
|
||||
// catch 404 and forward to error handler
|
||||
app.use((req, res, next) => {
|
||||
next(createError(404));
|
||||
|
|
22
backend/models/Route.js
Normal file
22
backend/models/Route.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
const mongoose = require('mongoose');
|
||||
|
||||
const { Schema } = mongoose;
|
||||
|
||||
const RouteSchema = new Schema(
|
||||
{
|
||||
_id: { type: String, required: true },
|
||||
title: { type: String, default: '' },
|
||||
// address: { type: String, required: true },
|
||||
version: { type: Number, default: 2 },
|
||||
route: { type: Array },
|
||||
stickers: { type: Array },
|
||||
owner: { type: Schema.Types.ObjectId, ref: 'User' },
|
||||
logo: { type: String, default: 'DEFAULT' },
|
||||
distance: { type: Number, default: 0 },
|
||||
},
|
||||
{
|
||||
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
|
||||
}
|
||||
);
|
||||
|
||||
module.exports.RouteSchema = RouteSchema;
|
|
@ -17,11 +17,11 @@ const UserSchema = new Schema(
|
|||
first_name: { type: String },
|
||||
last_name: { type: String },
|
||||
photo: { type: String },
|
||||
routes: [{ type: Schema.Types.ObjectId, ref: 'Route' }]
|
||||
},
|
||||
{
|
||||
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
|
||||
}
|
||||
);
|
||||
|
||||
const User = mongoose.model('User', UserSchema);
|
||||
module.exports.User = User;
|
||||
module.exports.UserSchema = UserSchema;
|
||||
|
|
8
backend/models/index.js
Normal file
8
backend/models/index.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
const mongoose = require('mongoose');
|
||||
|
||||
const { UserSchema } = require('./User');
|
||||
const { RouteSchema } = require('./Route');
|
||||
|
||||
module.exports.User = mongoose.model('User', UserSchema);
|
||||
module.exports.Route = mongoose.model('Route', RouteSchema);
|
||||
|
|
@ -1,16 +1,13 @@
|
|||
const { User } = require('../../models/User');
|
||||
const { User } = require('../../models');
|
||||
const { generateGuest, generateRandomUrl } = require('./guest');
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const { id, token } = req.query;
|
||||
console.log(req.query);
|
||||
console.log('SEARCHING', id, token);
|
||||
|
||||
const user = await User.findOne({ _id: id, token });
|
||||
const random_url = await generateRandomUrl();
|
||||
|
||||
if (user) {
|
||||
console.log('FOUND');
|
||||
return res.send({ success: true, ...user.toObject(), id: user._id, random_url });
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const { genRandomSequence } = require('../../utils/gen');
|
||||
const { User } = require('../../models/User');
|
||||
const { User } = require('../../models');
|
||||
|
||||
const generateGuestToken = () => {
|
||||
const _id = `guest:${genRandomSequence(16)}`;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const { User } = require('../../models/User');
|
||||
const { User } = require('../../models');
|
||||
|
||||
module.exports = (req, res) => User.find((err, articles) => {
|
||||
if (!err) return res.send(articles);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const { User } = require('../../../models/User');
|
||||
const { User } = require('../../../models');
|
||||
const axios = require('axios');
|
||||
const { generateUser } = require('../guest');
|
||||
const { STRINGS } = require('../../../config/strings');
|
||||
|
|
10
backend/routes/route.js
Normal file
10
backend/routes/route.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
const express = require('express');
|
||||
const post = require('./route/post');
|
||||
const get = require('./route/get');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.post('/', post);
|
||||
router.get('/', get);
|
||||
|
||||
module.exports = router;
|
23
backend/routes/route/get.js
Normal file
23
backend/routes/route/get.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
const { User, Route } = require('../../models');
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const { query: { id, token, name } } = req;
|
||||
|
||||
if (!name) return res.send({ success: false, mode: 'not_found_1' });
|
||||
|
||||
const exists = await Route.findOne({ _id: name }).populate('owner');
|
||||
|
||||
if (!exists) return res.send({ success: false, mode: 'not_found_2' });
|
||||
const data = exists.toObject();
|
||||
|
||||
return res.send({
|
||||
success: true,
|
||||
...data,
|
||||
address: exists._id,
|
||||
owner: {
|
||||
...data.owner,
|
||||
id: data.owner._id,
|
||||
}
|
||||
});
|
||||
};
|
||||
|
43
backend/routes/route/post.js
Normal file
43
backend/routes/route/post.js
Normal file
|
@ -0,0 +1,43 @@
|
|||
const { User, Route } = require('../../models');
|
||||
|
||||
const { parseRoute, parseStickers, parseString, parseNumber } = require('../../utils/parse');
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const { body, body: { id, token, force } } = req;
|
||||
|
||||
const owner = await User.findOne({ _id: id, token });
|
||||
if (!owner) return res.send({ success: false, reason: 'Unauthorized' });
|
||||
|
||||
const title = parseString(body.title, 32);
|
||||
const address = parseString(body.address, 32);
|
||||
const route = parseRoute(body.route);
|
||||
const stickers = parseStickers(body.stickers);
|
||||
const logo = parseString(body.logo, 16);
|
||||
const distance = parseNumber(body.distance, 0, 1000);
|
||||
|
||||
if ((!route || route.length <= 0) && (!stickers || stickers.length <= 0)) {
|
||||
return res.send({ success: false, mode: 'empty' });
|
||||
}
|
||||
|
||||
const exists = await Route.findOne({ _id: address }).populate('owner');
|
||||
|
||||
if (exists && exists.owner._id !== id) return res.send({ success: false, mode: 'exists' });
|
||||
if (exists && !force) return res.send({ success: false, mode: 'overwriting' });
|
||||
|
||||
if (exists) {
|
||||
exists.set({ title, route, stickers, logo, distance }).save();
|
||||
|
||||
return res.send({
|
||||
success: true, title, address, route, stickers, mode: 'overwrited'
|
||||
});
|
||||
}
|
||||
|
||||
await Route.create({
|
||||
_id: address, title, route, stickers, owner, logo, distance,
|
||||
});
|
||||
|
||||
return res.send({
|
||||
success: true, title, address, route, stickers
|
||||
});
|
||||
};
|
||||
|
24
backend/utils/parse.js
Normal file
24
backend/utils/parse.js
Normal file
|
@ -0,0 +1,24 @@
|
|||
module.exports.parseRoute = route => route.filter(el => (
|
||||
Object.keys(el).length === 2
|
||||
&& el.lat
|
||||
&& parseInt(el.lat, 10) > 0
|
||||
&& parseInt(el.lat, 10) < 1000
|
||||
&& el.lng
|
||||
&& parseInt(el.lng, 10) > 0
|
||||
&& parseInt(el.lng, 10) < 1000
|
||||
));
|
||||
|
||||
module.exports.parseStickers = stickers => stickers.filter(el => (
|
||||
Object.keys(el).length === 3
|
||||
&& el.latlng
|
||||
&& Object.keys(el.latlng).length === 2
|
||||
&& el.latlng.lat
|
||||
&& parseInt(el.latlng.lat, 10) > 0
|
||||
&& parseInt(el.latlng.lat, 10) < 1000
|
||||
&& el.latlng.lng
|
||||
&& parseInt(el.latlng.lng, 10) > 0
|
||||
&& parseInt(el.latlng.lng, 10) < 1000
|
||||
));
|
||||
|
||||
module.exports.parseString = (value, size) => (value && String(value).substr(0, size)) || '';
|
||||
module.exports.parseNumber = (value, min, max) => (value && Number(value) && Math.min(max, Math.max(min, value))) || 0;
|
Loading…
Add table
Add a link
Reference in a new issue