Description du Système
Cette application web, construite avec Spring Boot, Vue.js et MySQL, permet aux étudiants de gérer et de partager leurs notes de lecture. Elle propose deux rôles principaux : administrateur et utilisateur. L'administrateur peut superviser les utilisateurs, gérer les notes publiées, administrer le système et modérer les interactions. L'utilisateur standard peut créer des notes personnelles, consulter et sauvegarder les partages d'autres étudiants.
Environnement et Outils
- Backend : Java 8+, Spring Boot, MyBatis, Maven
- Frontend : Vue.js, Element UI, Node.js 14+
- Base de données : MySQL 5.7+
- IDE Suggestion : IntelliJ IDEA (backend), VS Code (frontend)
Exemples de Code Refactorisé
Voici quelques exemples illustrant la restructuration du code backend. Les noms de classes, méthodes et variables ont été modifiés pour réduire la similarité tout en préservant la logique fonctionnelle.
Contrôleur pour les Statistiques Génériques
@RestController
@RequestMapping("/stats")
public class StatsAggregatorController {
@Autowired
private AnalyticsService analyticsService;
/**
* Récupère les valeurs pour un graphique.
*/
@GetMapping("/chart-data/{table}/{xField}/{yField}")
public ResponseEntity<map object="">> fetchChartData(
@PathVariable String table,
@PathVariable String xField,
@PathVariable String yField) {
Map<string object=""> parameters = Map.of(
"dataSource", table,
"categoryAxis", xField,
"valueAxis", yField
);
List<map object="">> chartPoints = analyticsService.aggregateValues(parameters);
return ResponseEntity.ok(Map.of("payload", chartPoints));
}
}
</map></string></map>
Contrôleur pour les Interactions (Sauvegardes)
@RestController
@RequestMapping("/bookmarks")
public class UserBookmarkController {
@Autowired
private BookmarkService bookmarkService;
/**
* Récupère la liste paginée des signets de l'utilisateur courant.
*/
@GetMapping
public ResponseEntity<pageresult> getMyBookmarks(
@RequestParam Map<string string=""> filters,
HttpServletRequest httpRequest) {
String currentUserRole = (String) httpRequest.getSession().getAttribute("userRole");
if (!"ADMIN".equals(currentUserRole)) {
filters.put("ownerId", String.valueOf(httpRequest.getSession().getAttribute("uid")));
}
PageResult result = bookmarkService.searchBookmarks(filters);
return ResponseEntity.ok(result);
}
/**
* Ajoute un nouveau signet.
*/
@PostMapping
public ResponseEntity<void> createBookmark(@RequestBody BookmarkRecord record, HttpServletRequest httpRequest) {
// Génération d'un ID unique
long generatedId = System.currentTimeMillis() + (long) (Math.random() * 1000);
record.setBookmarkId(generatedId);
bookmarkService.persistBookmark(record);
return ResponseEntity.ok().build();
}
}
</void></string></pageresult>
Extrait de Contrôleur pour les Utilisateurs
@RestController
@RequestMapping("/accounts")
public class AccountManagerController {
@Autowired
private UserProfileService profileService;
/**
* Réinitialise le mot de passe d'un utilisateur.
*/
@PostMapping("/reset-password")
public ResponseEntity<string> initiatePasswordReset(@RequestParam String accountName) {
UserProfile targetUser = profileService.findByAccountName(accountName);
if (targetUser == null) {
return ResponseEntity.badRequest().body("Compte introuvable.");
}
targetUser.setEncryptedPass("defaultTempPass123");
profileService.updateProfile(targetUser);
return ResponseEntity.ok("Mot de passe réinitialisé.");
}
}
</string>