summaryrefslogtreecommitdiff
path: root/src/api/serializers
diff options
context:
space:
mode:
authorotofune <otofune@gmail.com>2017-11-05 22:13:28 +0900
committerotofune <otofune@gmail.com>2017-11-05 22:13:28 +0900
commit11190f56ad85a12faaa3653f8743dd75948ff11e (patch)
treeff6ef8dae399bd6409074e267e9d56c92d671fde /src/api/serializers
parentselializers - posts: unneed async-await (diff)
downloadsharkey-11190f56ad85a12faaa3653f8743dd75948ff11e.tar.gz
sharkey-11190f56ad85a12faaa3653f8743dd75948ff11e.tar.bz2
sharkey-11190f56ad85a12faaa3653f8743dd75948ff11e.zip
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)
Diffstat (limited to 'src/api/serializers')
-rw-r--r--src/api/serializers/post.ts122
1 files changed, 69 insertions, 53 deletions
diff --git a/src/api/serializers/post.ts b/src/api/serializers/post.ts
index b2c54e9df8..352932acff 100644
--- a/src/api/serializers/post.ts
+++ b/src/api/serializers/post.ts
@@ -12,6 +12,7 @@ import serializeChannel from './channel';
import serializeUser from './user';
import serializeDriveFile from './drive-file';
import parse from '../common/text';
+import rap from '@prezzemolo/rap'
/**
* Serialize a post
@@ -70,21 +71,21 @@ const self = (
}
// Populate user
- _post.user = await serializeUser(_post.user_id, meId);
+ _post.user = serializeUser(_post.user_id, meId);
// Populate app
if (_post.app_id) {
- _post.app = await serializeApp(_post.app_id);
+ _post.app = serializeApp(_post.app_id);
}
// Populate channel
if (_post.channel_id) {
- _post.channel = await serializeChannel(_post.channel_id);
+ _post.channel = serializeChannel(_post.channel_id);
}
// Populate media
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)
));
}
@@ -92,82 +93,97 @@ const self = (
// When requested a detailed post data
if (opts.detail) {
// Get previous post info
- const prev = await Post.findOne({
- user_id: _post.user_id,
- _id: {
- $lt: id
- }
- }, {
- fields: {
- _id: true
- },
- sort: {
- _id: -1
- }
- });
- _post.prev = prev ? prev._id : null;
+ _post.prev = (async () => {
+ const prev = Post.findOne({
+ user_id: _post.user_id,
+ _id: {
+ $lt: id
+ }
+ }, {
+ fields: {
+ _id: true
+ },
+ sort: {
+ _id: -1
+ }
+ });
+ return prev ? prev._id : null;
+ })()
// Get next post info
- const next = await Post.findOne({
- user_id: _post.user_id,
- _id: {
- $gt: id
- }
- }, {
- fields: {
- _id: true
- },
- sort: {
- _id: 1
- }
- });
- _post.next = next ? next._id : null;
+ _post.next = (async () => {
+ const next = await Post.findOne({
+ user_id: _post.user_id,
+ _id: {
+ $gt: id
+ }
+ }, {
+ fields: {
+ _id: true
+ },
+ sort: {
+ _id: 1
+ }
+ });
+ return next ? next._id : null;
+ })()
if (_post.reply_id) {
// Populate reply to post
- _post.reply = await self(_post.reply_id, meId, {
+ _post.reply = self(_post.reply_id, meId, {
detail: false
});
}
if (_post.repost_id) {
// Populate repost
- _post.repost = await self(_post.repost_id, meId, {
+ _post.repost = self(_post.repost_id, meId, {
detail: _post.text == null
});
}
// Poll
if (meId && _post.poll) {
- const vote = await Vote
- .findOne({
- user_id: meId,
- post_id: id
- });
+ _post.poll = (async (poll) => {
+ const vote = await Vote
+ .findOne({
+ user_id: meId,
+ post_id: id
+ });
- if (vote != null) {
- const myChoice = _post.poll.choices
- .filter(c => c.id == vote.choice)[0];
+ if (vote != null) {
+ const myChoice = poll.choices
+ .filter(c => c.id == vote.choice)[0];
- myChoice.is_voted = true;
- }
+ myChoice.is_voted = true;
+ }
+
+ return poll
+ })(_post.poll)
}
// Fetch my reaction
if (meId) {
- const reaction = await Reaction
- .findOne({
- user_id: meId,
- post_id: id,
- deleted_at: { $exists: false }
- });
+ _post.my_reaction = (async () => {
+ const reaction = await Reaction
+ .findOne({
+ user_id: meId,
+ post_id: id,
+ deleted_at: { $exists: false }
+ });
+
+ if (reaction) {
+ return reaction.reaction;
+ }
- if (reaction) {
- _post.my_reaction = reaction.reaction;
- }
+ return null
+ })();
}
}
+ // resolve promises in _post object
+ _post = await rap(_post)
+
resolve(_post);
});