Skip to content

Commit 4219f0e

Browse files
committed
feat(backend): Fixes #84 - Collection Albums
1 parent b7f3f04 commit 4219f0e

5 files changed

Lines changed: 113 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2424
### Supprimé
2525

2626
-
27+
---
28+
29+
## [0.2.0] - 2026-01-22
30+
31+
### Ajouté
2732

33+
- /Backend
34+
- server.js
35+
- /src
36+
- app.js
37+
- /controllers
38+
- /models
39+
- /routes
40+
2841
---
2942

3043
## [0.1.0] - 2026-01-21

app/backend/src/app.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import seasonsRoutes from './routes/seasons.js';
1919
import teamsRoutes from './routes/teams.js';
2020
import membersRoutes from './routes/members.js';
2121
import newsRoutes from './routes/news.js';
22+
import albumRoutes from './routes/albums.js';
2223

2324
// Utiliser les routes
2425
app.use('/api/users', usersRoutes);
@@ -27,5 +28,6 @@ app.use('/api/seasons', seasonsRoutes);
2728
app.use('/api/teams', teamsRoutes);
2829
app.use('/api/members', membersRoutes);
2930
app.use('/api/news', newsRoutes);
31+
app.use('/api/albums', albumRoutes);
3032

3133
export default app;
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import Album from '../models/Album.js';
2+
3+
// Récupérer tous les albums
4+
export const getAlbums = async (req, res) => {
5+
try {
6+
const albums = await Album.find();
7+
res.json(albums);
8+
} catch (error) {
9+
res.status(500).json({ message: error.message });
10+
}
11+
};
12+
13+
// Récupérer un album par ID
14+
export const getAlbumById = async (req, res) => {
15+
try {
16+
const album = await Album.findById(req.params.id);
17+
if (!album) return res.status(404).json({ message: 'Album non trouvé' });
18+
res.json(album);
19+
} catch (error) {
20+
res.status(500).json({ message: error.message });
21+
}
22+
};
23+
24+
// Créer un nouvel album
25+
export const createAlbum = async (req, res) => {
26+
try {
27+
const album = await Album.create(req.body);
28+
res.status(201).json(album);
29+
} catch (error) {
30+
res.status(400).json({ message: error.message });
31+
}
32+
};
33+
34+
// Mettre à jour un album
35+
export const updateAlbum = async (req, res) => {
36+
try {
37+
const album = await Album.findByIdAndUpdate(req.params.id, req.body, {
38+
new: true,
39+
runValidators: true,
40+
});
41+
if (!album) return res.status(404).json({ message: 'Album non trouvé' });
42+
res.json(album);
43+
} catch (error) {
44+
res.status(400).json({ message: error.message });
45+
}
46+
};
47+
48+
// Supprimer un album
49+
export const deleteAlbum = async (req, res) => {
50+
try {
51+
const album = await Album.findByIdAndDelete(req.params.id);
52+
if (!album) return res.status(404).json({ message: 'Album non trouvé' });
53+
res.json({ message: 'Album supprimé', album });
54+
} catch (error) {
55+
res.status(500).json({ message: error.message });
56+
}
57+
};

app/backend/src/models/Album.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import mongoose from 'mongoose';
2+
3+
const albumSchema = new mongoose.Schema(
4+
{
5+
title: {
6+
type: String,
7+
required: true,
8+
trim: true,
9+
},
10+
description: {
11+
type: String,
12+
default: '',
13+
},
14+
eventDate: {
15+
type: Date,
16+
default: null,
17+
},
18+
isPublic: {
19+
type: Boolean,
20+
default: true,
21+
},
22+
},
23+
{
24+
timestamps: true, // createdAt et updatedAt automatiques
25+
},
26+
);
27+
28+
export default mongoose.model('Album', albumSchema);

app/backend/src/routes/albums.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import express from 'express';
2+
import { getAlbums, getAlbumById, createAlbum, updateAlbum, deleteAlbum } from '../controllers/albumController.js';
3+
4+
const router = express.Router();
5+
6+
// Routes CRUD
7+
router.get('/', getAlbums);
8+
router.get('/:id', getAlbumById);
9+
router.post('/', createAlbum);
10+
router.put('/:id', updateAlbum);
11+
router.delete('/:id', deleteAlbum);
12+
13+
export default router;

0 commit comments

Comments
 (0)