mirror of
https://github.com/dsoaress/link-free.git
synced 2026-08-17 23:16:03 +01:00
refactor: data format
This commit is contained in:
@@ -1,14 +1,17 @@
|
||||
import type { AppProps } from 'next/app'
|
||||
|
||||
import { AuthProvider } from '../contexts/AuthContext'
|
||||
import { DataProvider } from '../contexts/DataContext'
|
||||
import { Layout } from '../styles/layout'
|
||||
|
||||
export default function App({ Component, pageProps }: AppProps) {
|
||||
return (
|
||||
<DataProvider initialData={pageProps.initialData}>
|
||||
<Layout>
|
||||
<Component {...pageProps} />
|
||||
</Layout>
|
||||
<AuthProvider>
|
||||
<Layout>
|
||||
<Component {...pageProps} />
|
||||
</Layout>
|
||||
</AuthProvider>
|
||||
</DataProvider>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -50,9 +50,9 @@ const handler = nc<NextApiRequest, NextApiResponse>({
|
||||
throw new ExceptionError('Credentials are invalid', 401)
|
||||
}
|
||||
|
||||
const { token, refreshToken } = await createSession(user)
|
||||
const { accessToken, refreshToken } = await createSession(user)
|
||||
|
||||
res.status(200).json({ token, refreshToken })
|
||||
res.status(200).json({ accessToken, refreshToken })
|
||||
})
|
||||
|
||||
export default handler
|
||||
|
||||
@@ -67,7 +67,7 @@ const handler = nc<NextApiRequest, NextApiResponse>({
|
||||
where: { id: refreshToken }
|
||||
})
|
||||
|
||||
res.status(200).json({ token: tokens.token, refreshToken: tokens.refreshToken })
|
||||
res.status(200).json({ accessToken: tokens.accessToken, refreshToken: tokens.refreshToken })
|
||||
})
|
||||
|
||||
export default handler
|
||||
|
||||
56
src/pages/api/users/me.ts
Normal file
56
src/pages/api/users/me.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
import { Prisma } from '@prisma/client'
|
||||
import type { NextApiRequest, NextApiResponse } from 'next'
|
||||
import nc from 'next-connect'
|
||||
|
||||
import { prisma } from '../../../services/prisma'
|
||||
import { authMiddleware } from '../../../utils/authMiddleware'
|
||||
import { ExceptionError } from '../../../utils/error'
|
||||
|
||||
interface Request extends NextApiRequest {
|
||||
userId: string
|
||||
userRole: string
|
||||
}
|
||||
|
||||
const handler = nc<Request, NextApiResponse>({
|
||||
onNoMatch: (_req, res) => {
|
||||
res.status(404).json({ error: 'Not found' })
|
||||
},
|
||||
onError: (err, _req, res) => {
|
||||
if (err instanceof ExceptionError) {
|
||||
res.status(err.status).json({
|
||||
status: err.status,
|
||||
error: err.message
|
||||
})
|
||||
} else if (err instanceof Prisma.PrismaClientKnownRequestError) {
|
||||
res.status(400).json({
|
||||
status: 400,
|
||||
error: err.message
|
||||
})
|
||||
} else {
|
||||
res.status(500).json({
|
||||
status: 500,
|
||||
error: err.message
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
.use(authMiddleware)
|
||||
.get(async (req, res) => {
|
||||
const { userId } = req
|
||||
const response = await prisma.user.findUnique({
|
||||
where: { id: +userId },
|
||||
select: {
|
||||
id: true,
|
||||
username: true,
|
||||
role: true
|
||||
}
|
||||
})
|
||||
|
||||
if (!response) {
|
||||
throw new ExceptionError('User not found')
|
||||
}
|
||||
|
||||
res.status(200).json(response)
|
||||
})
|
||||
|
||||
export default handler
|
||||
44
src/pages/auth.tsx
Normal file
44
src/pages/auth.tsx
Normal file
@@ -0,0 +1,44 @@
|
||||
import type { GetServerSideProps } from 'next'
|
||||
import { useState } from 'react'
|
||||
|
||||
import { useAuth } from '../hooks/useAuth'
|
||||
import { fetchData } from '../services/fetchData'
|
||||
|
||||
export default function AuthPage() {
|
||||
const { signIn } = useAuth()
|
||||
const [username, setUsername] = useState('')
|
||||
const [password, setPassword] = useState('')
|
||||
|
||||
return (
|
||||
<form>
|
||||
<input
|
||||
type="text"
|
||||
value={username}
|
||||
onChange={e => setUsername(e.target.value)}
|
||||
placeholder="username"
|
||||
/>
|
||||
<input
|
||||
type="password"
|
||||
value={password}
|
||||
onChange={e => setPassword(e.target.value)}
|
||||
placeholder="password"
|
||||
/>
|
||||
<button
|
||||
onClick={e => {
|
||||
e.preventDefault()
|
||||
signIn(username, password)
|
||||
}}
|
||||
>
|
||||
Sign In
|
||||
</button>
|
||||
</form>
|
||||
)
|
||||
}
|
||||
|
||||
export const getServerSideProps: GetServerSideProps = async () => {
|
||||
const initialData = await fetchData()
|
||||
|
||||
return {
|
||||
props: { initialData }
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
import { GetServerSideProps } from 'next'
|
||||
import type { GetServerSideProps } from 'next'
|
||||
|
||||
import { Dash } from '../components/Dash'
|
||||
import { fetchData } from '../services/fetchData'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { GetStaticProps } from 'next'
|
||||
import type { GetStaticProps } from 'next'
|
||||
|
||||
import { Home } from '../components/Home'
|
||||
import { fetchData } from '../services/fetchData'
|
||||
|
||||
Reference in New Issue
Block a user