74 lines
1.7 KiB
TypeScript
74 lines
1.7 KiB
TypeScript
import { Hono } from "hono";
|
|
import { authMiddleware, streamChatMiddleware } from "./middleware.js";
|
|
import type { SupabaseClient, User } from "@supabase/supabase-js";
|
|
import { StreamChat } from "stream-chat";
|
|
import type { Transporter } from "nodemailer";
|
|
import type { Tables } from "./database.types.js";
|
|
|
|
export const userRouter = new Hono<{
|
|
Variables: {
|
|
user: User;
|
|
supabase: SupabaseClient;
|
|
transporter: Transporter;
|
|
streamServerClient: StreamChat;
|
|
};
|
|
}>();
|
|
|
|
userRouter.use(authMiddleware);
|
|
userRouter.use(streamChatMiddleware);
|
|
|
|
userRouter.post("/sign-up-to-stream", async (c) => {
|
|
const { id } = c.get("user");
|
|
const supabase = c.get("supabase");
|
|
|
|
const { data } = await supabase
|
|
.from("profiles")
|
|
.select("*")
|
|
.eq("id", id)
|
|
.single();
|
|
|
|
const user = data as Tables<"profiles">;
|
|
|
|
const streamServerClient = c.get("streamServerClient");
|
|
await streamServerClient.upsertUser({
|
|
id,
|
|
name: user.name ?? "",
|
|
language: "fr",
|
|
});
|
|
|
|
return c.json({
|
|
message: "User signed up to stream",
|
|
});
|
|
});
|
|
|
|
userRouter.get("/me", async (c) => {
|
|
const user = c.get("user");
|
|
const supabase = c.get("supabase");
|
|
const streamServerClient = c.get("streamServerClient");
|
|
|
|
const { data, error } = await supabase
|
|
.from("profiles")
|
|
.select("*")
|
|
.eq("id", user.id)
|
|
.single();
|
|
|
|
const userData = data as Tables<"profiles">;
|
|
|
|
if (!userData) {
|
|
return c.json({ error: "User not found" }, 404);
|
|
}
|
|
|
|
if (error) {
|
|
return c.json({ error: error.message }, 500);
|
|
}
|
|
|
|
const user_id = data.id;
|
|
const token = streamServerClient.createToken(user_id);
|
|
|
|
return c.json({
|
|
...userData,
|
|
streamToken: token,
|
|
});
|
|
});
|
|
|
|
userRouter.post("");
|