Files
file-one/convex/schema.ts

37 lines
1.2 KiB
TypeScript
Raw Normal View History

2025-09-13 22:02:27 +01:00
import { defineSchema, defineTable } from "convex/server"
import { v } from "convex/values"
const schema = defineSchema({
users: defineTable({
2025-09-15 21:44:41 +00:00
jwtSubject: v.optional(v.string()), // JWT subject from identity provider (optional for migration)
}).index("byJwtSubject", ["jwtSubject"]), // Unique index for JWT subject lookup
2025-09-13 22:02:27 +01:00
files: defineTable({
storageId: v.id("_storage"),
userId: v.id("users"),
directoryId: v.optional(v.id("directories")),
name: v.string(),
size: v.number(),
2025-09-14 18:49:28 +00:00
mimeType: v.optional(v.string()),
2025-09-13 22:02:27 +01:00
createdAt: v.string(),
updatedAt: v.string(),
deletedAt: v.optional(v.string()),
})
.index("byDirectoryId", ["directoryId", "deletedAt"])
2025-09-15 21:44:41 +00:00
.index("byUserId", ["userId", "deletedAt"])
.index("byDeletedAt", ["deletedAt"])
.index("uniqueFileInDirectory", ["directoryId", "name", "deletedAt"]),
2025-09-13 22:02:27 +01:00
directories: defineTable({
name: v.string(),
2025-09-14 18:50:49 +00:00
userId: v.id("users"),
2025-09-13 22:02:27 +01:00
parentId: v.optional(v.id("directories")),
createdAt: v.string(),
updatedAt: v.string(),
deletedAt: v.optional(v.string()),
})
2025-09-15 21:44:41 +00:00
.index("byUserId", ["userId", "deletedAt"])
.index("byParentId", ["parentId", "deletedAt"])
.index("uniqueDirectoryInDirectory", ["parentId", "name", "deletedAt"]),
2025-09-13 22:02:27 +01:00
})
export default schema