-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: updated OnCallWithNestContextRequest to use single object
BREAKING CHANGE: updated all onCall and functions to now use a single request object instead of multiple parameters
- Loading branch information
Showing
31 changed files
with
387 additions
and
239 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,10 @@ | ||
import { ProfileDocument, UpdateProfileParams } from '@dereekb/demo-firebase'; | ||
import { DemoUpdateModelfunction } from '../function'; | ||
import { profileForUser } from './profile.util'; | ||
import { profileForUserRequest } from './profile.util'; | ||
|
||
export const updateProfile: DemoUpdateModelfunction<UpdateProfileParams> = async (nest, data, context) => { | ||
export const updateProfile: DemoUpdateModelfunction<UpdateProfileParams> = async (request) => { | ||
const { nest, auth, data } = request; | ||
const updateProfile = await nest.profileActions.updateProfile(data); | ||
|
||
const uid = context.auth.uid; | ||
let profileDocument: ProfileDocument; | ||
|
||
if (updateProfile.params.key != null) { | ||
profileDocument = await nest.useModel('profile', { | ||
context, | ||
key: updateProfile.params.key, | ||
roles: 'read', | ||
use: (x) => x.document | ||
}); | ||
|
||
// Alternative way using model() chain | ||
/* | ||
profileDocument = await nest.model(context)('profile')(updateProfile.params.key)('read')((x) => { | ||
return x.document; | ||
}); | ||
*/ | ||
} else { | ||
profileDocument = profileForUser(nest, uid); | ||
} | ||
|
||
const profileDocument: ProfileDocument = await profileForUserRequest(request); | ||
await updateProfile(profileDocument); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,37 @@ | ||
import { ProfileDocument } from '@dereekb/demo-firebase'; | ||
import { ProfileDocument, ProfileParams } from '@dereekb/demo-firebase'; | ||
import { FirebaseAuthUserId } from '@dereekb/firebase'; | ||
import { NestContextCallableRequestWithAuth } from '@dereekb/firebase-server'; | ||
import { DemoApiNestContext } from '../function'; | ||
|
||
export function profileForUser(nest: DemoApiNestContext, uid: FirebaseAuthUserId): ProfileDocument { | ||
const profileFirestoreCollection = nest.demoFirestoreCollections.profileCollection; | ||
const profileDocument = profileFirestoreCollection.documentAccessor().loadDocumentForPath(uid); | ||
return profileDocument; | ||
} | ||
|
||
export async function profileForUserRequest(request: NestContextCallableRequestWithAuth<DemoApiNestContext, ProfileParams>): Promise<ProfileDocument> { | ||
const { nest, data: params, auth } = request; | ||
const profileFirestoreCollection = nest.demoFirestoreCollections.profileCollection; | ||
|
||
let profileDocument: ProfileDocument; | ||
|
||
if (params.key != null) { | ||
profileDocument = await nest.useModel('profile', { | ||
request, | ||
key: params.key, | ||
roles: 'owner', | ||
use: (x) => x.document | ||
}); | ||
|
||
// Alternative way using model() chain | ||
/* | ||
profileDocument = await nest.model(context)('profile')(updateProfile.params.key)('read')((x) => { | ||
return x.document; | ||
}); | ||
*/ | ||
} else { | ||
profileDocument = profileForUser(nest, auth.uid); | ||
} | ||
|
||
return profileDocument; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
import { Configurable, PromiseOrValue } from '@dereekb/util'; | ||
import { CallableRequest } from 'firebase-functions/lib/common/providers/https'; | ||
import { NestApplicationContextRequest, NestContextCallableRequest, NestContextCallableRequestWithAuth } from './nest'; | ||
import { isContextWithAuthData } from '../../function/context'; | ||
import { unauthenticatedContextHasNoUidError } from '../../function/error'; | ||
import { MakeNestContext } from '../nest.provider'; | ||
|
||
// MARK: Application | ||
export type OnCallWithNestApplicationRequest<I> = NestApplicationContextRequest<CallableRequest<I>>; | ||
|
||
/** | ||
* Runnable function that is passed an INestApplicationContext in addition to the usual data/context provided by firebase. | ||
*/ | ||
export type OnCallWithNestApplication<I = unknown, O = unknown> = (request: OnCallWithNestApplicationRequest<I>) => PromiseOrValue<O>; | ||
|
||
// MARK: Context | ||
export type OnCallWithNestContextRequest<N, I> = NestContextCallableRequest<N, I>; | ||
|
||
/** | ||
* Runnable function that is passed an arbitrary nest context object in addition to the usual data/context provided by firebase. | ||
*/ | ||
export type OnCallWithNestContext<N, I = unknown, O = unknown> = (request: OnCallWithNestContextRequest<N, I>) => PromiseOrValue<O>; | ||
|
||
export function setNestContextOnRequest<N, I>(makeNestContext: MakeNestContext<N>, request: OnCallWithNestApplicationRequest<I>): OnCallWithNestContextRequest<N, I> { | ||
(request as unknown as Configurable<OnCallWithNestContextRequest<N, I>>).nest = makeNestContext(request.nestApplication); | ||
return request as unknown as OnCallWithNestContextRequest<N, I>; | ||
} | ||
|
||
// MARK: Context With Auth | ||
export type OnCallWithAuthorizedNestContext<N, I = unknown, O = unknown> = (request: NestContextCallableRequestWithAuth<N, I>) => PromiseOrValue<O>; | ||
|
||
/** | ||
* Creates an OnCallWithNestContext wrapper that validates the input CallableContext to assert the context has auth data before entering the function. | ||
* | ||
* @param fn | ||
* @returns | ||
*/ | ||
export function inAuthContext<N, I, O>(fn: OnCallWithAuthorizedNestContext<N, I, O>): OnCallWithNestContext<N, I, O> { | ||
return (request) => { | ||
if (isContextWithAuthData(request)) { | ||
return fn(request); | ||
} else { | ||
throw unauthenticatedContextHasNoUidError(); | ||
} | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export * from './v1'; | ||
export * from './v2'; | ||
export * from './context'; | ||
export * from './transform'; | ||
export * from './call'; | ||
export * from './nest'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
import { INestApplicationContext } from '@nestjs/common'; | ||
import { CallableRequest } from 'firebase-functions/lib/common/providers/https'; | ||
import { CallableContextWithAuthData } from '../../function/context'; | ||
|
||
export type NestApplicationContextRequest<R> = R & { | ||
readonly nestApplication: INestApplicationContext; | ||
}; | ||
|
||
export type NestRef<N> = { | ||
readonly nest: N; | ||
}; | ||
|
||
export type NestContextRequest<N, R> = R & { | ||
readonly nest: N; | ||
}; | ||
|
||
export function injectNestIntoRequest<N, R>(nest: N, request: R): NestContextRequest<N, R> { | ||
return { | ||
...request, | ||
nest | ||
}; | ||
} | ||
|
||
export function injectNestApplicationContextIntoRequest<R>(nestContext: INestApplicationContext, request: R): NestApplicationContextRequest<R> { | ||
return { | ||
...request, | ||
nestApplication: nestContext | ||
}; | ||
} | ||
|
||
// MARK: Types | ||
export type NestContextCallableRequest<N, I> = NestContextRequest<N, CallableRequest<I>>; | ||
|
||
/** | ||
* NestContextCallableRequest that has valid auth attached to it. | ||
*/ | ||
export type NestContextCallableRequestWithAuth<N, I> = CallableContextWithAuthData<NestContextCallableRequest<N, I>>; |
34 changes: 0 additions & 34 deletions
34
packages/firebase-server/src/lib/nest/function/transform.ts
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.