Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions src/domain/common/filterResolved/filterResolved.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

import logger from '^/integrations/logging';

export default async function filterResolved<T>(items: Promise<T>[]): Promise<T[]>
{
const promises = await Promise.allSettled(items);

const results: T[] = [];

promises.forEach((promise) =>
{
if (promise.status === 'rejected')
{
logger.logError('Promise rejected', promise.reason);

return;
}

results.push(promise.value);
});

return results;
}
2 changes: 2 additions & 0 deletions src/domain/common/filterResolved/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

export { default } from './filterResolved';
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

import { Requester } from '^/domain/authentication';
import filterResolved from '^/domain/common/filterResolved';
import validateRange, { Range } from '^/domain/common/validateRange';
import logger from '^/integrations/logging';

import aggregate, { AggregatedData } from '../aggregate';
import getRecent from '../getRecent';
Expand All @@ -12,21 +12,7 @@ export default async function getRecentAggregated(requester: Requester, range: R

const data = await getRecent(requester.id, range.limit, range.offset);

const notifications: AggregatedData[] = [];
const aggregates = data.map(item => aggregate(requester, item));

const promises = await Promise.allSettled(data.map(item => aggregate(requester, item)));

promises.forEach((promise) =>
{
if (promise.status === 'rejected')
{
logger.logError('Error on aggregating Notification', promise.reason);

return;
}

notifications.push(promise.value);
});

return (notifications);
return filterResolved(aggregates);
}
20 changes: 3 additions & 17 deletions src/domain/post/exploreAggregated/exploreAggregated.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

import { Requester } from '^/domain/authentication';
import filterResolved from '^/domain/common/filterResolved';
import validateRange, { Range } from '^/domain/common/validateRange';
import logger from '^/integrations/logging';

import aggregate, { AggregatedData } from '../aggregate';
import explore from '../explore';
Expand All @@ -12,21 +12,7 @@ export default async function exploreAggregated(requester: Requester, range: Ran

const data = await explore(requester, range.limit, range.offset);

const posts: AggregatedData[] = [];
const aggregates = data.map(item => aggregate(requester, item));

const promises = await Promise.allSettled(data.map(item => aggregate(requester, item)));

promises.forEach((promise) =>
{
if (promise.status === 'rejected')
{
logger.logError('Error on aggregating Post', promise.reason);

return;
}

posts.push(promise.value);
});

return posts;
return filterResolved(aggregates);
}
20 changes: 3 additions & 17 deletions src/domain/post/getAllAggregated/getAllAggregated.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

import { Requester } from '^/domain/authentication';
import filterResolved from '^/domain/common/filterResolved';
import validateRange, { Range } from '^/domain/common/validateRange';
import logger from '^/integrations/logging';

import aggregate, { AggregatedData } from '../aggregate';
import getAll from '../getAll';
Expand All @@ -12,21 +12,7 @@ export default async function getAllAggregated(requester: Requester, range: Rang

const data = await getAll(requester, range.limit, range.offset);

const posts: AggregatedData[] = [];
const aggregates = data.map(item => aggregate(requester, item));

const promises = await Promise.allSettled(data.map(item => aggregate(requester, item)));

promises.forEach((promise) =>
{
if (promise.status === 'rejected')
{
logger.logError('Error on aggregating Post', promise.reason);

return;
}

posts.push(promise.value);
});

return posts;
return filterResolved(aggregates);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@

import logger from '^/integrations/logging';

import { Requester } from '^/domain/authentication';
import filterResolved from '^/domain/common/filterResolved';
import validateRange, { Range } from '^/domain/common/validateRange';

import aggregate, { AggregatedData } from '../aggregate';
Expand All @@ -15,22 +14,7 @@ export default async function getByCreatorAggregated(requester: Requester, creat

const data = await getByCreator(creatorId, range.limit, range.offset);

const posts: AggregatedData[] = [];

const promises = Promise.allSettled(data.map(item => aggregate(requester, item)));

(await promises).forEach((promise) =>
{
if (promise.status === 'rejected')
{
logger.logError('Error on aggregating Post', promise.reason);

return;
}

posts.push(promise.value);

});
const aggregates = data.map(item => aggregate(requester, item));

return posts;
return filterResolved(aggregates);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

import { Requester } from '^/domain/authentication';
import filterResolved from '^/domain/common/filterResolved';
import validateRange, { Range } from '^/domain/common/validateRange';
import logger from '^/integrations/logging';

import aggregate, { AggregatedData } from '../aggregate';
import getByFollowing from '../getByFollowing';
Expand All @@ -12,21 +12,7 @@ export default async function getByFollowingAggregated(requester: Requester, ran

const data = await getByFollowing(requester, range.limit, range.offset);

const posts: AggregatedData[] = [];
const aggregates = data.map(item => aggregate(requester, item));

const promises = await Promise.allSettled(data.map(item => aggregate(requester, item)));

promises.forEach((promise) =>
{
if (promise.status === 'rejected')
{
logger.logError('Error aggrgating Post', promise.reason);

return;
}

posts.push(promise.value);
});

return posts;
return filterResolved(aggregates);
}
20 changes: 3 additions & 17 deletions src/domain/reaction/getByPostAggregated/getByPostAggregated.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

import { Requester } from '^/domain/authentication';
import filterResolved from '^/domain/common/filterResolved';
import { Range } from '^/domain/common/validateRange';
import logger from '^/integrations/logging';

import aggregate, { AggregatedData } from '../aggregate';
import getByPost from '../getByPost';
Expand All @@ -10,21 +10,7 @@ export default async function getByPostAggregated(requester: Requester, postId:
{
const data = await getByPost(postId, range.limit, range.offset);

const reactions: AggregatedData[] = [];
const aggregates = data.map(item => aggregate(requester, item));

const promises = await Promise.allSettled(data.map(item => aggregate(requester, item)));

promises.forEach((promise) =>
{
if (promise.status === 'rejected')
{
logger.logError('Error on aggregating Reaction', promise.reason);

return;
}

reactions.push(promise.value);
});

return reactions;
return filterResolved(aggregates);
}
Loading