refactor: data format

This commit is contained in:
Daniel Soares
2021-12-18 22:41:05 -03:00
parent 97187fdad4
commit a9ff01aa52
29 changed files with 418 additions and 154 deletions

View File

@@ -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>
)
}

View File

@@ -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

View File

@@ -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
View 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
View 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 }
}
}

View File

@@ -1,4 +1,4 @@
import { GetServerSideProps } from 'next'
import type { GetServerSideProps } from 'next'
import { Dash } from '../components/Dash'
import { fetchData } from '../services/fetchData'

View File

@@ -1,4 +1,4 @@
import { GetStaticProps } from 'next'
import type { GetStaticProps } from 'next'
import { Home } from '../components/Home'
import { fetchData } from '../services/fetchData'