01b222ced8
* fix(workspaces): allow workspace delete for paid workspaces * feat(gendo): multi region gendo with new api integration and limits * feat(gendo): user credits * feat: adds limits to gendo panel, and terms and conditions link * fix: reworks setting back camera view * feat(gendo): webhook signature verification * fix(gendo): nullability * test(blobstorage): fix test dependency injection --------- Co-authored-by: Dimitrie Stefanescu <didimitrie@gmail.com>
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { GetUserCredits, UpsertUserCredits } from '@/modules/gendo/domain/operations'
|
|
import { UserCredits } from '@/modules/gendo/domain/types'
|
|
import { InsufficientGendoRenderCreditsError } from '@/modules/gendo/errors/main'
|
|
import dayjs from 'dayjs'
|
|
|
|
type GetUserGendoAiCredits = (args: { userId: string }) => Promise<UserCredits>
|
|
|
|
export const getUserGendoAiCreditsFactory =
|
|
({
|
|
getUserCredits,
|
|
upsertUserCredits
|
|
}: {
|
|
getUserCredits: GetUserCredits
|
|
upsertUserCredits: UpsertUserCredits
|
|
}) =>
|
|
async ({ userId }: { userId: string }) => {
|
|
//
|
|
const userCredits = await getUserCredits({ userId })
|
|
if (userCredits && userCredits.resetDate.getTime() > new Date().getTime())
|
|
return userCredits
|
|
|
|
const resetDate = dayjs(userCredits?.resetDate || new Date())
|
|
.add(1, 'month')
|
|
.toDate()
|
|
|
|
const newCredits = {
|
|
used: 0,
|
|
userId,
|
|
resetDate
|
|
}
|
|
await upsertUserCredits({ userCredits: newCredits })
|
|
return newCredits
|
|
}
|
|
|
|
export const useUserGendoAiCreditsFactory =
|
|
({
|
|
getUserGendoAiCredits,
|
|
upsertUserCredits,
|
|
maxCredits
|
|
}: {
|
|
getUserGendoAiCredits: GetUserGendoAiCredits
|
|
upsertUserCredits: UpsertUserCredits
|
|
maxCredits: number
|
|
}) =>
|
|
async ({ userId, credits }: { userId: string; credits: number }) => {
|
|
const userCredits = await getUserGendoAiCredits({ userId })
|
|
userCredits.used += credits
|
|
if (userCredits.used > maxCredits) throw new InsufficientGendoRenderCreditsError()
|
|
await upsertUserCredits({ userCredits })
|
|
}
|