c6cd4c311d
* chore(serverinvites): repository refactor for multiregion * chore(serverinvites): remove migrated functions from old repository * chore(serverinvites): refactor serverInviteForToken resolver for multiregion * chore(serverinvites): invite processing service refactor for multiregion * chore(serverinvites): subscription refactor for multiregion * chore(serverinvites): move buildEmailContents to dedicated file * chore(serverinvites): deleteAllStreamInvites function multiregion refactor * chore(serverinvites): refactor deleteServerOnlyInvites multiregion repository * chore(serverinvites): complete repository refactor for multiregion * feat(serverinvites): create domain module in server invites * fix(serverinvites): no relative imports * feat(serverinvites): extract individual types from repository * feat(serverinvites): move interfaces to operations * fix(serverinvites): update imports referencing old interfaces file * fix(serverinvites): type mismatch for insert invite and delete old * chore(serverinvites): refactor to single repo function * test(serverinvites): fix tests * fix(serverinvites): use domain types in all places * feat(serverinvites): WIP unity * feat(serverinvites): move to new facory names and types * feat(serverinvites): fix tests * fix(serverinvites): use factory name --------- Co-authored-by: Alessandro Magionami <alessandro.magionami@gmail.com>
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { Roles } from '@speckle/shared'
|
|
|
|
import {
|
|
buildUserTarget,
|
|
ResourceTargets
|
|
} from '@/modules/serverinvites/helpers/inviteHelper'
|
|
import { InviteResult } from '@/modules/serverinvites/services/operations'
|
|
import { StreamRecord, UserRecord } from '@/modules/core/helpers/types'
|
|
import {
|
|
findResourceFactory,
|
|
findUserByTargetFactory,
|
|
insertInviteAndDeleteOldFactory
|
|
} from '@/modules/serverinvites/repositories/serverInvites'
|
|
import { Knex } from 'knex'
|
|
import { createAndSendInviteFactory } from '@/modules/serverinvites/services/inviteCreationService'
|
|
|
|
/**
|
|
* Create a new invite. User & userId are alternatives for each other, and so
|
|
* are stream & streamId
|
|
*/
|
|
export const createInviteDirectlyFactory =
|
|
// This is a test helper, so im ok, with leaking the internal abstractions here
|
|
|
|
|
|
({ db }: { db: Knex }) =>
|
|
async (
|
|
invite: {
|
|
email?: string
|
|
user?: UserRecord
|
|
userId?: string
|
|
message?: string
|
|
stream?: StreamRecord
|
|
streamId?: string
|
|
},
|
|
creatorId: string
|
|
): Promise<InviteResult> => {
|
|
const userId = invite.userId || invite.user?.id || null
|
|
const email = invite.email || null
|
|
if (!userId && !email) throw new Error('Either user/userId or email must be set')
|
|
|
|
const streamId = invite.streamId || invite.stream?.id
|
|
|
|
const target = email || buildUserTarget(userId)
|
|
if (!target) throw new Error('Cannot create invite without a target')
|
|
|
|
return await createAndSendInviteFactory({
|
|
findUserByTarget: findUserByTargetFactory(),
|
|
findResource: findResourceFactory(),
|
|
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db })
|
|
})({
|
|
target,
|
|
inviterId: creatorId,
|
|
message: invite.message,
|
|
resourceTarget: streamId ? ResourceTargets.Streams : undefined,
|
|
resourceId: streamId,
|
|
role: streamId ? Roles.Stream.Contributor : undefined
|
|
})
|
|
}
|