diff --git a/src/domain/common/filterResolved/filterResolved.ts b/src/domain/common/filterResolved/filterResolved.ts new file mode 100644 index 00000000..ce283e21 --- /dev/null +++ b/src/domain/common/filterResolved/filterResolved.ts @@ -0,0 +1,23 @@ + +import logger from '^/integrations/logging'; + +export default async function filterResolved(items: Promise[]): Promise +{ + 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; +} diff --git a/src/domain/common/filterResolved/index.ts b/src/domain/common/filterResolved/index.ts new file mode 100644 index 00000000..e0f30c23 --- /dev/null +++ b/src/domain/common/filterResolved/index.ts @@ -0,0 +1,2 @@ + +export { default } from './filterResolved'; diff --git a/src/domain/notification/getRecentAggregated/getRecentAggregated.ts b/src/domain/notification/getRecentAggregated/getRecentAggregated.ts index 93f94392..5fd64b6e 100644 --- a/src/domain/notification/getRecentAggregated/getRecentAggregated.ts +++ b/src/domain/notification/getRecentAggregated/getRecentAggregated.ts @@ -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'; @@ -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); } diff --git a/src/domain/post/exploreAggregated/exploreAggregated.ts b/src/domain/post/exploreAggregated/exploreAggregated.ts index 76ee6555..e04e245e 100644 --- a/src/domain/post/exploreAggregated/exploreAggregated.ts +++ b/src/domain/post/exploreAggregated/exploreAggregated.ts @@ -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'; @@ -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); } diff --git a/src/domain/post/getAllAggregated/getAllAggregated.ts b/src/domain/post/getAllAggregated/getAllAggregated.ts index ca40eb85..8cf28adc 100644 --- a/src/domain/post/getAllAggregated/getAllAggregated.ts +++ b/src/domain/post/getAllAggregated/getAllAggregated.ts @@ -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'; @@ -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); } diff --git a/src/domain/post/getByCreatorAggregated/getByCreatorAggregated.ts b/src/domain/post/getByCreatorAggregated/getByCreatorAggregated.ts index 5e63b1d7..9d0b421a 100644 --- a/src/domain/post/getByCreatorAggregated/getByCreatorAggregated.ts +++ b/src/domain/post/getByCreatorAggregated/getByCreatorAggregated.ts @@ -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'; @@ -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); } diff --git a/src/domain/post/getByFollowingAggregated/getByFollowingAggregated.ts b/src/domain/post/getByFollowingAggregated/getByFollowingAggregated.ts index f619e94a..730a6966 100644 --- a/src/domain/post/getByFollowingAggregated/getByFollowingAggregated.ts +++ b/src/domain/post/getByFollowingAggregated/getByFollowingAggregated.ts @@ -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'; @@ -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); } diff --git a/src/domain/reaction/getByPostAggregated/getByPostAggregated.ts b/src/domain/reaction/getByPostAggregated/getByPostAggregated.ts index 842038e7..a37ad94a 100644 --- a/src/domain/reaction/getByPostAggregated/getByPostAggregated.ts +++ b/src/domain/reaction/getByPostAggregated/getByPostAggregated.ts @@ -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'; @@ -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); }