@@ -5,6 +5,40 @@ const path = require("path");
55
66const dbPath = path . join ( __dirname , ".." , "database.json" ) ;
77
8+ // Fonction sécurisée pour lire la base de données
9+ function readDb ( ) {
10+ // Si le fichier n'existe pas, on le crée avec une structure vide
11+ if ( ! fs . existsSync ( dbPath ) ) {
12+ fs . writeFileSync ( dbPath , JSON . stringify ( { users : [ ] } , null , 2 ) ) ;
13+ }
14+
15+ try {
16+ const data = fs . readFileSync ( dbPath , "utf8" ) ;
17+ // Gère le cas où le fichier est vide
18+ if ( data === "" ) {
19+ return { users : [ ] } ;
20+ }
21+ const db = JSON . parse ( data ) ;
22+ // S'assure que la propriété 'users' existe
23+ if ( ! db . users ) {
24+ db . users = [ ] ;
25+ }
26+ return db ;
27+ } catch ( error ) {
28+ console . error (
29+ "Erreur critique lors de la lecture ou du parsing de database.json:" ,
30+ error
31+ ) ;
32+ // En cas d'erreur de parsing, on retourne une structure vide pour éviter un crash
33+ return { users : [ ] } ;
34+ }
35+ }
36+
37+ // Fonction pour écrire dans la base de données
38+ function writeDb ( data ) {
39+ fs . writeFileSync ( dbPath , JSON . stringify ( data , null , 2 ) ) ;
40+ }
41+
842// Cette route répondra à POST /link/
943router . post ( "/" , ( req , res ) => {
1044 const { discord_id, coachfoot_id } = req . body ;
@@ -16,8 +50,7 @@ router.post("/", (req, res) => {
1650 }
1751
1852 try {
19- const dbRaw = fs . readFileSync ( dbPath , "utf8" ) ;
20- const db = JSON . parse ( dbRaw ) ;
53+ const db = readDb ( ) ;
2154
2255 // Vérifier si le coachfoot_id est déjà utilisé par un autre compte
2356 const existingCoachFootUser = db . users . find (
@@ -46,7 +79,7 @@ router.post("/", (req, res) => {
4679 db . users [ userIndex ] . status = "connected" ;
4780 db . users [ userIndex ] . coachfoot_id = coachfoot_id ;
4881
49- fs . writeFileSync ( dbPath , JSON . stringify ( db , null , 2 ) ) ;
82+ writeDb ( db ) ;
5083
5184 res . status ( 201 ) . json ( { status : "validated" } ) ;
5285 } catch ( error ) {
0 commit comments