2025-09-13 22:02:27 +01:00
|
|
|
import { defineSchema, defineTable } from "convex/server"
|
|
|
|
|
import { v } from "convex/values"
|
|
|
|
|
|
|
|
|
|
const schema = defineSchema({
|
|
|
|
|
files: defineTable({
|
|
|
|
|
storageId: v.id("_storage"),
|
2025-10-05 22:14:44 +00:00
|
|
|
userId: v.string(), // BetterAuth user IDs are strings, not Convex Ids
|
2025-09-13 22:02:27 +01:00
|
|
|
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-10-03 21:23:51 +00:00
|
|
|
createdAt: v.number(),
|
|
|
|
|
updatedAt: v.number(),
|
|
|
|
|
deletedAt: v.optional(v.number()),
|
2025-10-16 20:56:16 +00:00
|
|
|
lastAccessedAt: v.optional(v.number()),
|
2025-09-14 10:59:49 +00:00
|
|
|
})
|
2025-09-16 22:36:26 +00:00
|
|
|
.index("byDirectoryId", ["userId", "directoryId", "deletedAt"])
|
2025-09-15 21:44:41 +00:00
|
|
|
.index("byUserId", ["userId", "deletedAt"])
|
2025-09-14 18:12:29 +00:00
|
|
|
.index("byDeletedAt", ["deletedAt"])
|
2025-10-28 20:26:12 +00:00
|
|
|
.index("byLastAccessedAt", ["userId", "deletedAt", "lastAccessedAt"])
|
2025-09-16 22:36:26 +00:00
|
|
|
.index("uniqueFileInDirectory", [
|
|
|
|
|
"userId",
|
|
|
|
|
"directoryId",
|
|
|
|
|
"name",
|
|
|
|
|
"deletedAt",
|
|
|
|
|
]),
|
2025-10-21 23:45:04 +00:00
|
|
|
|
2025-09-13 22:02:27 +01:00
|
|
|
directories: defineTable({
|
|
|
|
|
name: v.string(),
|
2025-10-05 22:14:44 +00:00
|
|
|
userId: v.string(), // BetterAuth user IDs are strings, not Convex Ids
|
2025-09-13 22:02:27 +01:00
|
|
|
parentId: v.optional(v.id("directories")),
|
2025-10-03 21:23:51 +00:00
|
|
|
createdAt: v.number(),
|
|
|
|
|
updatedAt: v.number(),
|
|
|
|
|
deletedAt: v.optional(v.number()),
|
2025-09-14 18:12:29 +00:00
|
|
|
})
|
2025-09-15 21:44:41 +00:00
|
|
|
.index("byUserId", ["userId", "deletedAt"])
|
2025-09-16 22:36:26 +00:00
|
|
|
.index("byParentId", ["userId", "parentId", "deletedAt"])
|
|
|
|
|
.index("uniqueDirectoryInDirectory", [
|
|
|
|
|
"userId",
|
|
|
|
|
"parentId",
|
|
|
|
|
"name",
|
|
|
|
|
"deletedAt",
|
2025-09-20 23:23:28 +00:00
|
|
|
]),
|
2025-10-21 23:45:04 +00:00
|
|
|
|
2025-10-20 00:17:41 +00:00
|
|
|
apiKeys: defineTable({
|
|
|
|
|
publicId: v.string(),
|
|
|
|
|
hashedKey: v.string(),
|
|
|
|
|
expiresAt: v.optional(v.number()),
|
|
|
|
|
}).index("byPublicId", ["publicId"]),
|
2025-10-21 23:45:04 +00:00
|
|
|
|
|
|
|
|
fileShares: defineTable({
|
|
|
|
|
shareToken: v.string(),
|
|
|
|
|
storageId: v.id("_storage"),
|
|
|
|
|
expiresAt: v.optional(v.number()),
|
|
|
|
|
})
|
|
|
|
|
.index("byShareToken", ["shareToken"])
|
|
|
|
|
.index("byExpiredAt", ["expiresAt"])
|
|
|
|
|
.index("byStorageId", ["storageId"]),
|
2025-09-13 22:02:27 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
export default schema
|