Merge pull request #2947 from specklesystems/fabians/accessreq-ioc-10

chore(server): accessrequests IoC 10 - getPendingStreamRequestsFactory
This commit is contained in:
Alessandro Magionami
2024-09-11 14:17:21 +02:00
committed by GitHub
4 changed files with 37 additions and 18 deletions
@@ -27,6 +27,11 @@ export type CreateNewRequest = <
input: AccessRecordInput<T, I>
) => Promise<ServerAccessRequestRecord<T, I>>
export type GetPendingAccessRequests = <T extends AccessRequestType>(
resourceType: T,
resourceId: string
) => Promise<ServerAccessRequestRecord<T, string>[]>
export type GetUserProjectAccessRequest = (
userId: string,
projectId: string
@@ -41,3 +46,7 @@ export type RequestProjectAccess = (
userId: string,
projectId: string
) => Promise<StreamAccessRequestRecord>
export type GetPendingProjectRequests = (
projectId: string
) => Promise<StreamAccessRequestRecord[]>
@@ -3,11 +3,12 @@ import { AccessRequestsEmitter } from '@/modules/accessrequests/events/emitter'
import {
AccessRequestType,
createNewRequestFactory,
getPendingAccessRequestsFactory,
getUsersPendingAccessRequestFactory
} from '@/modules/accessrequests/repositories'
import {
getPendingProjectRequests,
getPendingStreamRequests,
getPendingProjectRequestsFactory,
getPendingStreamRequestsFactory,
getUserProjectAccessRequestFactory,
getUserStreamAccessRequestFactory,
processPendingProjectRequest,
@@ -41,6 +42,14 @@ const requestStreamAccess = requestStreamAccessFactory({
requestProjectAccess
})
const getPendingProjectRequests = getPendingProjectRequestsFactory({
getPendingAccessRequests: getPendingAccessRequestsFactory({ db })
})
const getPendingStreamRequests = getPendingStreamRequestsFactory({
getPendingProjectRequests
})
const resolvers: Resolvers = {
Mutation: {
async streamAccessRequestUse(_parent, args, ctx) {
@@ -1,6 +1,7 @@
import {
AccessRecordInput,
CreateNewRequest,
GetPendingAccessRequests,
GetUsersPendingAccessRequest
} from '@/modules/accessrequests/domain/operations'
import { ServerAccessRequests, Streams } from '@/modules/core/dbSchema'
@@ -70,7 +71,7 @@ const baseQueryFactory =
export const generateId = () => cryptoRandomString({ length: 10 })
export const getPendingAccessRequestsFactory =
(deps: { db: Knex }) =>
(deps: { db: Knex }): GetPendingAccessRequests =>
async <T extends AccessRequestType>(resourceType: T, resourceId: string) => {
if (!resourceId || !resourceType) {
throw new InvalidArgumentError('Resource type and ID missing')
@@ -9,7 +9,6 @@ import {
deleteRequestByIdFactory,
generateId,
getPendingAccessRequestFactory,
getPendingAccessRequestsFactory,
ServerAccessRequestRecord,
StreamAccessRequestRecord
} from '@/modules/accessrequests/repositories'
@@ -26,6 +25,8 @@ import { MaybeNullOrUndefined, Nullable } from '@/modules/shared/helpers/typeHel
import { db } from '@/db/knex'
import {
CreateNewRequest,
GetPendingAccessRequests,
GetPendingProjectRequests,
GetUserProjectAccessRequest,
GetUsersPendingAccessRequest,
GetUserStreamAccessRequest,
@@ -137,24 +138,23 @@ export const requestStreamAccessFactory =
/**
* Get pending project access requests
*/
export async function getPendingProjectRequests(
projectId: string
): Promise<StreamAccessRequestRecord[]> {
return await getPendingAccessRequestsFactory({ db })(
AccessRequestType.Stream,
projectId
)
}
export const getPendingProjectRequestsFactory =
(deps: {
getPendingAccessRequests: GetPendingAccessRequests
}): GetPendingProjectRequests =>
async (projectId: string): Promise<StreamAccessRequestRecord[]> => {
return await deps.getPendingAccessRequests(AccessRequestType.Stream, projectId)
}
/**
* Get pending stream access requests
*/
export async function getPendingStreamRequests(
streamId: string
): Promise<StreamAccessRequestGraphQLReturn[]> {
const reqs = await getPendingProjectRequests(streamId)
return reqs.map(buildStreamAccessRequestGraphQLReturn)
}
export const getPendingStreamRequestsFactory =
(deps: { getPendingProjectRequests: GetPendingProjectRequests }) =>
async (streamId: string): Promise<StreamAccessRequestGraphQLReturn[]> => {
const reqs = await deps.getPendingProjectRequests(streamId)
return reqs.map(buildStreamAccessRequestGraphQLReturn)
}
/**
* Accept or decline a pending access request