-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
124 lines (107 loc) · 3.58 KB
/
Copy pathapp.js
File metadata and controls
124 lines (107 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// src/app.js
import express from 'express';
import cors from 'cors';
import dotenv from 'dotenv';
dotenv.config();
// Création de l'application Express
const app = express();
// Middlewares
app.use(cors());
app.use(express.json()); // Pour parser le corps des requêtes en JSON
// Route par défaut pour tester l'API
app.get('/', (req, res) => {
res.send('API Volley fonctionne !');
});
// Importer les routes existantes
import usersRoutes from './routes/users.js';
import clubsRoutes from './routes/clubs.js';
import seasonsRoutes from './routes/seasons.js';
import teamsRoutes from './routes/teams.js';
import membersRoutes from './routes/members.js';
import newsRoutes from './routes/news.js';
import albumsRoutes from './routes/albums.js';
import mediasRoutes from './routes/medias.js';
import partnersRoutes from './routes/partners.js';
import championshipsRoutes from './routes/championships.js';
import standingsRoutes from './routes/standings.js';
import matchesRoutes from './routes/matches.js';
// Utiliser les routes existantes
app.use('/api/users', usersRoutes);
app.use('/api/clubs', clubsRoutes);
app.use('/api/seasons', seasonsRoutes);
app.use('/api/teams', teamsRoutes);
app.use('/api/members', membersRoutes);
app.use('/api/news', newsRoutes);
app.use('/api/albums', albumsRoutes);
app.use('/api/medias', mediasRoutes);
app.use('/api/partners', partnersRoutes);
app.use('/api/championships', championshipsRoutes);
app.use('/api/standings', standingsRoutes);
app.use('/api/matches', matchesRoutes);
// 🔹 Nouveaux endpoints pour récupérer les matchs
import Match from './models/Match.js';
import Standing from './models/Standing.js';
// 🔹 Endpoint pour récupérer les matchs
/**
* GET /api/matches
* - Optionnel :
* ?club=NomClub
* ?championshipId=<ID>
*/
app.get('/api/matches', async (req, res) => {
try {
const { club, championshipId } = req.query;
let filter = {};
if (club) {
// Filtrer sur le nom de l'adversaire
filter.opponentName = decodeURIComponent(club);
}
if (championshipId) {
filter.championshipId = championshipId;
}
// Récupérer tous les matchs correspondants
const matches = await Match.find(filter)
.populate('championshipId') // pour récupérer les infos du championnat
.sort({ date: 1 }) // tri par date croissante
.lean(); // JSON simple, sans méthodes Mongoose
// Formater chaque match pour le front
const formatted = matches.map((m) => ({
id: m._id,
championshipId: m.championshipId?._id || null,
championshipName: m.championshipId?.name || '',
date: m.date,
homeAway: m.homeAway,
opponentName: m.opponentName,
status: m.status,
scoreFor: m.scoreFor,
scoreAgainst: m.scoreAgainst,
setsDetail: m.setsDetail || [],
}));
res.json(formatted);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// 🔹 Endpoint pour récupérer tous les standings
/**
* GET /api/standings
* - Optionnel : ?championshipId=<ID>
*/
app.get('/api/standings', async (req, res) => {
try {
const { championshipId } = req.query;
let filter = {};
// Si un championnat est précisé, on filtre dessus
if (championshipId) {
filter.championshipId = championshipId;
}
// Récupère tous les standings correspondants
const standings = await Standing.find(filter)
.sort({ rank: 1 }) // tri par classement
.lean(); // pour renvoyer un simple JSON sans les méthodes Mongoose
res.json(standings);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
export default app;