"use server"; import { revalidatePath } from "next/cache"; import { auth } from "@/lib/auth"; import { challengeService } from "@/services/challenges/challenge.service"; import { ValidationError, NotFoundError, ConflictError, } from "@/services/errors"; export async function createChallenge(data: { challengedId: string; title: string; description: string; pointsReward?: number; }) { try { const session = await auth(); if (!session?.user?.id) { return { success: false, error: "Vous devez être connecté pour créer un défi", }; } const challenge = await challengeService.createChallenge({ challengerId: session.user.id, challengedId: data.challengedId, title: data.title, description: data.description, pointsReward: data.pointsReward || 100, }); revalidatePath("/challenges"); revalidatePath("/profile"); return { success: true, message: "Défi créé avec succès", data: challenge }; } catch (error) { console.error("Create challenge error:", error); if (error instanceof ValidationError || error instanceof ConflictError) { return { success: false, error: error.message }; } if (error instanceof NotFoundError) { return { success: false, error: error.message }; } return { success: false, error: "Une erreur est survenue lors de la création du défi", }; } } export async function acceptChallenge(challengeId: string) { try { const session = await auth(); if (!session?.user?.id) { return { success: false, error: "Vous devez être connecté pour accepter un défi", }; } const challenge = await challengeService.acceptChallenge( challengeId, session.user.id ); revalidatePath("/challenges"); revalidatePath("/profile"); return { success: true, message: "Défi accepté", data: challenge }; } catch (error) { console.error("Accept challenge error:", error); if (error instanceof ValidationError) { return { success: false, error: error.message }; } if (error instanceof NotFoundError) { return { success: false, error: error.message }; } return { success: false, error: "Une erreur est survenue lors de l'acceptation du défi", }; } } export async function cancelChallenge(challengeId: string) { try { const session = await auth(); if (!session?.user?.id) { return { success: false, error: "Vous devez être connecté pour annuler un défi", }; } const challenge = await challengeService.cancelChallenge( challengeId, session.user.id ); revalidatePath("/challenges"); revalidatePath("/profile"); return { success: true, message: "Défi annulé", data: challenge }; } catch (error) { console.error("Cancel challenge error:", error); if (error instanceof ValidationError) { return { success: false, error: error.message }; } if (error instanceof NotFoundError) { return { success: false, error: error.message }; } return { success: false, error: "Une erreur est survenue lors de l'annulation du défi", }; } }