initialize project

This commit is contained in:
2025-04-03 12:55:12 +02:00
commit 8333cbf7be
31 changed files with 1632 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
export function UserStats() {
return (
<div className='flex flex-col gap-2'>
<p>User stats</p>
</div>
)
}

View File

@@ -0,0 +1,3 @@
import { handlers } from '@/server/auth'
export const { GET, POST } = handlers

View File

@@ -0,0 +1,34 @@
import { fetchRequestHandler } from '@trpc/server/adapters/fetch'
import type { NextRequest } from 'next/server'
import { env } from '@/env'
import { appRouter } from '@/server/api/root'
import { createTRPCContext } from '@/server/api/trpc'
/**
* This wraps the `createTRPCContext` helper and provides the required context for the tRPC API when
* handling a HTTP request (e.g. when you make requests from Client Components).
*/
const createContext = async (req: NextRequest) => {
return createTRPCContext({
headers: req.headers,
})
}
const handler = (req: NextRequest) =>
fetchRequestHandler({
endpoint: '/api/trpc',
req,
router: appRouter,
createContext: () => createContext(req),
onError:
env.NODE_ENV === 'development'
? ({ path, error }) => {
console.error(
`❌ tRPC failed on ${path ?? '<no-path>'}: ${error.message}`
)
}
: undefined,
})
export { handler as GET, handler as POST }

29
src/app/layout.tsx Normal file
View File

@@ -0,0 +1,29 @@
import '@/styles/globals.css'
import type { Metadata } from 'next'
import { Geist } from 'next/font/google'
import { TRPCReactProvider } from '@/trpc/react'
export const metadata: Metadata = {
title: 'Create T3 App',
description: 'Generated by create-t3-app',
icons: [{ rel: 'icon', url: '/favicon.ico' }],
}
const geist = Geist({
subsets: ['latin'],
variable: '--font-geist-sans',
})
export default function RootLayout({
children,
}: Readonly<{ children: React.ReactNode }>) {
return (
<html lang='en' className={`${geist.variable}`}>
<body>
<TRPCReactProvider>{children}</TRPCReactProvider>
</body>
</html>
)
}

18
src/app/page.tsx Normal file
View File

@@ -0,0 +1,18 @@
import { UserStats } from '@/app/_components/user-stats'
import { auth } from '@/server/auth'
import { HydrateClient, api } from '@/trpc/server'
export default async function Home() {
const hello = await api.post.hello({ text: 'from tRPC' })
const session = await auth()
if (session?.user) {
void api.post.getLatest.prefetch()
}
return (
<HydrateClient>
<UserStats />
</HydrateClient>
)
}