Plateforme de Partage de Notes de Lecture Étudiante avec Spring Boot et MySQL

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>

Étiquettes: Spring Boot Vue.js Element UI MySQL MyBatis

Publié le 13 juillet à 10h53