Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions app/backend/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ const MONGO_URI = process.env.MONGO_URI || 'mongodb://127.0.0.1:27017/saintbarth
// Connexion à MongoDB
mongoose.connect(MONGO_URI)
.then(() => {
console.log('MongoDB connecté');
console.log('MongoDB connected');

// Lancer le serveur
app.listen(PORT, () => {
console.log(`Serveur lancé sur http://localhost:${PORT}`);
console.log(`Server launched on http://localhost:${PORT}`);
});
})
.catch(err => console.error('Erreur MongoDB:', err));
.catch(err => console.error('Error MongoDB:', err));
10 changes: 7 additions & 3 deletions app/backend/src/app.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import express from 'express';
import cors from 'cors';

// Création de l'application Express
const app = express();

// Middlewares
app.use(cors());
// Pour parser le corps des requêtes en JSON
app.use(express.json());

// Route test
// Route par défaut pour tester l'API
app.get('/', (req, res) => {
res.send('API Volley fonctionne !');
});
Expand All @@ -16,10 +17,13 @@ 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';

// Utiliser les routes
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);

export default app;
12 changes: 6 additions & 6 deletions app/backend/src/controllers/clubsController.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export const getAllClubs = async (req, res) => {
export const getClubById = async (req, res) => {
try {
const club = await Club.findById(req.params.id);
if (!club) return res.status(404).json({ message: 'Club non trouvé' });
if (!club) return res.status(404).json({ message: 'Club not found' });
res.json(club);
} catch (err) {
res.status(500).json({ message: err.message });
Expand All @@ -26,7 +26,7 @@ export const createClub = async (req, res) => {
try {
const club = new Club(req.body);
await club.save();
res.status(201).json({ message: 'Club créé', clubId: club._id });
res.status(201).json({ message: 'Club created', clubId: club._id });
} catch (err) {
res.status(400).json({ message: err.message });
}
Expand All @@ -36,11 +36,11 @@ export const createClub = async (req, res) => {
export const updateClub = async (req, res) => {
try {
const club = await Club.findById(req.params.id);
if (!club) return res.status(404).json({ message: 'Club non trouvé' });
if (!club) return res.status(404).json({ message: 'Club not found' });

Object.assign(club, req.body); // Met à jour tous les champs reçus
await club.save();
res.json({ message: 'Club mis à jour' });
res.json({ message: 'Club updated' });
} catch (err) {
res.status(400).json({ message: err.message });
}
Expand All @@ -50,8 +50,8 @@ export const updateClub = async (req, res) => {
export const deleteClub = async (req, res) => {
try {
const club = await Club.findByIdAndDelete(req.params.id);
if (!club) return res.status(404).json({ message: 'Club non trouvé' });
res.json({ message: 'Club supprimé' });
if (!club) return res.status(404).json({ message: 'Club not found' });
res.json({ message: 'Club deleted' });
} catch (err) {
res.status(500).json({ message: err.message });
}
Expand Down
79 changes: 79 additions & 0 deletions app/backend/src/controllers/membersController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import Member from '../models/Member.js';

export const getMembers = async (req, res) => {
try {
const members = await Member.find({ isActive: true }).populate('teamId').populate('seasonId');

res.json(members);
} catch (error) {
res.status(500).json({ message: error.message });
}
};

export const getMemberById = async (req, res) => {
try {
const member = await Member.findById(req.params.id).populate('teamId').populate('seasonId');

if (!member) {
return res.status(404).json({ message: 'Member not found' });
}

res.json(member);
} catch (error) {
res.status(500).json({ message: error.message });
}
};

export const createMember = async (req, res) => {
try {
const member = await Member.create(req.body);
res.status(201).json(member);
} catch (error) {
res.status(400).json({ message: error.message });
}
};

export const updateMember = async (req, res) => {
try {
const member = await Member.findByIdAndUpdate(req.params.id, req.body, {
new: true,
runValidators: true,
});

if (!member) {
return res.status(404).json({ message: 'Member not found' });
}

res.json(member);
} catch (error) {
res.status(400).json({ message: error.message });
}
};

export const deactivateMember = async (req, res) => {
try {
const member = await Member.findByIdAndUpdate(req.params.id, { isActive: false }, { new: true });

if (!member) {
return res.status(404).json({ message: 'Member not found' });
}

res.json({ message: 'Member deactivated', member });
} catch (error) {
res.status(500).json({ message: error.message });
}
};

export const deleteMember = async (req, res) => {
try {
const member = await Member.findByIdAndDelete(req.params.id);

if (!member) {
return res.status(404).json({ message: 'Member not found' });
}

res.json({ message: 'Member deleted' });
} catch (error) {
res.status(500).json({ message: error.message });
}
};
12 changes: 6 additions & 6 deletions app/backend/src/controllers/seasonsController.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export const createSeason = async (req, res) => {
try {
const season = new Season(req.body);
await season.save();
res.status(201).json({ message: 'Saison créée', season });
res.status(201).json({ message: 'Season created', season });
} catch (err) {
res.status(400).json({ message: err.message });
}
Expand All @@ -25,7 +25,7 @@ export const getSeasons = async (req, res) => {
export const getSeasonById = async (req, res) => {
try {
const season = await Season.findById(req.params.id);
if (!season) return res.status(404).json({ message: 'Saison non trouvée' });
if (!season) return res.status(404).json({ message: 'Season not found' });
res.json(season);
} catch (err) {
res.status(500).json({ message: err.message });
Expand All @@ -38,8 +38,8 @@ export const updateSeason = async (req, res) => {
const season = await Season.findByIdAndUpdate(req.params.id, req.body, {
new: true,
});
if (!season) return res.status(404).json({ message: 'Saison non trouvée' });
res.json({ message: 'Saison mise à jour', season });
if (!season) return res.status(404).json({ message: 'Season not found' });
res.json({ message: 'Season updated', season });
} catch (err) {
res.status(400).json({ message: err.message });
}
Expand All @@ -49,8 +49,8 @@ export const updateSeason = async (req, res) => {
export const deleteSeason = async (req, res) => {
try {
const season = await Season.findByIdAndDelete(req.params.id);
if (!season) return res.status(404).json({ message: 'Saison non trouvée' });
res.json({ message: 'Saison supprimée' });
if (!season) return res.status(404).json({ message: 'Season not found' });
res.json({ message: 'Season deleted' });
} catch (err) {
res.status(500).json({ message: err.message });
}
Expand Down
12 changes: 6 additions & 6 deletions app/backend/src/controllers/teamsController.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export const getTeamById = async (req, res) => {
const team = await Team.findById(req.params.id).populate('seasonId').populate('coachIds');

if (!team) {
return res.status(404).json({ message: 'Équipe non trouvée' });
return res.status(404).json({ message: 'Team not found' });
}

res.json(team);
Expand All @@ -41,7 +41,7 @@ export const updateTeam = async (req, res) => {
});

if (!team) {
return res.status(404).json({ message: 'Équipe non trouvée' });
return res.status(404).json({ message: 'Team not found' });
}

res.json(team);
Expand All @@ -55,10 +55,10 @@ export const archiveTeam = async (req, res) => {
const team = await Team.findByIdAndUpdate(req.params.id, { isArchived: true }, { new: true });

if (!team) {
return res.status(404).json({ message: 'Équipe non trouvée' });
return res.status(404).json({ message: 'Team not found' });
}

res.json({ message: 'Équipe archivée', team });
res.json({ message: 'Team archived', team });
} catch (error) {
res.status(500).json({ message: error.message });
}
Expand All @@ -69,10 +69,10 @@ export const deleteTeam = async (req, res) => {
const team = await Team.findByIdAndDelete(req.params.id);

if (!team) {
return res.status(404).json({ message: 'Équipe non trouvée' });
return res.status(404).json({ message: 'Team not found' });
}

res.json({ message: 'Équipe supprimée' });
res.json({ message: 'Team deleted' });
} catch (error) {
res.status(500).json({ message: error.message });
}
Expand Down
12 changes: 6 additions & 6 deletions app/backend/src/controllers/usersController.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export const getAllUsers = async (req, res) => {
export const getUserById = async (req, res) => {
try {
const user = await User.findById(req.params.id).select('-passwordHash');
if (!user) return res.status(404).json({ message: 'Utilisateur non trouvé' });
if (!user) return res.status(404).json({ message: 'User not found' });
res.json(user);
} catch (err) {
res.status(500).json({ message: err.message });
Expand All @@ -28,7 +28,7 @@ export const createUser = async (req, res) => {
const user = new User({ email, role, firstName, lastName });
await user.setPassword(password);
await user.save();
res.status(201).json({ message: 'Utilisateur créé', userId: user._id });
res.status(201).json({ message: 'User created', userId: user._id });
} catch (err) {
res.status(400).json({ message: err.message });
}
Expand All @@ -39,7 +39,7 @@ export const updateUser = async (req, res) => {
try {
const { email, role, firstName, lastName, isActive, password } = req.body;
const user = await User.findById(req.params.id);
if (!user) return res.status(404).json({ message: 'Utilisateur non trouvé' });
if (!user) return res.status(404).json({ message: 'User not found' });

if (email) user.email = email;
if (role) user.role = role;
Expand All @@ -49,7 +49,7 @@ export const updateUser = async (req, res) => {
if (password) await user.setPassword(password);

await user.save();
res.json({ message: 'Utilisateur mis à jour' });
res.json({ message: 'User updated' });
} catch (err) {
res.status(400).json({ message: err.message });
}
Expand All @@ -59,8 +59,8 @@ export const updateUser = async (req, res) => {
export const deleteUser = async (req, res) => {
try {
const user = await User.findByIdAndDelete(req.params.id);
if (!user) return res.status(404).json({ message: 'Utilisateur non trouvé' });
res.json({ message: 'Utilisateur supprimé' });
if (!user) return res.status(404).json({ message: 'User not found' });
res.json({ message: 'User deleted' });
} catch (err) {
res.status(500).json({ message: err.message });
}
Expand Down
55 changes: 40 additions & 15 deletions app/backend/src/models/Club.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,69 @@ import mongoose from 'mongoose';

const ClubSchema = new mongoose.Schema(
{
name: { type: String, required: true },
subtitle: { type: String, default: '' },
homeDescription: { type: String, default: '' },
clubDescription: { type: String, default: '' },
ownerDescription: { type: String, default: '' },
logo: { type: String, default: '' }, // URL ou chemin du logo
name: {
type: String,
default: 'Saint Barthélémy Volley-Ball',
required: true,
},
subtitle: {
type: String,
default: 'Passion, Performance, Partage', // Slogan plus dynamique
required: true,
},
homeDescription: {
type: String,
default:
'Bienvenue sur le site officiel du Saint Barthélémy Volley-Ball, le club où la passion du volley rencontre l’esprit d’équipe et la convivialité.',
},
clubDescription: {
type: String,
default:
'Le club propose des entraînements pour tous les niveaux, des jeunes aux seniors, dans un esprit de partage et de progression.',
},
ownerDescription: {
type: String,
default:
'Notre équipe dirigeante est composée de bénévoles passionnés, engagés pour le développement du volley-ball à Saint-Barthélémy.',
},
logo: {
type: String,
default: '/assets/images/default_logo.png', // chemin local par défaut
},
photo: {
type: String, // URL Nextcloud
trim: true,
type: String,
default: '/assets/images/default_club_photo.png', // chemin local par défaut
},
email: { type: String, default: '' },
phone: { type: String, default: '' },
address: { type: String, default: '' },
email: { type: String, default: 'contact@saintbarthvolley.fr' },
phone: { type: String, default: '(+33) 02 41 XX XX XX' },
address: { type: String, default: 'Saint-Barthélemy, Caraïbes' },

// Liens sociaux
social_links: {
facebook: { type: String, default: '' },
instagram: { type: String, default: '' },
youtube: { type: String, default: '' },
sporteasy: { type: String, default: '' },
clubMerch: { type: String, default: '' },
clubRegistration: { type: String, default: '' },
website: { type: String, default: '' },
other: { type: String, default: '' },
},

// Informations légales
legal_info: {
associationName: { type: String, default: '' },
legalForm: { type: String, default: '' },
associationName: { type: String, default: 'Saint Barth Volley-Ball' },
legalForm: { type: String, default: 'Association loi 1901' },
siret: { type: String, default: '' },
rna: { type: String, default: '' },
headOffice: { type: String, default: '' },
headOffice: { type: String, default: 'Saint-Barthélemy' },
publicationDate: { type: Date, default: null },
responsible: { type: String, default: '' },
hostingProvider: { type: String, default: '' },
updatedAt: { type: Date, default: null },
},
},
{ timestamps: true },
); // createdAt et updatedAt automatiques
);

export default mongoose.model('Club', ClubSchema);
Loading