Files
speckle-server/packages/server/modules/core/services/streams.js
T
2024-10-14 10:44:45 +02:00

61 lines
1.8 KiB
JavaScript

const { InvalidArgumentError } = require('@/modules/shared/errors')
/**
* NOTE: Stop adding stuff to this service, create specialized service modules instead for various domains
* relating to streams. Otherwise we're not only breaking the single responsibility principle, but also
* increasing the chances of circular dependencies (which often cause actual errors) since everything relies
* on this service.
*/
module.exports = {
/**
* Get active user stream favorite date (using dataloader)
* @param {Object} p
* @param {import('@/modules/shared/index').GraphQLContext} p.ctx
* @param {string} p.streamId
* @returns {Promise<string | null>}
*/
async getActiveUserStreamFavoriteDate({ ctx, streamId }) {
if (!ctx.userId) {
return null
}
if (!streamId) {
throw new InvalidArgumentError('Invalid stream ID')
}
return (
(await ctx.loaders.streams.getUserFavoriteData.load(streamId))?.createdAt || null
)
},
/**
* Get stream favorites count (using dataloader)
* @param {Object} p
* @param {import('@/modules/shared/index').GraphQLContext} p.ctx
* @param {string} p.streamId
* @returns {Promise<number>}
*/
async getStreamFavoritesCount({ ctx, streamId }) {
if (!streamId) {
throw new InvalidArgumentError('Invalid stream ID')
}
return (await ctx.loaders.streams.getFavoritesCount.load(streamId)) || 0
},
/**
* @param {Object} p
* @param {import('@/modules/shared/index').GraphQLContext} p.ctx
* @param {string} p.userId
* @returns {Promise<number>}
*/
async getOwnedFavoritesCount({ ctx, userId }) {
if (!userId) {
throw new InvalidArgumentError('Invalid user ID')
}
return (await ctx.loaders.streams.getOwnedFavoritesCount.load(userId)) || 0
}
}