Skip to content
Open
24 changes: 15 additions & 9 deletions apps/sim/app/api/organizations/[id]/data-retention/route.ts
Original file line number Diff line number Diff line change
@@ -1,37 +1,40 @@
import { AuditAction, AuditResourceType, recordAudit } from '@sim/audit'
import { db } from '@sim/db'
import type { DataRetentionSettings } from '@sim/db/schema'
import { member, organization } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { updateOrganizationDataRetentionContract } from '@/lib/api/contracts/organization'
import {
type OrganizationRetentionValues,
updateOrganizationDataRetentionContract,
} from '@/lib/api/contracts/organization'
import { parseRequest, validationErrorResponse } from '@/lib/api/server'
import { getSession } from '@/lib/auth'
import {
CLEANUP_CONFIG,
type OrganizationRetentionSettings,
} from '@/lib/billing/cleanup-dispatcher'
import { CLEANUP_CONFIG } from '@/lib/billing/cleanup-dispatcher'
import { isOrganizationOnEnterprisePlan } from '@/lib/billing/core/subscription'
import { isBillingEnabled } from '@/lib/core/config/env-flags'
import { withRouteHandler } from '@/lib/core/utils/with-route-handler'

const logger = createLogger('DataRetentionAPI')

function enterpriseDefaults(): OrganizationRetentionSettings {
function enterpriseDefaults(): OrganizationRetentionValues {
return {
logRetentionHours: CLEANUP_CONFIG['cleanup-logs'].defaults.enterprise,
softDeleteRetentionHours: CLEANUP_CONFIG['cleanup-soft-deletes'].defaults.enterprise,
taskCleanupHours: CLEANUP_CONFIG['cleanup-tasks'].defaults.enterprise,
piiRedaction: null,
}
}

function normalizeConfigured(
settings: Partial<OrganizationRetentionSettings> | null | undefined
): OrganizationRetentionSettings {
settings: DataRetentionSettings | null | undefined
): OrganizationRetentionValues {
return {
logRetentionHours: settings?.logRetentionHours ?? null,
softDeleteRetentionHours: settings?.softDeleteRetentionHours ?? null,
taskCleanupHours: settings?.taskCleanupHours ?? null,
piiRedaction: settings?.piiRedaction?.rules ? { rules: settings.piiRedaction.rules } : null,
}
}

Expand Down Expand Up @@ -152,7 +155,7 @@ export const PUT = withRouteHandler(
}

const current = normalizeConfigured(currentOrg.dataRetentionSettings)
const merged: OrganizationRetentionSettings = { ...current }
const merged: DataRetentionSettings = { ...current }
if (body.logRetentionHours !== undefined) {
merged.logRetentionHours = body.logRetentionHours
}
Expand All @@ -162,6 +165,9 @@ export const PUT = withRouteHandler(
if (body.taskCleanupHours !== undefined) {
merged.taskCleanupHours = body.taskCleanupHours
}
if (body.piiRedaction !== undefined) {
merged.piiRedaction = body.piiRedaction
}

const [updated] = await db
.update(organization)
Expand Down
Loading
Loading