From 3f28680a448964a3f1abdbc5c8cea2c1ac6faad8 Mon Sep 17 00:00:00 2001 From: Rob Colbert Date: Fri, 1 May 2026 14:47:18 -0400 Subject: [PATCH] correctly generate nanoid IDs in default clauses --- gadget-code/src/models/ai-provider.ts | 2 +- gadget-code/src/models/api-client-log.ts | 2 +- gadget-code/src/models/api-client.ts | 2 +- gadget-code/src/models/chat-session.ts | 2 +- gadget-code/src/models/chat-turn.ts | 2 ++ gadget-code/src/models/csrf-token.ts | 2 ++ gadget-code/src/models/drone-monitor.ts | 2 ++ gadget-code/src/models/drone-registration.ts | 2 +- gadget-code/src/models/email-log.ts | 2 +- gadget-code/src/models/email-verification.ts | 3 +++ gadget-code/src/models/ide-session.ts | 2 +- gadget-code/src/models/project.ts | 2 ++ gadget-code/src/models/user.ts | 2 +- gadget-code/src/models/web-token.ts | 2 +- gadget-code/src/models/web-visit.ts | 2 +- 15 files changed, 21 insertions(+), 10 deletions(-) diff --git a/gadget-code/src/models/ai-provider.ts b/gadget-code/src/models/ai-provider.ts index 61287b8..59cfa49 100644 --- a/gadget-code/src/models/ai-provider.ts +++ b/gadget-code/src/models/ai-provider.ts @@ -59,7 +59,7 @@ export const AiModelSchema = new Schema( ); export const AiProviderSchema = new Schema({ - _id: { type: String, required: true, default: nanoid, unique: true }, + _id: { type: String, default: () => nanoid() }, name: { type: String, required: true }, apiType: { type: String, enum: ["ollama", "openai"], required: true }, baseUrl: { type: String, required: true }, diff --git a/gadget-code/src/models/api-client-log.ts b/gadget-code/src/models/api-client-log.ts index cbecd4e..96cc1eb 100644 --- a/gadget-code/src/models/api-client-log.ts +++ b/gadget-code/src/models/api-client-log.ts @@ -16,7 +16,7 @@ export interface IApiClientLog { url: string; } export const ApiClientLogSchema = new Schema({ - _id: { type: String, default: nanoid, required: true, unique: true }, + _id: { type: String, default: () => nanoid() }, client: { type: String, required: true, index: 1, ref: "ApiClient" }, createdAt: { type: Date, diff --git a/gadget-code/src/models/api-client.ts b/gadget-code/src/models/api-client.ts index d6d654f..ff30ac9 100644 --- a/gadget-code/src/models/api-client.ts +++ b/gadget-code/src/models/api-client.ts @@ -23,7 +23,7 @@ export interface IApiClient { secret: string; } const ApiClientSchema = new Schema({ - _id: { type: String, default: nanoid, required: true, unique: true }, + _id: { type: String, default: () => nanoid() }, createdAt: { type: Date, required: true }, updatedAt: { type: Date, required: true }, status: { diff --git a/gadget-code/src/models/chat-session.ts b/gadget-code/src/models/chat-session.ts index 7025e95..81016cf 100644 --- a/gadget-code/src/models/chat-session.ts +++ b/gadget-code/src/models/chat-session.ts @@ -11,7 +11,7 @@ export const ChatSessionPinSchema = new Schema({ }); export const ChatSessionSchema = new Schema({ - _id: { type: String, default: nanoid, required: true, unique: true }, + _id: { type: String, default: () => nanoid() }, createdAt: { type: Date, default: Date.now, required: true }, lastMessageAt: { type: Date }, user: { type: String, required: true, index: 1, ref: "User" }, diff --git a/gadget-code/src/models/chat-turn.ts b/gadget-code/src/models/chat-turn.ts index 6333362..db17ebe 100644 --- a/gadget-code/src/models/chat-turn.ts +++ b/gadget-code/src/models/chat-turn.ts @@ -13,6 +13,7 @@ import { IChatTurn, IChatTurnStats, } from "@gadget/api"; +import { nanoid } from "nanoid"; export const ChatTurnPromptsSchema = new Schema({ user: { type: String, required: true }, @@ -44,6 +45,7 @@ export const ChatSubagentProcessSchema = new Schema({ }); export const ChatTurnSchema = new Schema({ + _id: { type: String, default: () => nanoid() }, createdAt: { type: Date, default: Date.now, required: true }, user: { type: String, required: true, ref: "User" }, project: { type: String, required: false, ref: "Project" }, diff --git a/gadget-code/src/models/csrf-token.ts b/gadget-code/src/models/csrf-token.ts index 8a887a6..e3e40b5 100644 --- a/gadget-code/src/models/csrf-token.ts +++ b/gadget-code/src/models/csrf-token.ts @@ -5,6 +5,7 @@ import { Schema, model } from "mongoose"; import { GadgetId, IUser } from "@gadget/api"; +import { nanoid } from "nanoid"; export interface ICsrfToken { _id: GadgetId; @@ -22,6 +23,7 @@ export interface ICsrfToken { } const CsrfTokenSchema = new Schema({ + _id: { type: String, default: () => nanoid() }, created: { type: Date, required: true, diff --git a/gadget-code/src/models/drone-monitor.ts b/gadget-code/src/models/drone-monitor.ts index 619d6e8..b986459 100644 --- a/gadget-code/src/models/drone-monitor.ts +++ b/gadget-code/src/models/drone-monitor.ts @@ -4,6 +4,7 @@ import { Schema, model } from "mongoose"; import { IDroneMonitor, IMemoryMonitor } from "@gadget/api"; +import { nanoid } from "nanoid"; export const MemoryMonitorSchema = new Schema({ count: { type: Number, default: 0, required: true }, @@ -11,6 +12,7 @@ export const MemoryMonitorSchema = new Schema({ }); export const DroneMonitorSchema = new Schema({ + _id: { type: String, default: () => nanoid() }, registration: { type: String, required: true, index: 1 }, timestamp: { type: Date, required: true, index: -1 }, memory: { diff --git a/gadget-code/src/models/drone-registration.ts b/gadget-code/src/models/drone-registration.ts index 899bc7b..1bcad9e 100644 --- a/gadget-code/src/models/drone-registration.ts +++ b/gadget-code/src/models/drone-registration.ts @@ -7,7 +7,7 @@ import { DroneStatus, IDroneRegistration } from "@gadget/api"; import { nanoid } from "nanoid"; export const DroneRegistrationSchema = new Schema({ - _id: { type: String, default: nanoid, required: true, unique: true }, + _id: { type: String, default: () => nanoid() }, createdAt: { type: Date, required: true }, updatedAt: { type: Date, required: false }, user: { type: String, ref: "User", required: true }, diff --git a/gadget-code/src/models/email-log.ts b/gadget-code/src/models/email-log.ts index 96441ac..50e570d 100644 --- a/gadget-code/src/models/email-log.ts +++ b/gadget-code/src/models/email-log.ts @@ -17,7 +17,7 @@ export interface IEmailLog { messageId: string; } export const EmailLogSchema = new Schema({ - _id: { type: String, default: nanoid, required: true, unique: true }, + _id: { type: String, default: () => nanoid() }, created: { type: Date, default: Date.now, required: true, index: -1 }, from: { type: String, required: true }, to: { type: String, required: true }, diff --git a/gadget-code/src/models/email-verification.ts b/gadget-code/src/models/email-verification.ts index 076f0ae..4eaa878 100644 --- a/gadget-code/src/models/email-verification.ts +++ b/gadget-code/src/models/email-verification.ts @@ -4,6 +4,7 @@ import { Schema, model } from "mongoose"; import { GadgetId, IUser } from "@gadget/api"; +import { nanoid } from "nanoid"; export enum EmailVerificationStatus { Pending = "pending", @@ -12,12 +13,14 @@ export enum EmailVerificationStatus { } export interface IEmailVerification { + _id: GadgetId; createdAt: Date; user: IUser | GadgetId; code: string; status: EmailVerificationStatus; } export const EmailVerificationSchema = new Schema({ + _id: { type: String, default: () => nanoid() }, createdAt: { type: Date, required: true, default: Date.now }, user: { type: String, required: true, index: 1, ref: "User" }, code: { type: String, required: true, unique: true }, diff --git a/gadget-code/src/models/ide-session.ts b/gadget-code/src/models/ide-session.ts index 925cb77..05e4cce 100644 --- a/gadget-code/src/models/ide-session.ts +++ b/gadget-code/src/models/ide-session.ts @@ -8,7 +8,7 @@ import { nanoid } from "nanoid"; import { IIdeSession } from "@gadget/api"; const IdeSessionSchema = new Schema({ - _id: { type: String, default: nanoid, required: true, unique: true }, + _id: { type: String, default: () => nanoid() }, createdAt: { type: Date, default: Date.now, required: true }, user: { type: String, required: true, ref: "User" }, }); diff --git a/gadget-code/src/models/project.ts b/gadget-code/src/models/project.ts index d966e8c..da9870f 100644 --- a/gadget-code/src/models/project.ts +++ b/gadget-code/src/models/project.ts @@ -5,8 +5,10 @@ import { Schema, model } from "mongoose"; import { ProjectStatus, IProject } from "@gadget/api"; +import { nanoid } from "nanoid"; export const ProjectSchema = new Schema({ + _id: { type: String, default: () => nanoid() }, createdAt: { type: Date, default: Date.now, required: true }, user: { type: String, required: true, index: 1, ref: "User" }, status: { type: String, enum: ProjectStatus, required: true }, diff --git a/gadget-code/src/models/user.ts b/gadget-code/src/models/user.ts index 20d50ab..98c14df 100644 --- a/gadget-code/src/models/user.ts +++ b/gadget-code/src/models/user.ts @@ -18,7 +18,7 @@ export const UserFlagsSchema = new Schema( ); export const UserSchema = new Schema({ - _id: { type: String, default: nanoid, required: true, unique: true }, + _id: { type: String, default: () => nanoid() }, email: { type: String, required: true }, email_lc: { type: String, required: true, lowercase: true, unique: true }, passwordSalt: { type: String, required: true, select: false }, diff --git a/gadget-code/src/models/web-token.ts b/gadget-code/src/models/web-token.ts index 24a95e9..4ccf690 100644 --- a/gadget-code/src/models/web-token.ts +++ b/gadget-code/src/models/web-token.ts @@ -16,7 +16,7 @@ export interface IWebToken { token: string; } export const WebTokenSchema = new Schema({ - _id: { type: String, default: nanoid, required: true, unique: true }, + _id: { type: String, default: () => nanoid() }, created: { type: Date, required: true, index: 1 }, expires: { type: Date, required: true, index: -1 }, user: { type: String, required: true, ref: "User" }, diff --git a/gadget-code/src/models/web-visit.ts b/gadget-code/src/models/web-visit.ts index 5cdfd1b..5a7b520 100644 --- a/gadget-code/src/models/web-visit.ts +++ b/gadget-code/src/models/web-visit.ts @@ -25,7 +25,7 @@ export interface IWebVisit { metroCode?: number; } export const WebVisitSchema = new Schema({ - _id: { type: String, default: nanoid, required: true, unique: true }, + _id: { type: String, default: () => nanoid() }, created: { type: Date, default: Date.now }, url: { type: String, required: true }, user: { type: String, index: 1, ref: "User" },