Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion apps/sim/app/api/files/uploads/finalizers.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { AuditAction, AuditResourceType, recordAudit } from '@sim/audit'
import { type Principal, resolvePrincipalAuditAttribution } from '@sim/auth/principal'
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import { type WorkspaceFileRow, workspaceFileColumns, workspaceFiles } from '@sim/db/schema'
import { generateId } from '@sim/utils/id'
import { eq, sql } from 'drizzle-orm'
Expand Down Expand Up @@ -354,7 +355,7 @@ async function insertOrLoadFileMetadata(

const now = new Date()
const [inserted] = await db
.insert(workspaceFiles)
.insert(withInsertColumns(workspaceFiles, workspaceFileColumns))
.values({
id: generateId(),
key: input.key,
Expand Down
5 changes: 3 additions & 2 deletions apps/sim/app/api/v1/admin/credits/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@

import { AuditAction, AuditResourceType, recordAudit } from '@sim/audit'
import { db } from '@sim/db'
import { organization, subscription, user, userStats } from '@sim/db/schema'
import { withInsertColumns } from '@sim/db/insert-columns'
import { organization, subscription, user, userStats, userStatsColumns } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { generateShortId } from '@sim/utils/id'
import { normalizeEmail } from '@sim/utils/string'
Expand Down Expand Up @@ -155,7 +156,7 @@ export const POST = withRouteHandler(
.limit(1)

if (!existingStats) {
await db.insert(userStats).values({
await db.insert(withInsertColumns(userStats, userStatsColumns)).values({
id: generateShortId(),
userId: entityId,
})
Expand Down
3 changes: 2 additions & 1 deletion apps/sim/app/api/v1/admin/users/[id]/billing/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
*/

import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
member,
organization,
Expand Down Expand Up @@ -247,7 +248,7 @@ export const PATCH = withRouteHandler(
if (existingStats) {
await db.update(userStats).set(updateData).where(eq(userStats.userId, userId))
} else {
await db.insert(userStats).values({
await db.insert(withInsertColumns(userStats, userStatsColumns)).values({
id: generateShortId(),
userId,
...updateData,
Expand Down
3 changes: 2 additions & 1 deletion apps/sim/ee/workspace-forking/lib/copy/copy-files.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import { workspaceFileColumns, workspaceFiles } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { getErrorMessage } from '@sim/utils/errors'
Expand Down Expand Up @@ -362,7 +363,7 @@ export async function executeForkFileBlobCopies(
await db.transaction(async (tx) => {
assertForkCopyActive(control)
const [inserted] = await tx
.insert(workspaceFiles)
.insert(withInsertColumns(workspaceFiles, workspaceFileColumns))
.values({
id: task.targetFileId,
key: task.targetKey,
Expand Down
4 changes: 3 additions & 1 deletion apps/sim/lib/admin/dashboard.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { AuditAction, AuditResourceType, recordAudit } from '@sim/audit'
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
member,
organization,
Expand All @@ -11,6 +12,7 @@ import {
usageLog,
user,
userStats,
userStatsColumns,
workspace,
} from '@sim/db/schema'
import { generateId } from '@sim/utils/id'
Expand Down Expand Up @@ -1524,7 +1526,7 @@ export async function grantDashboardUserBalance(
? null
: getPerUserMinimumLimit(initialSubscription).toString()
await tx
.insert(userStats)
.insert(withInsertColumns(userStats, userStatsColumns))
.values({
id: generateId(),
userId,
Expand Down
3 changes: 2 additions & 1 deletion apps/sim/lib/auth/anonymous.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import * as schema from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { generateId } from '@sim/utils/id'
Expand Down Expand Up @@ -37,7 +38,7 @@ export async function ensureAnonymousUserExists(): Promise<void> {
})

if (!existingStats) {
await db.insert(schema.userStats).values({
await db.insert(withInsertColumns(schema.userStats, schema.userStatsColumns)).values({
id: generateId(),
userId: ANONYMOUS_USER_ID,
currentUsageLimit: '10000000000',
Expand Down
5 changes: 3 additions & 2 deletions apps/sim/lib/billing/core/usage.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import { member, organization, settings, user, userStats, userStatsColumns } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { isOrgAdminRole } from '@sim/platform-authz/workspace'
Expand Down Expand Up @@ -155,7 +156,7 @@ export async function getOrgUsageLimit(
*/
export async function handleNewUser(userId: string): Promise<void> {
try {
await db.insert(userStats).values({
await db.insert(withInsertColumns(userStats, userStatsColumns)).values({
id: generateId(),
userId: userId,
currentUsageLimit: getFreeTierLimit().toString(),
Expand All @@ -182,7 +183,7 @@ export async function handleNewUser(userId: string): Promise<void> {
*/
export async function ensureUserStatsExists(userId: string): Promise<void> {
await db
.insert(userStats)
.insert(withInsertColumns(userStats, userStatsColumns))
.values({
id: generateId(),
userId: userId,
Expand Down
4 changes: 3 additions & 1 deletion apps/sim/lib/billing/enterprise-provisioning.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { AuditAction, AuditResourceType, recordAudit, recordAuditOnce } from '@sim/audit'
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
invitation,
invitationWorkspaceGrant,
member,
organization,
organizationColumns,
outboxEvent,
permissions,
subscription,
Expand Down Expand Up @@ -1638,7 +1640,7 @@ export async function issueEnterpriseProvisioning(

if (organizationToCreate) {
const now = new Date()
await tx.insert(organization).values({
await tx.insert(withInsertColumns(organization, organizationColumns)).values({
id: organizationToCreate.id,
name: organizationToCreate.name,
slug: slugifyOrganizationName(organizationToCreate.name, organizationToCreate.id),
Expand Down
11 changes: 9 additions & 2 deletions apps/sim/lib/billing/organization.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
import { db } from '@sim/db'
import { member, organization, subscription as subscriptionTable, user } from '@sim/db/schema'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
member,
organization,
organizationColumns,
subscription as subscriptionTable,
user,
} from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { isOrgAdminRole } from '@sim/platform-authz/workspace'
import { generateId } from '@sim/utils/id'
Expand Down Expand Up @@ -442,7 +449,7 @@ export async function ensureOrganizationForTeamSubscriptionTx(

organizationId = `org_${generateId()}`
const now = new Date()
await tx.insert(organization).values({
await tx.insert(withInsertColumns(organization, organizationColumns)).values({
id: organizationId,
name: userData.name || `${userData.email || 'User'}'s Team`,
slug: `${userId}-team-${generateId()}`
Expand Down
5 changes: 3 additions & 2 deletions apps/sim/lib/billing/organizations/create-organization.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { db } from '@sim/db'
import { member, organization } from '@sim/db/schema'
import { withInsertColumns } from '@sim/db/insert-columns'
import { member, organization, organizationColumns } from '@sim/db/schema'
import { generateId } from '@sim/utils/id'
import { and, eq, ne } from 'drizzle-orm'
import { acquireUserBillingIdentityLock } from '@/lib/billing/organizations/billing-identity-lock'
Expand Down Expand Up @@ -100,7 +101,7 @@ export async function createOrganizationWithOwnerTx(
throw new OrganizationSlugTakenError(slug)
}

await tx.insert(organization).values({
await tx.insert(withInsertColumns(organization, organizationColumns)).values({
id: organizationId,
name,
slug,
Expand Down
4 changes: 3 additions & 1 deletion apps/sim/lib/billing/organizations/membership.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
account,
credential,
Expand All @@ -18,6 +19,7 @@ import {
subscription as subscriptionTable,
user,
userStats,
userStatsColumns,
workspace,
workspaceFiles,
} from '@sim/db/schema'
Expand Down Expand Up @@ -1837,7 +1839,7 @@ export async function transferOrganizationOwnership(

if (oldStats) {
await tx
.insert(userStats)
.insert(withInsertColumns(userStats, userStatsColumns))
.values({
id: generateId(),
userId: newOwnerUserId,
Expand Down
5 changes: 3 additions & 2 deletions apps/sim/lib/billing/storage/tracking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
* writes any of them or deletes a locked row.
*/

import { organization, userStats, workspace } from '@sim/db/schema'
import { withInsertColumns } from '@sim/db/insert-columns'
import { organization, userStats, userStatsColumns, workspace } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { generateId } from '@sim/utils/id'
import { isRecordLike } from '@sim/utils/object'
Expand Down Expand Up @@ -631,7 +632,7 @@ export async function checkAndIncrementStorageUsageInTx(

if (!orgScoped) {
await tx
.insert(userStats)
.insert(withInsertColumns(userStats, userStatsColumns))
.values({
id: generateId(),
userId,
Expand Down
3 changes: 2 additions & 1 deletion apps/sim/lib/copilot/chat/fork-chat-files.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { withInsertColumns } from '@sim/db/insert-columns'
import { type WorkspaceFileRow, workspaceFileColumns, workspaceFiles } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { getErrorMessage } from '@sim/utils/errors'
Expand Down Expand Up @@ -145,7 +146,7 @@ export async function planChatFileCopies(params: {
// Ids and keys are generated client-side, so one multi-row insert suffices —
// no per-row round trips while the fork transaction is held open.
if (copyRows.length > 0) {
await tx.insert(workspaceFiles).values(copyRows)
await tx.insert(withInsertColumns(workspaceFiles, workspaceFileColumns)).values(copyRows)
for (const source of rows) {
const targetId = idMap.get(source.id)
if (!targetId) continue
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
/** Real storage, encryption, migration, and authorization; no external GitLab calls. */
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
credential,
credentialGroup,
credentialGroupEnrollment,
member,
organization,
organizationColumns,
permissions,
resourcePolicy,
user,
Expand Down Expand Up @@ -95,7 +97,7 @@ describe('organization personal tokens', () => {
updatedAt: now,
}))
)
await db.insert(organization).values(
await db.insert(withInsertColumns(organization, organizationColumns)).values(
[ids.org, ids.foreignOrg].map((id) => ({
id,
name: 'Token fixture organization',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/
import { CallToolResultSchema } from '@modelcontextprotocol/sdk/types.js'
import type { Principal } from '@sim/auth/principal'
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
apiKey,
document,
Expand All @@ -25,6 +26,7 @@ import {
oauthClient,
oauthConsent,
organization,
organizationColumns,
organizationSearchIntegration,
rateLimitBucket,
user,
Expand Down Expand Up @@ -252,7 +254,7 @@ describe('organization Search MCP with real ingestion and current access', () =>
updatedAt: new Date(),
}))
)
await db.insert(organization).values({
await db.insert(withInsertColumns(organization, organizationColumns)).values({
id: otherOrganizationId,
name: 'Other organization MCP fixture',
slug: otherOrganizationId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { createHash } from 'node:crypto'
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
credential,
credentialGroup,
Expand All @@ -11,6 +12,7 @@ import {
knowledgeExternalGroup,
knowledgeExternalGroupMember,
organization,
organizationColumns,
permissions,
user,
workspace,
Expand Down Expand Up @@ -69,7 +71,7 @@ export async function seedKnowledgeAclFixture(
updatedAt: now,
},
])
await db.insert(organization).values({
await db.insert(withInsertColumns(organization, organizationColumns)).values({
id: ids.organizationId,
name: 'ACL integration organization',
slug: ids.organizationId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
/** Exercises real PostgreSQL locks and constraints using only isolated, explicitly cleaned fixtures. */
import type { OrganizationDelegatedPrincipal } from '@sim/auth/principal'
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
copilotChats,
credential,
organization,
organizationColumns,
outboxEvent,
slackSearchInstallation,
slackSearchTurn,
Expand Down Expand Up @@ -72,7 +74,7 @@ describe('durable Slack Search turns in PostgreSQL', () => {
}))
)
await db
.insert(organization)
.insert(withInsertColumns(organization, organizationColumns))
.values({ id: organizationId, name: 'Slack queue fixture', slug: organizationId })
await db.insert(credential).values({
id: credentialId,
Expand Down
3 changes: 2 additions & 1 deletion apps/sim/lib/logs/execution/logger.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { db, dbFor } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
organization,
usageLog,
Expand Down Expand Up @@ -698,7 +699,7 @@ export class ExecutionLogger implements IExecutionLoggerService {
const startTime = new Date()

const [workflowLog] = await execDb
.insert(workflowExecutionLogs)
.insert(withInsertColumns(workflowExecutionLogs, workflowExecutionLogColumns))
.values({
id: generateId(),
workflowId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import { randomBytes } from 'crypto'
import { db } from '@sim/db'
import { withInsertColumns } from '@sim/db/insert-columns'
import {
uploadSession,
type WorkspaceFileRow,
Expand Down Expand Up @@ -266,7 +267,7 @@ async function insertWorkspaceFileMetadataInTx(
metadata: WorkspaceFileMetadataInsert
): Promise<WorkspaceFileRow | undefined> {
const [inserted] = await tx
.insert(workspaceFiles)
.insert(withInsertColumns(workspaceFiles, workspaceFileColumns))
.values({
...omit(metadata, ['size']),
sizeBytes: metadata.size,
Expand Down Expand Up @@ -1056,7 +1057,7 @@ export async function trackChatUpload(

await db.transaction(async (tx) => {
const [inserted] = await tx
.insert(workspaceFiles)
.insert(withInsertColumns(workspaceFiles, workspaceFileColumns))
.values({
id: fileId,
key: s3Key,
Expand Down
Loading
Loading