SeedingAdminController.java

package fr.avenirsesr.portfolio.shared.application.adapter.controller;

import fr.avenirsesr.portfolio.shared.infrastructure.adapter.seeder.SeederOrchestrator;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/admin/seeding")
@RequiredArgsConstructor
public class SeedingAdminController {

  private final SeederOrchestrator seederOrchestrator;

  @Value("${admin.token:}")
  private String adminToken;

  @PostMapping("/run")
  public ResponseEntity<String> run(
      @RequestHeader(name = "X-ADMIN-TOKEN", required = false) String token) {
    if (adminToken == null || adminToken.isBlank()) {
      return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).build();
    }

    if (token == null || !token.equals(adminToken)) {
      return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
    }
    try {
      seederOrchestrator.resetAndSeed();
    } catch (Exception e) {
      return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
          .body("Failed to clear existing data: " + e.getMessage());
    }
    return ResponseEntity.ok("Seeding is completed.");
  }
}