chore(core): limit versions
This commit is contained in:
@@ -5,7 +5,7 @@ import {
|
||||
filteredSubscribe,
|
||||
ProjectSubscriptions
|
||||
} from '@/modules/shared/utils/subscriptions'
|
||||
import { getServerOrigin } from '@/modules/shared/helpers/envHelper'
|
||||
import { getFeatureFlags, getServerOrigin } from '@/modules/shared/helpers/envHelper'
|
||||
import {
|
||||
batchDeleteCommitsFactory,
|
||||
batchMoveCommitsFactory
|
||||
@@ -50,6 +50,12 @@ import { getProjectDbClient } from '@/modules/multiregion/utils/dbSelector'
|
||||
import coreModule from '@/modules/core'
|
||||
import { getEventBus } from '@/modules/shared/services/eventBus'
|
||||
import { StreamNotFoundError } from '@/modules/core/errors/stream'
|
||||
import { getLimitedReferencedObjectFactory } from '@/modules/core/services/versions/limits'
|
||||
|
||||
const {
|
||||
FF_FORCE_PERSONAL_PROJECTS_LIMITS_ENABLED,
|
||||
FF_WEB_2944_VERSIONS_LIMITS_ENABLED
|
||||
} = getFeatureFlags()
|
||||
|
||||
export = {
|
||||
Project: {
|
||||
@@ -93,6 +99,32 @@ export = {
|
||||
})
|
||||
const path = `/preview/${stream.id}/commits/${parent.id}`
|
||||
return new URL(path, getServerOrigin()).toString()
|
||||
},
|
||||
referencedObject: async (parent, _args, ctx) => {
|
||||
if (!FF_WEB_2944_VERSIONS_LIMITS_ENABLED) {
|
||||
return parent.referencedObject
|
||||
}
|
||||
const projectDB = await getProjectDbClient({ projectId: parent.streamId })
|
||||
const project = await ctx.loaders
|
||||
.forRegion({ db: projectDB })
|
||||
.commits.getCommitStream.load(parent.id)
|
||||
|
||||
if (!project) {
|
||||
throw new StreamNotFoundError('Project not found', {
|
||||
info: { streamId: parent.streamId }
|
||||
})
|
||||
}
|
||||
|
||||
const lastVersion = await ctx.loaders.streams.getLastVersion.load(project.id)
|
||||
if (lastVersion?.id === parent.id) return parent.referencedObject
|
||||
|
||||
return await getLimitedReferencedObjectFactory({
|
||||
environment: {
|
||||
personalProjectsLimitEnabled: FF_FORCE_PERSONAL_PROJECTS_LIMITS_ENABLED
|
||||
}
|
||||
// getWorkspacePlan: ctx.loaders.gatekeeper?.getWorkspacePlan
|
||||
// .load as GetWorkspacePlan
|
||||
})({ version: parent, project })
|
||||
}
|
||||
},
|
||||
Mutation: {
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
import { Version } from '@/modules/core/domain/commits/types'
|
||||
import { Project } from '@/modules/core/domain/streams/types'
|
||||
import dayjs from 'dayjs'
|
||||
|
||||
export const getLimitedReferencedObjectFactory =
|
||||
({
|
||||
environment: { personalProjectsLimitEnabled }
|
||||
}: // getWorkspacePlan
|
||||
{
|
||||
environment: { personalProjectsLimitEnabled: boolean }
|
||||
// getWorkspacePlan: GetWorkspacePlan
|
||||
}) =>
|
||||
async ({
|
||||
version,
|
||||
project
|
||||
}: {
|
||||
version: Pick<Version, 'referencedObject' | 'createdAt'>
|
||||
project: Pick<Project, 'workspaceId'>
|
||||
}) => {
|
||||
if (project?.workspaceId) {
|
||||
// TODO: needs the plan to get limits according to it
|
||||
// const workspacePlan = await getWorkspacePlan({
|
||||
// workspaceId: project.workspaceId
|
||||
// })
|
||||
// TODO: get plan limits
|
||||
}
|
||||
|
||||
if (!personalProjectsLimitEnabled) {
|
||||
return version.referencedObject
|
||||
}
|
||||
|
||||
const oneWeekAgo = dayjs().subtract(1, 'week')
|
||||
|
||||
if (oneWeekAgo.isAfter(version.createdAt)) return ''
|
||||
return version.referencedObject
|
||||
}
|
||||
@@ -83,6 +83,16 @@ export const parseFeatureFlags = (
|
||||
FF_MOVE_PROJECT_REGION_ENABLED: {
|
||||
schema: z.boolean(),
|
||||
defaults: { production: false, _: true }
|
||||
},
|
||||
// Enable limits on personal projects
|
||||
FF_FORCE_PERSONAL_PROJECTS_LIMITS_ENABLED: {
|
||||
schema: z.boolean(),
|
||||
defaults: { production: false, _: false }
|
||||
},
|
||||
// Temporary FF to enable WIP on version limits
|
||||
FF_WEB_2944_VERSIONS_LIMITS_ENABLED: {
|
||||
schema: z.boolean(),
|
||||
defaults: { production: false, _: false }
|
||||
}
|
||||
})
|
||||
|
||||
@@ -113,6 +123,8 @@ export type FeatureFlags = {
|
||||
FF_OBJECTS_STREAMING_FIX: boolean
|
||||
FF_MOVE_PROJECT_REGION_ENABLED: boolean
|
||||
FF_NO_PERSONAL_EMAILS_ENABLED: boolean
|
||||
FF_FORCE_PERSONAL_PROJECTS_LIMITS_ENABLED: boolean
|
||||
FF_WEB_2944_VERSIONS_LIMITS_ENABLED: boolean
|
||||
}
|
||||
|
||||
export function getFeatureFlags(): FeatureFlags {
|
||||
|
||||
Reference in New Issue
Block a user