Dwayne Harris
5 years ago
9 changed files with 112 additions and 74 deletions
-
3src/constants.ts
-
31src/lib/collections.ts
-
17src/lib/database.ts
-
17src/plugins/api/authentication.ts
-
14src/plugins/api/groups.ts
-
4src/plugins/api/index.ts
-
36src/plugins/api/posts.ts
-
61src/plugins/api/users.ts
-
3src/types/collections.ts
@ -0,0 +1,3 @@ |
|||
export const MAX_ID_LENGTH = 40 |
|||
export const MAX_NAME_LENGTH = 80 |
|||
export const SUBSCRIBER_BATCH_SIZE = 100 |
@ -1,45 +1,36 @@ |
|||
import { CosmosClient } from '@azure/cosmos' |
|||
import { Logger } from 'fastify' |
|||
import uniq from 'lodash/uniq' |
|||
|
|||
import { containerFor, createQuerySpec, IDatabaseItem } from './database' |
|||
import { containerFor, createQuerySpec, queryItems, IDatabaseItem } from './database' |
|||
import { IUser, IUserSubscription, IUserBlock } from '../types/collections' |
|||
|
|||
export async function getUsers(client: CosmosClient, ids: string[]): Promise<IUser[]> { |
|||
const container = await containerFor(client, 'Users') |
|||
|
|||
const { resources: users } = await container.items.query<IUser>(createQuerySpec( |
|||
export async function getUsers(client: CosmosClient, ids: string[], logger?: Logger): Promise<IUser[]> { |
|||
return await queryItems<IUser>(containerFor(client, 'Users'), 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), |
|||
}), {}).fetchAll() |
|||
|
|||
return users |
|||
}), logger) |
|||
} |
|||
|
|||
export async function getUsersFromItems<T extends IDatabaseItem>(client: CosmosClient, items: T[]): Promise<IUser[]> { |
|||
return await getUsers(client, items.map(i => i.id)) |
|||
} |
|||
|
|||
export async function getSubscriptions(client: CosmosClient, from: string, to: string): Promise<IUserSubscription[]> { |
|||
const query = createQuerySpec(`
|
|||
export async function getApprovedSubscriptions(client: CosmosClient, from: string, to: string, logger?: Logger): Promise<IUserSubscription[]> { |
|||
return await queryItems<IUserSubscription>(containerFor(client, 'Users'), createQuerySpec(`
|
|||
SELECT u.id FROM Users u WHERE |
|||
u.subscriberId = @to |
|||
u.partitionKey = @from AND |
|||
u.type = 'subscription' AND |
|||
u.pending = false |
|||
`, { from, to })
|
|||
|
|||
const { resources: subscriptions } = await containerFor(client, 'Users').items.query<IUserSubscription>(query, {}).fetchAll() |
|||
return subscriptions |
|||
`, { from, to }), logger)
|
|||
} |
|||
|
|||
export async function getUserBlocks(client: CosmosClient, from: string, to: string[]): Promise<IUserBlock[]> { |
|||
const query = createQuerySpec(`
|
|||
export async function getUserBlocks(client: CosmosClient, from: string, to: string[], logger?: Logger): Promise<IUserBlock[]> { |
|||
return await queryItems<IUserBlock>(containerFor(client, 'Users'), createQuerySpec(`
|
|||
SELECT u.id FROM Users u WHERE |
|||
u.partitionKey = @from |
|||
AND u.type = 'block' |
|||
AND ARRAY_CONTAINS(@to, u.blockedId) |
|||
`, { from, to })
|
|||
|
|||
const { resources: blocks } = await containerFor(client, 'Users').items.query<IUserBlock>(query, {}).fetchAll() |
|||
return blocks |
|||
`, { from, to }), logger)
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue