wip: only message and it's done
This commit is contained in:
parent
869762af25
commit
a38e5f9c2c
1 changed files with 20 additions and 23 deletions
|
@ -1,32 +1,31 @@
|
||||||
import { json } from '@sveltejs/kit';
|
import { json } from '@sveltejs/kit';
|
||||||
import prisma from '$lib/prismaClient';
|
import prisma from '$lib/prismaClient';
|
||||||
import redisClient from '$lib/redisClient'; // Assure-toi d'importer ton client Redis
|
import redisClient from '$lib/redisClient';
|
||||||
|
|
||||||
export async function GET({ params, url }) {
|
export async function GET({ params, url }) {
|
||||||
const canalId = parseInt(params.id);
|
const channelId = params.id;
|
||||||
|
|
||||||
// Gestion de la pagination avec des paramètres optionnels `page` et `limit`
|
// @ts-ignore
|
||||||
const page = parseInt(url.searchParams.get('page')) || 1;
|
const page = url.searchParams.get('page') != null ? parseInt(url.searchParams.get('page')) : 1;
|
||||||
const limit = parseInt(url.searchParams.get('limit')) || 10;
|
// @ts-ignore
|
||||||
|
const limit = url.searchParams.get('limit') != null ? parseInt(url.searchParams.get('limit')) : 10;
|
||||||
const offset = (page - 1) * limit;
|
const offset = (page - 1) * limit;
|
||||||
|
|
||||||
// Générer une clé cache Redis unique en fonction du canal et des paramètres de pagination
|
// Générer une clé cache Redis unique en fonction du canal et des paramètres de pagination
|
||||||
const cacheKey = `canal:${canalId}:messages:page:${page}:limit:${limit}`;
|
const cacheKey = `channel:${channelId}:messages:page:${page}:limit:${limit}`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 1. Vérifier si les messages sont déjà dans le cache Redis
|
|
||||||
const cachedMessages = await redisClient.get(cacheKey);
|
const cachedMessages = await redisClient.get(cacheKey);
|
||||||
if (cachedMessages) {
|
if (cachedMessages) {
|
||||||
console.log('✅ Cache hit');
|
console.log('✅ Cache hit');
|
||||||
return json(JSON.parse(cachedMessages)); // Si les données sont en cache, les retourner
|
return json(JSON.parse(cachedMessages)); // Si les données sont en cache, les retourner
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Si les messages ne sont pas en cache, récupérer depuis la base de données
|
|
||||||
const messages = await prisma.message.findMany({
|
const messages = await prisma.message.findMany({
|
||||||
where: { canalId },
|
where: { channelId },
|
||||||
include: {
|
include: {
|
||||||
user: {
|
user: {
|
||||||
select: { id: true, pseudo: true }, // Inclut uniquement l’ID et le pseudo de l’utilisateur
|
select: { id: true, username: true },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
orderBy: {
|
orderBy: {
|
||||||
|
@ -36,9 +35,9 @@ export async function GET({ params, url }) {
|
||||||
take: limit,
|
take: limit,
|
||||||
});
|
});
|
||||||
|
|
||||||
// 3. Compter le nombre total de messages pour la pagination
|
|
||||||
const totalMessages = await prisma.message.count({
|
const totalMessages = await prisma.message.count({
|
||||||
where: { canalId },
|
where: { channelId },
|
||||||
});
|
});
|
||||||
|
|
||||||
const response = {
|
const response = {
|
||||||
|
@ -51,11 +50,11 @@ export async function GET({ params, url }) {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// 4. Mettre en cache les messages avec une expiration (par exemple 5 minutes)
|
|
||||||
await redisClient.set(cacheKey, JSON.stringify(response), 'EX', 60 * 5); // Cache pendant 5 minutes
|
await redisClient.set(cacheKey, JSON.stringify(response), { EX: 600 });
|
||||||
|
|
||||||
console.log('❌ Cache miss - Mise en cache des résultats');
|
console.log('❌ Cache miss - Mise en cache des résultats');
|
||||||
return json(response); // Retourner les données récupérées
|
return json(response);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
return json({ error: 'Erreur lors de la récupération des messages' }, { status: 500 });
|
return json({ error: 'Erreur lors de la récupération des messages' }, { status: 500 });
|
||||||
|
@ -63,7 +62,7 @@ export async function GET({ params, url }) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function POST({ params, request }) {
|
export async function POST({ params, request }) {
|
||||||
const canalId = parseInt(params.id);
|
const channelId = params.id;
|
||||||
const { userId, text } = await request.json();
|
const { userId, text } = await request.json();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -71,10 +70,10 @@ export async function POST({ params, request }) {
|
||||||
const newMessage = await prisma.message.create({
|
const newMessage = await prisma.message.create({
|
||||||
data: {
|
data: {
|
||||||
userId,
|
userId,
|
||||||
canalId,
|
channelId,
|
||||||
text,
|
text,
|
||||||
},
|
},
|
||||||
include: { user: { select: { id: true, pseudo: true } } },
|
include: { user: { select: { id: true, username: true } } },
|
||||||
});
|
});
|
||||||
|
|
||||||
updateCaches(); // Mettre à jour les caches après la création d’un nouveau message
|
updateCaches(); // Mettre à jour les caches après la création d’un nouveau message
|
||||||
|
@ -87,7 +86,7 @@ export async function POST({ params, request }) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function DELETE({ params }) {
|
export async function DELETE({ params }) {
|
||||||
const messageId = parseInt(params.id);
|
const messageId = params.id;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Supprimer le message de la base de données
|
// Supprimer le message de la base de données
|
||||||
|
@ -105,14 +104,12 @@ export async function DELETE({ params }) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fonction pour mettre à jour tous les caches des messages
|
// Fonction pour mettre à jour tous les caches des messages
|
||||||
function updateCaches(canalId) {
|
function updateCaches(channelId: string) {
|
||||||
// Mettre à jour tous les caches
|
|
||||||
// Mettre à jour toutes les pages dans le cache
|
|
||||||
let page : number = 1;
|
let page : number = 1;
|
||||||
let limit : number = 10;
|
let limit : number = 10;
|
||||||
let offset : number = (page - 1) * limit;
|
let offset : number = (page - 1) * limit;
|
||||||
while (true) {
|
while (true) {
|
||||||
const cacheKey = `canal:${canalId}:messages:page:${page}:limit:${limit}`;
|
const cacheKey = `channel:${channelId}:messages:page:${page}:limit:${limit}`;
|
||||||
const cachedMessages = await redisClient.get(cacheKey);
|
const cachedMessages = await redisClient.get(cacheKey);
|
||||||
if (!cachedMessages) {
|
if (!cachedMessages) {
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue