mirror of
https://github.com/muerwre/orchidmap-front.git
synced 2025-04-25 19:16:41 +07:00
71 lines
1.6 KiB
JavaScript
71 lines
1.6 KiB
JavaScript
const { Route, User } = require('../../models');
|
|
|
|
module.exports = async (req, res) => {
|
|
const {
|
|
query: {
|
|
id, token, title, distance, author, starred,
|
|
}
|
|
} = req;
|
|
|
|
const user = await User.findOne({ _id: id, token });
|
|
|
|
let criteria = {};
|
|
|
|
if (title) {
|
|
criteria = {
|
|
...criteria,
|
|
$or: [
|
|
{ title: new RegExp(title.trim(), 'ig') },
|
|
{ _id: new RegExp(title.trim(), 'ig') },
|
|
],
|
|
};
|
|
}
|
|
|
|
if (!author || !user || (user._id !== author)) {
|
|
criteria = {
|
|
...criteria,
|
|
public: true,
|
|
};
|
|
}
|
|
|
|
let list = await Route.find({
|
|
...criteria,
|
|
}, '_id title distance owner updated_at', { limit: 500 }).populate('owner');
|
|
|
|
list = list.filter(item => (
|
|
!author || item.owner._id === author
|
|
));
|
|
|
|
let limits = list.reduce(({ min, max }, { distance: dist }) => ({
|
|
min: Math.ceil(Math.min(dist, min) / 20) * 20,
|
|
max: Math.ceil(Math.max(dist, max) / 20) * 20,
|
|
}), { min: 999999, max: 0 });
|
|
|
|
const minDist = parseInt(distance[0], 10);
|
|
const maxDist = parseInt(distance[1], 10);
|
|
// const maxDist = parseInt(distance[1], 10) > parseInt(distance[0], 10)
|
|
// ? parseInt(distance[1], 10)
|
|
// : 10000;
|
|
|
|
if (distance && distance.length === 2) {
|
|
list = list.filter(item => (
|
|
item.distance >= minDist &&
|
|
item.distance <= maxDist
|
|
));
|
|
}
|
|
|
|
if (list.length === 0) {
|
|
limits = { min: 0, max: 0 };
|
|
} else if (limits.max === 0) {
|
|
limits = { min: 0, max: 0 };
|
|
} else if (limits.min === limits.max) {
|
|
limits = { min: limits.max - 20, max: limits.max };
|
|
}
|
|
|
|
res.send({
|
|
success: true,
|
|
list,
|
|
...limits,
|
|
});
|
|
};
|
|
|