added current profile, create a server
This commit is contained in:
parent
6ed6687800
commit
4763519f35
42
app/api/servers/route.ts
Normal file
42
app/api/servers/route.ts
Normal file
@ -0,0 +1,42 @@
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import { NextResponse } from "next/server";
|
||||
import { MemberRole } from "@prisma/client";
|
||||
|
||||
import { currentProfile } from "@/lib/current-profile";
|
||||
import { db } from "@/lib/db";
|
||||
|
||||
|
||||
export async function POST(req: Request) {
|
||||
try {
|
||||
const { name, imageUrl } = await req.json();
|
||||
const profile = await currentProfile();
|
||||
|
||||
if (!profile) {
|
||||
return new NextResponse("Unauthorized", { status: 401 });
|
||||
}
|
||||
|
||||
const server = await db.server.create({
|
||||
data: {
|
||||
profileId: profile.id,
|
||||
name,
|
||||
imageUrl,
|
||||
inviteCode: uuidv4(),
|
||||
channels: {
|
||||
create: [
|
||||
{ name: "general", profileId: profile.id }
|
||||
],
|
||||
},
|
||||
members: {
|
||||
create: [
|
||||
{ profileId: profile.id, role: MemberRole.ADMIN }
|
||||
]
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return NextResponse.json({ server });
|
||||
} catch (error) {
|
||||
console.log("[SERVER POST]", error);
|
||||
return new NextResponse("Internal Error", { status: 500 });
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
"use client";
|
||||
|
||||
import axios from "axios";
|
||||
import * as z from "zod";
|
||||
import { zodResolver } from "@hookform/resolvers/zod";
|
||||
import { useForm } from "react-hook-form";
|
||||
@ -24,6 +25,7 @@ import{
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { FileUpload } from "@/components/file-upload";
|
||||
import { useRouter } from "next/navigation";
|
||||
|
||||
const formSchema = z.object({
|
||||
name: z.string().min(1, {
|
||||
@ -37,6 +39,8 @@ const formSchema = z.object({
|
||||
export const InitialModal = () => {
|
||||
const [isMounted, setIsMounted] = useState(false);
|
||||
|
||||
const router = useRouter();
|
||||
|
||||
useEffect(() => {
|
||||
setIsMounted(true);
|
||||
}, []);
|
||||
@ -52,7 +56,15 @@ export const InitialModal = () => {
|
||||
const isLoading = form.formState.isSubmitting;
|
||||
|
||||
const onSubmit = async (values: z.infer<typeof formSchema>) => {
|
||||
console.log(values);
|
||||
try {
|
||||
await axios.post("/api/servers", values);
|
||||
|
||||
form.reset();
|
||||
router.refresh();
|
||||
window.location.reload();
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isMounted) {
|
||||
|
19
lib/current-profile.ts
Normal file
19
lib/current-profile.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import { auth } from "@clerk/nextjs";
|
||||
|
||||
import { db } from "@/lib/db";
|
||||
|
||||
export const currentProfile = async () => {
|
||||
const { userId } = auth();
|
||||
|
||||
if (!userId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const profile = await db.profile.findUnique({
|
||||
where: {
|
||||
userId
|
||||
},
|
||||
});
|
||||
|
||||
return profile;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user