- Implemented a modal for sending and managing friend requests, allowing users to send, accept, decline, or ignore requests. - Enhanced user status management by integrating real-time updates for online, busy, offline, and away statuses. - Updated the API and database schema to support new friend request and user status features. - Improved socket management for better connection handling and user experience. - Refactored UI components to accommodate new functionalities while maintaining consistency.
55 lines
No EOL
1.7 KiB
TypeScript
55 lines
No EOL
1.7 KiB
TypeScript
import { defineTable } from "convex/server";
|
|
import { v } from "convex/values";
|
|
|
|
export const user = {
|
|
user: defineTable({
|
|
name: v.string(),
|
|
email: v.string(),
|
|
emailVerified: v.boolean(),
|
|
image: v.optional(v.union(v.null(), v.string())),
|
|
createdAt: v.number(),
|
|
updatedAt: v.number(),
|
|
userId: v.optional(v.union(v.null(), v.string())),
|
|
username: v.optional(v.union(v.null(), v.string())),
|
|
displayUsername: v.optional(v.union(v.null(), v.string())),
|
|
metadata: v.optional(v.object({
|
|
phrasePreference: v.union(v.literal("comforting"), v.literal("mocking"), v.literal("both")),
|
|
})),
|
|
})
|
|
.index("email_name", ["email", "name"])
|
|
.index("byName", ["name"])
|
|
.index("userId", ["userId"])
|
|
.index("username", ["username"]),
|
|
userStatus: defineTable({
|
|
userId: v.id("user"),
|
|
status: v.union(v.literal("online"), v.literal("busy"), v.literal("offline"), v.literal("away")),
|
|
isUserSet: v.boolean(),
|
|
updatedAt: v.number(),
|
|
})
|
|
.index("userId", ["userId"])
|
|
.index("status", ["status"]),
|
|
friendRequests: defineTable({
|
|
userId: v.id("user"),
|
|
requestTo: v.id("user"),
|
|
method: v.union(v.literal("receive"), v.literal("send")),
|
|
requestId: v.string(),
|
|
createdAt: v.number(),
|
|
expiresAt: v.optional(v.number()),
|
|
acceptedAt: v.optional(v.number()),
|
|
declinedAt: v.optional(v.number()),
|
|
ignoredAt: v.optional(v.number()),
|
|
})
|
|
.index("userId_method", ["userId", "method"])
|
|
.index("userId", ["userId"])
|
|
.index("requestId", ["requestId"])
|
|
.index("requestTo", ["requestTo"])
|
|
.index("expiresAt", ["expiresAt"]),
|
|
friends: defineTable({
|
|
userId: v.id("user"),
|
|
friendId: v.id("user"),
|
|
createdAt: v.number(),
|
|
})
|
|
.index("userId", ["userId"])
|
|
.index("friendId", ["friendId"])
|
|
.index("userId_friendId", ["userId", "friendId"]),
|
|
} |