serializers/post - run promises in parallel
now w/ opts.detail, returns my_reaction field as 'null' w/ no reaction (before: field appears w/ some reaction)
This commit is contained in:
parent
78487934c7
commit
11190f56ad
2 changed files with 70 additions and 53 deletions
|
@ -95,6 +95,7 @@
|
||||||
"webpack": "3.8.1"
|
"webpack": "3.8.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@prezzemolo/rap": "^0.1.0",
|
||||||
"accesses": "2.5.0",
|
"accesses": "2.5.0",
|
||||||
"animejs": "2.2.0",
|
"animejs": "2.2.0",
|
||||||
"autwh": "0.0.1",
|
"autwh": "0.0.1",
|
||||||
|
|
|
@ -12,6 +12,7 @@ import serializeChannel from './channel';
|
||||||
import serializeUser from './user';
|
import serializeUser from './user';
|
||||||
import serializeDriveFile from './drive-file';
|
import serializeDriveFile from './drive-file';
|
||||||
import parse from '../common/text';
|
import parse from '../common/text';
|
||||||
|
import rap from '@prezzemolo/rap'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serialize a post
|
* Serialize a post
|
||||||
|
@ -70,21 +71,21 @@ const self = (
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate user
|
// Populate user
|
||||||
_post.user = await serializeUser(_post.user_id, meId);
|
_post.user = serializeUser(_post.user_id, meId);
|
||||||
|
|
||||||
// Populate app
|
// Populate app
|
||||||
if (_post.app_id) {
|
if (_post.app_id) {
|
||||||
_post.app = await serializeApp(_post.app_id);
|
_post.app = serializeApp(_post.app_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate channel
|
// Populate channel
|
||||||
if (_post.channel_id) {
|
if (_post.channel_id) {
|
||||||
_post.channel = await serializeChannel(_post.channel_id);
|
_post.channel = serializeChannel(_post.channel_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate media
|
// Populate media
|
||||||
if (_post.media_ids) {
|
if (_post.media_ids) {
|
||||||
_post.media = await Promise.all(_post.media_ids.map(fileId =>
|
_post.media = Promise.all(_post.media_ids.map(fileId =>
|
||||||
serializeDriveFile(fileId)
|
serializeDriveFile(fileId)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -92,82 +93,97 @@ const self = (
|
||||||
// When requested a detailed post data
|
// When requested a detailed post data
|
||||||
if (opts.detail) {
|
if (opts.detail) {
|
||||||
// Get previous post info
|
// Get previous post info
|
||||||
const prev = await Post.findOne({
|
_post.prev = (async () => {
|
||||||
user_id: _post.user_id,
|
const prev = Post.findOne({
|
||||||
_id: {
|
user_id: _post.user_id,
|
||||||
$lt: id
|
_id: {
|
||||||
}
|
$lt: id
|
||||||
}, {
|
}
|
||||||
fields: {
|
}, {
|
||||||
_id: true
|
fields: {
|
||||||
},
|
_id: true
|
||||||
sort: {
|
},
|
||||||
_id: -1
|
sort: {
|
||||||
}
|
_id: -1
|
||||||
});
|
}
|
||||||
_post.prev = prev ? prev._id : null;
|
});
|
||||||
|
return prev ? prev._id : null;
|
||||||
|
})()
|
||||||
|
|
||||||
// Get next post info
|
// Get next post info
|
||||||
const next = await Post.findOne({
|
_post.next = (async () => {
|
||||||
user_id: _post.user_id,
|
const next = await Post.findOne({
|
||||||
_id: {
|
user_id: _post.user_id,
|
||||||
$gt: id
|
_id: {
|
||||||
}
|
$gt: id
|
||||||
}, {
|
}
|
||||||
fields: {
|
}, {
|
||||||
_id: true
|
fields: {
|
||||||
},
|
_id: true
|
||||||
sort: {
|
},
|
||||||
_id: 1
|
sort: {
|
||||||
}
|
_id: 1
|
||||||
});
|
}
|
||||||
_post.next = next ? next._id : null;
|
});
|
||||||
|
return next ? next._id : null;
|
||||||
|
})()
|
||||||
|
|
||||||
if (_post.reply_id) {
|
if (_post.reply_id) {
|
||||||
// Populate reply to post
|
// Populate reply to post
|
||||||
_post.reply = await self(_post.reply_id, meId, {
|
_post.reply = self(_post.reply_id, meId, {
|
||||||
detail: false
|
detail: false
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_post.repost_id) {
|
if (_post.repost_id) {
|
||||||
// Populate repost
|
// Populate repost
|
||||||
_post.repost = await self(_post.repost_id, meId, {
|
_post.repost = self(_post.repost_id, meId, {
|
||||||
detail: _post.text == null
|
detail: _post.text == null
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Poll
|
// Poll
|
||||||
if (meId && _post.poll) {
|
if (meId && _post.poll) {
|
||||||
const vote = await Vote
|
_post.poll = (async (poll) => {
|
||||||
.findOne({
|
const vote = await Vote
|
||||||
user_id: meId,
|
.findOne({
|
||||||
post_id: id
|
user_id: meId,
|
||||||
});
|
post_id: id
|
||||||
|
});
|
||||||
|
|
||||||
if (vote != null) {
|
if (vote != null) {
|
||||||
const myChoice = _post.poll.choices
|
const myChoice = poll.choices
|
||||||
.filter(c => c.id == vote.choice)[0];
|
.filter(c => c.id == vote.choice)[0];
|
||||||
|
|
||||||
myChoice.is_voted = true;
|
myChoice.is_voted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return poll
|
||||||
|
})(_post.poll)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch my reaction
|
// Fetch my reaction
|
||||||
if (meId) {
|
if (meId) {
|
||||||
const reaction = await Reaction
|
_post.my_reaction = (async () => {
|
||||||
.findOne({
|
const reaction = await Reaction
|
||||||
user_id: meId,
|
.findOne({
|
||||||
post_id: id,
|
user_id: meId,
|
||||||
deleted_at: { $exists: false }
|
post_id: id,
|
||||||
});
|
deleted_at: { $exists: false }
|
||||||
|
});
|
||||||
|
|
||||||
if (reaction) {
|
if (reaction) {
|
||||||
_post.my_reaction = reaction.reaction;
|
return reaction.reaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
})();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// resolve promises in _post object
|
||||||
|
_post = await rap(_post)
|
||||||
|
|
||||||
resolve(_post);
|
resolve(_post);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue