fix: add types and cleanup code

This commit is contained in:
Lucàs
2023-04-11 22:02:33 +02:00
parent 7b6733bc09
commit 66d20e156d
4 changed files with 163 additions and 187 deletions
+9 -15
View File
@@ -1,9 +1,11 @@
import NextAuth from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import {NextApiRequest, NextApiResponse} from 'next';
import {LoginData} from '@/models/form/LoginData';
import {isSamePassword} from '@/lib/PasswordTools';
import {User} from '@prisma/client';
import type {User} from '@prisma/client';
import prismaClient from '@/lib/prismaClient';
export default async function auth(req: NextApiRequest, res: NextApiResponse) {
@@ -11,27 +13,19 @@ export default async function auth(req: NextApiRequest, res: NextApiResponse) {
CredentialsProvider({
name: 'Credentials',
credentials: {
email: {
label: 'Email',
type: 'text',
placeholder: 'adresse@email.com'
},
password: {
label: 'Password',
type: 'password',
placeholder: 'mot de passe',
},
email: {label: 'Email', type: 'text'},
password: {label: 'Password', type: 'password'},
},
async authorize(credentials: unknown) {
const {email, password} = credentials as LoginData;
if (!email || !password) return null;
// Appel à la base de donnée
const user = await getUserByEmail(email);
const user: User | null = await getUserByEmail(email);
if (!user) return null;
// Vérification de la connexion
const passwordIsValid = await isSamePassword(password, user.password);
const passwordIsValid: boolean = await isSamePassword(password, user.password);
if (passwordIsValid) return user;
else return null;
},
@@ -46,7 +40,7 @@ export default async function auth(req: NextApiRequest, res: NextApiResponse) {
signOut: '/auth/signout',
error: '/auth/error',
verifyRequest: '/auth/verify-request',
newUser: '/auth/new-user' // New users will be directed here on first sign in (leave the property out if not of interest)
newUser: '/auth/new-user', // New users will be directed here on first sign in (leave the property out if not of interest)
},
secret: process.env.NEXTAUTH_SECRET,
callbacks: {
@@ -62,6 +56,6 @@ export default async function auth(req: NextApiRequest, res: NextApiResponse) {
async function getUserByEmail(email: string): Promise<null | User> {
return prismaClient.user.findUnique({
where: {email}
where: {email},
});
}
+7 -12
View File
@@ -1,10 +1,10 @@
import {Server} from 'socket.io';
import prismaClient from '@/lib/prismaClient';
import type {Chat, Message as Message} from '@prisma/client';
export default async function SocketHandler(req: any, res: any) {
const {id: chatId} = req.query;
// It means that socket server was already initialised
if (res.socket.server.io) {
console.log('Already set up');
res.end();
@@ -14,17 +14,13 @@ export default async function SocketHandler(req: any, res: any) {
const io = new Server(res.socket.server);
res.socket.server.io = io;
// Define actions inside
io.on('connection', async (socket) => {
console.log(socket.id);
io.on('connection', async (socket): Promise<void> => {
await prismaClient.chat.findFirst({
where: {id: chatId},
include: {Message: true},
}).then(chat => {
// @ts-ignore
return socket.emit('allOldMessages', chat.Message);
});
where: {id: chatId}, include: {Message: true},
}).then((chat: (Chat & { Message: Message[] }) | null) =>
{if (chat) socket.emit('allOldMessages', chat.Message)}
);
socket.on('createdMessage', async (msgInput) => {
await prismaClient.message.create({
@@ -33,10 +29,9 @@ export default async function SocketHandler(req: any, res: any) {
User: {connect: {id: msgInput.sender}},
Chat: {connect: {id: chatId}},
},
}).then((newMessage) => socket.emit('newIncomingMessage', newMessage));
}).then((newMessage: Message) => socket.emit('newIncomingMessage', newMessage));
});
});
console.log('Setting up socket');
res.end();
}
+9 -19
View File
@@ -3,12 +3,12 @@ import Head from 'next/head';
import {websiteName} from '@/lib/constants';
import {useSession} from 'next-auth/react';
import {useRouter} from 'next/router';
import {useCallback, useEffect, useState} from 'react';
import {useEffect, useState} from 'react';
import MessageList from '@/components/chat/MessageList';
import {io, Socket} from 'socket.io-client';
import {Message} from '@prisma/client';
import {Message, User} from '@prisma/client';
export default function ChatId() {
const router = useRouter();
@@ -26,22 +26,13 @@ export default function ChatId() {
const socketInitializer = async () => {
await fetch(`/api/socket/chat/${chatId}`)
const soc = io()
const soc = io();
soc.on('connect', () => {
console.log('connected')
})
soc.on("allOldMessages", (allOldMessages: Message[]) => {
console.log("allOldMessages", allOldMessages);
setMessages(allOldMessages);
})
soc.on("newIncomingMessage", (newIncomingMessage: Message) => {
console.log("newIncomingMessage", newIncomingMessage);
console.log("messages", messages);
setMessages(messages => ([...messages, newIncomingMessage]));
});
soc.on('connect', () => console.log('connected'))
soc.on("allOldMessages", (allOldMessages: Message[]) => setMessages(allOldMessages))
soc.on("newIncomingMessage", (newIncomingMessage: Message) =>
setMessages(messages => [...messages, newIncomingMessage])
);
setSocket(soc);
}
@@ -50,7 +41,6 @@ export default function ChatId() {
const handleSubmit = () => {
if (text !== "" && socket) {
// @ts-ignore
socket.emit("createdMessage", {text, sender: session.user.id})
setText("");
}
@@ -62,7 +52,7 @@ export default function ChatId() {
<Head><title>{websiteName}</title></Head>
<Container>
<MessageList user={session.user} messages={messages}/>
<MessageList user={session.user as User} messages={messages}/>
<Flex gap={5} mt={5}>
<Input type={"text"} colorScheme={'purple'} onChange={(evt) => setText(evt.target.value) } value={text} />