From b42e9cc1d538a6297fa0b3c379daf7cfef580db9 Mon Sep 17 00:00:00 2001 From: herz Date: Sun, 2 Apr 2023 00:46:21 +0200 Subject: [PATCH] new device working --- prisma/schema.prisma | 5 ++ src/pages/dev.tsx | 120 +++++++++++++++++++++++++++++++ src/server/api/root.ts | 2 + src/server/api/routers/device.ts | 45 ++++++++++++ 4 files changed, 172 insertions(+) create mode 100644 src/pages/dev.tsx create mode 100644 src/server/api/routers/device.ts diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6d78c6a..d06d0da 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -64,3 +64,8 @@ model VerificationToken { @@unique([identifier, token]) } + +model Device { + id String @id @default(cuid()) + name String +} diff --git a/src/pages/dev.tsx b/src/pages/dev.tsx new file mode 100644 index 0000000..315a569 --- /dev/null +++ b/src/pages/dev.tsx @@ -0,0 +1,120 @@ +import { type NextPage } from "next"; +import Head from "next/head"; +import Link from "next/link"; +import { signIn, signOut, useSession } from "next-auth/react"; +import { useState } from "react"; +import { api } from "~/utils/api"; + +const Home: NextPage = () => { + const hello = api.example.hello.useQuery({ text: "from tRPC" }); + + + return ( + <> + + Create T3 App + + + +
+
+ + +
+
+ + ); +}; + +export default Home; + +const AuthShowcase: React.FC = () => { + const [newDevice, setNewDevice] = useState(""); + const addDevice = api.device.addDevice.useMutation(); + const device = api.device.getAll.useQuery(); + + const { data: sessionData } = useSession(); + + const { data: secretMessage } = api.example.getSecretMessage.useQuery( + undefined, // no input + { enabled: sessionData?.user !== undefined }, + ); + + + + return ( +
+

+ {sessionData && Logged in as {sessionData.user?.name}} + {secretMessage && - {secretMessage}} +

+

+ Devices +

+
+ { + !device.data ? "Loading tRPC query..." + : + device.data.map((device) => ( +
+

{device.name}

+
+ )) + } +
+
+

Create Device

+
{ + event.preventDefault(); + addDevice.mutate({ + name: newDevice + }); + setNewDevice(""); + }} + > + setNewDevice(event.target.value)} + /> + +
+
+
+ ); +}; + + +const Navbar: React.FC = () => { + const { data: sessionData } = useSession(); + return ( +
+
+ +

HerZ NSOT

+
+
+ +
+
+ +
+
+ ); +} \ No newline at end of file diff --git a/src/server/api/root.ts b/src/server/api/root.ts index 93fba92..1ccf702 100644 --- a/src/server/api/root.ts +++ b/src/server/api/root.ts @@ -1,5 +1,6 @@ import { createTRPCRouter } from "~/server/api/trpc"; import { exampleRouter } from "~/server/api/routers/example"; +import { deviceRouter } from "~/server/api/routers/device"; /** * This is the primary router for your server. @@ -8,6 +9,7 @@ import { exampleRouter } from "~/server/api/routers/example"; */ export const appRouter = createTRPCRouter({ example: exampleRouter, + device: deviceRouter, }); // export type definition of API diff --git a/src/server/api/routers/device.ts b/src/server/api/routers/device.ts new file mode 100644 index 0000000..dbb44cd --- /dev/null +++ b/src/server/api/routers/device.ts @@ -0,0 +1,45 @@ +import { z } from "zod"; + +import { + createTRPCRouter, + publicProcedure, + protectedProcedure, +} from "~/server/api/trpc"; + +export const deviceRouter = createTRPCRouter({ + getAll: protectedProcedure.query(async ({ ctx }) => { + try { + return await ctx.prisma.device.findMany({ + select: { + id: true, + name: true, + }, + orderBy: { + name: "asc", + }, + }); + } + catch (err) { + console.log(err); + } + }), + + addDevice: protectedProcedure + .input( + z.object({ + name: z.string() + }) + ) + .mutation(async ({ input, ctx }) => { + try { + await ctx.prisma.device.create({ + data: { + name: input.name, + }, + }); + } + catch (err) { + console.log(err); + } + }), +});