You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
2.0 KiB
53 lines
2.0 KiB
import { CosmosClient } from '@azure/cosmos'
|
|
import { Logger } from 'fastify'
|
|
import uniq from 'lodash/uniq'
|
|
import { DatabaseItem } from '../types'
|
|
|
|
import { containerFor, createQuerySpec, queryItems } from './database'
|
|
import { User, UserSubscription, UserBlock, UserItemType } from '../types/collections'
|
|
|
|
export async function getUsers(client: CosmosClient, ids: string[], logger?: Logger): Promise<User[]> {
|
|
return await queryItems<User>({
|
|
container: containerFor(client, 'Users'),
|
|
query: createQuerySpec(
|
|
`SELECT u.id, u.name, u.imageUrl, u.coverImageUrl, u['group'], u.created FROM Users u WHERE ARRAY_CONTAINS(@ids, u.id)`,
|
|
{
|
|
ids: uniq(ids),
|
|
}
|
|
),
|
|
logger,
|
|
})
|
|
}
|
|
|
|
export async function getUsersFromItems<T extends DatabaseItem>(client: CosmosClient, items: T[], logger?: Logger): Promise<User[]> {
|
|
return await getUsers(client, items.map(i => i.id), logger)
|
|
}
|
|
|
|
export async function getApprovedSubscriptions(client: CosmosClient, from: string, to: string, logger?: Logger): Promise<UserSubscription[]> {
|
|
return await queryItems<UserSubscription>({
|
|
container: containerFor(client, 'Users'),
|
|
query: createQuerySpec(
|
|
`SELECT u.id FROM Users u WHERE
|
|
u.subscriberId = @to
|
|
u.pk = @from AND
|
|
u.t = @type AND
|
|
u.pending = false`,
|
|
{ from, to, type: UserItemType.Subscription }
|
|
),
|
|
logger,
|
|
})
|
|
}
|
|
|
|
export async function getUserBlocks(client: CosmosClient, from: string, to: string[], logger?: Logger): Promise<UserBlock[]> {
|
|
return await queryItems<UserBlock>({
|
|
container: containerFor(client, 'Users'),
|
|
query: createQuerySpec(
|
|
`SELECT u.id FROM Users u WHERE
|
|
u.pk = @from
|
|
AND u.t = @type
|
|
AND ARRAY_CONTAINS(@to, u.blockedId)`,
|
|
{ from, to, type: UserItemType.Block }
|
|
),
|
|
logger,
|
|
})
|
|
}
|