mirror of
https://github.com/LucasVbr/meeting-app.git
synced 2026-07-09 15:08:06 +00:00
fix: add types and cleanup code
This commit is contained in:
@@ -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},
|
||||
});
|
||||
}
|
||||
@@ -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
@@ -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} />
|
||||
|
||||
Reference in New Issue
Block a user