mirror of
https://github.com/ershisan99/www.git
synced 2025-12-31 12:35:21 +00:00
initialize project
This commit is contained in:
7
src/app/_components/user-stats.tsx
Normal file
7
src/app/_components/user-stats.tsx
Normal file
@@ -0,0 +1,7 @@
|
||||
export function UserStats() {
|
||||
return (
|
||||
<div className='flex flex-col gap-2'>
|
||||
<p>User stats</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
3
src/app/api/auth/[...nextauth]/route.ts
Normal file
3
src/app/api/auth/[...nextauth]/route.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
import { handlers } from '@/server/auth'
|
||||
|
||||
export const { GET, POST } = handlers
|
||||
34
src/app/api/trpc/[trpc]/route.ts
Normal file
34
src/app/api/trpc/[trpc]/route.ts
Normal 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
29
src/app/layout.tsx
Normal 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
18
src/app/page.tsx
Normal 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>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user