sipher/convex/betterAuth/schemas/nests.ts
Nixyan e7dd6c961d feat: enhance user status management and introduce nests functionality
- Updated user status handling to include optional user-set status, improving user experience during reconnections.
- Added new queries and mutations for managing nests, including fetching non-offline user IDs and forcing users offline.
- Introduced new database schema for nests, roles, and channels, enhancing the application's organizational structure.
- Updated dependencies in package.json and bun.lock for improved stability and compatibility.
- Refactored related components and API to support the new nests functionality.
2026-02-20 10:01:07 -03:00

75 lines
No EOL
2.2 KiB
TypeScript

import { defineTable } from "convex/server";
import { v } from "convex/values";
export const nests = {
nests: defineTable({
type: v.union(v.literal("global"), v.literal("regional"), v.literal("private")),
name: v.string(),
description: v.optional(v.string()),
images: v.optional(
v.object({
banner: v.id("storage"),
icon: v.id("storage"),
})
),
colors: v.optional(
v.object({
primary: v.string(),
accent: v.string(),
})
),
createdAt: v.number(),
updatedAt: v.number(),
managerId: v.id("user"),
members: v.array(v.id("user")),
channels: v.array(v.id("channel")),
roles: v.array(v.id("role")),
region: v.optional(v.string()),
emojis: v.array(v.object({
id: v.id("storage"),
name: v.string(),
createdAt: v.number(),
})),
onDiscover: v.optional(v.boolean()),
})
.index("managerId", ["managerId"])
.index("type", ["type"])
.index("type_region", ["type", "region"])
.index("createdAt", ["createdAt"])
.index("onDiscover", ["onDiscover"]),
roles: defineTable({
nestId: v.id("nests"),
name: v.string(),
color: v.optional(v.string()),
hoist: v.optional(v.boolean()),
mentionable: v.optional(v.boolean()),
icon: v.optional(v.id("storage")),
position: v.optional(v.number()),
permissions: v.array(v.int64()), // Permissions as bitfield
flags: v.array(v.int64()), // Flags as bitfield
createdAt: v.number(),
updatedAt: v.number(),
members: v.array(v.id("user")),
})
.index("nestId", ["nestId"])
.index("nestId_position", ["nestId", "position"])
.index("nestId_members", ["nestId", "members"])
.index("members", ["members"]),
channels: defineTable({
type: v.union(v.literal("text"), v.literal("category"), v.literal("announcement")),
name: v.string(),
nestId: v.id("nests"),
position: v.number(),
permissions: v.array(v.int64()), // Permissions as bitfield
overwrites: v.array(v.object({
id: v.union(v.id("user"), v.id("role")),
allow: v.union(v.array(v.int64()), v.null()), // Permissions as bitfield
deny: v.union(v.array(v.int64()), v.null()), // Permissions as bitfield
})),
createdAt: v.number(),
updatedAt: v.number(),
})
.index("nestId", ["nestId"])
.index("nestId_position", ["nestId", "position"])
.index("nestId_type", ["nestId", "type"])
}