1
0
Code Issues Pull Requests Packages Projects Releases Wiki Activity GitHub Gitee
Files
inke/apps/web/app/api/collaboration/route.ts
2023-11-10 14:59:47 +08:00

181 lines
3.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { getServerSession } from "next-auth";
import { NextRequest, NextResponse } from "next/server";
import { authOptions } from "../auth/[...nextauth]/route";
import { getUserByEmail } from "@/lib/db/user";
import {
createCollaboration,
deleteCollaborationNote,
findCollaborationByRoomId,
findUserCollaborations,
} from "@/lib/db/collaboration";
export async function GET(
req: NextRequest,
{ params }: { params: Record<string, string | string | undefined[]> },
) {
try {
const session = await getServerSession(authOptions);
if (!session?.user) {
return NextResponse.json({
code: 401,
msg: "Unauthorized! Please login",
data: null,
});
}
const user = await getUserByEmail(session.user.email);
if (!user) {
return NextResponse.json({
code: 403,
msg: "Something wrong",
data: null,
});
}
const res = await findUserCollaborations(user.id);
if (res) {
return NextResponse.json({
code: 200,
msg: "Successed!",
data: res,
});
}
return NextResponse.json({
code: 404,
msg: "Not joined collaboration",
data: null,
});
} catch (error) {
return NextResponse.json(error);
}
}
export async function POST(
req: NextRequest,
{ params }: { params: Record<string, string | string | undefined[]> },
) {
try {
const session = await getServerSession(authOptions);
if (!session?.user) {
return NextResponse.json({
code: 401,
msg: "Unauthorized! Please login",
data: null,
});
}
const user = await getUserByEmail(session.user.email);
if (!user) {
return NextResponse.json({
code: 403,
msg: "Something wrong",
data: null,
});
}
const { localId, roomId, title } = await req.json();
if (!localId || !roomId) {
return NextResponse.json({
code: 405,
msg: "Empty params",
data: null,
});
}
// 判断用户是否已经加入此协作
const find_res = await findCollaborationByRoomId(roomId, user.id);
if (find_res) {
return NextResponse.json({
code: 301,
msg: "Joined! Redirecting...",
data: find_res,
});
}
// TODO: 限制新建个数
// 新建
const res = await createCollaboration(user.id, localId, roomId, title);
if (res) {
return NextResponse.json({
code: 200,
msg: "SuccessfullyRedirecting...",
data: res,
});
}
return NextResponse.json({
code: 404,
msg: "Something wrong",
data: null,
});
} catch (error) {
return NextResponse.json({
code: 500,
msg: error,
data: null,
});
}
}
export async function DELETE(
req: NextRequest,
{ params }: { params: Record<string, string | string | undefined[]> },
) {
try {
const session = await getServerSession(authOptions);
if (!session?.user) {
return NextResponse.json({
code: 401,
msg: "Unauthorized! Please login",
data: null,
});
}
const user = await getUserByEmail(session.user.email);
if (!user) {
return NextResponse.json({
code: 403,
msg: "Something wrong",
data: null,
});
}
const { searchParams } = new URL(req.url);
const id = searchParams.get("id");
if (!id) {
return NextResponse.json({
code: 403,
msg: "Empty id",
data: null,
});
}
const res = await deleteCollaborationNote(id);
if (res) {
return NextResponse.json({
code: 200,
msg: "Successed!",
data: res,
});
}
return NextResponse.json({
code: 404,
msg: "Something wrong",
data: null,
});
} catch (error) {
return NextResponse.json(error);
}
}
// fix error: "DYNAMIC_SERVER_USAGE"
export const dynamic = "force-dynamic";