88 lines
3.8 KiB
Java
88 lines
3.8 KiB
Java
package com.sapolar.maintenance;
|
|
|
|
import com.sapolar.auth.SecurityUser;
|
|
import com.sapolar.common.dto.ApiResponse;
|
|
import com.sapolar.finance.expense.ExpenseCategory;
|
|
import com.sapolar.finance.expense.ExpenseCategoryRepository;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.format.annotation.DateTimeFormat;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import java.time.LocalDate;
|
|
import java.util.List;
|
|
|
|
@RestController
|
|
@RequestMapping("/api/maintenance")
|
|
@RequiredArgsConstructor
|
|
public class MaintenanceController {
|
|
|
|
private final MaintenanceService maintenanceService;
|
|
private final ExpenseCategoryRepository expenseCategoryRepository;
|
|
|
|
@GetMapping
|
|
public ResponseEntity<ApiResponse<List<ScheduledMaintenance>>> findAll(
|
|
@RequestParam(required = false) Long propertyId) {
|
|
if (propertyId != null) {
|
|
return ResponseEntity.ok(ApiResponse.success(maintenanceService.findByProperty(propertyId)));
|
|
}
|
|
return ResponseEntity.ok(ApiResponse.success(maintenanceService.findAll()));
|
|
}
|
|
|
|
@GetMapping("/pending")
|
|
public ResponseEntity<ApiResponse<List<ScheduledMaintenance>>> getPending() {
|
|
return ResponseEntity.ok(ApiResponse.success(maintenanceService.findPending()));
|
|
}
|
|
|
|
@GetMapping("/upcoming")
|
|
public ResponseEntity<ApiResponse<List<ScheduledMaintenance>>> getUpcoming(
|
|
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate from,
|
|
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate to) {
|
|
return ResponseEntity.ok(ApiResponse.success(maintenanceService.findUpcoming(from, to)));
|
|
}
|
|
|
|
@GetMapping("/{id}")
|
|
public ResponseEntity<ApiResponse<ScheduledMaintenance>> findById(@PathVariable Long id) {
|
|
return ResponseEntity.ok(ApiResponse.success(maintenanceService.findById(id)));
|
|
}
|
|
|
|
@GetMapping("/expense-categories")
|
|
public ResponseEntity<ApiResponse<List<ExpenseCategory>>> getExpenseCategories() {
|
|
return ResponseEntity.ok(ApiResponse.success(expenseCategoryRepository.findAll()));
|
|
}
|
|
|
|
@PostMapping
|
|
public ResponseEntity<ApiResponse<ScheduledMaintenance>> create(@RequestBody ScheduledMaintenance maintenance,
|
|
@AuthenticationPrincipal SecurityUser user) {
|
|
return ResponseEntity.ok(ApiResponse.success("Mantenimiento creado",
|
|
maintenanceService.create(maintenance, user.userId())));
|
|
}
|
|
|
|
@PutMapping("/{id}")
|
|
public ResponseEntity<ApiResponse<ScheduledMaintenance>> update(@PathVariable Long id,
|
|
@RequestBody ScheduledMaintenance maintenance) {
|
|
return ResponseEntity.ok(ApiResponse.success("Mantenimiento actualizado",
|
|
maintenanceService.update(id, maintenance)));
|
|
}
|
|
|
|
@PatchMapping("/{id}/complete")
|
|
public ResponseEntity<ApiResponse<ScheduledMaintenance>> complete(@PathVariable Long id,
|
|
@AuthenticationPrincipal SecurityUser user) {
|
|
return ResponseEntity.ok(ApiResponse.success("Mantenimiento completado",
|
|
maintenanceService.markCompleted(id, user.userId())));
|
|
}
|
|
|
|
@PatchMapping("/{id}/reopen")
|
|
public ResponseEntity<ApiResponse<ScheduledMaintenance>> reopen(@PathVariable Long id) {
|
|
return ResponseEntity.ok(ApiResponse.success("Mantenimiento reabierto",
|
|
maintenanceService.reopen(id)));
|
|
}
|
|
|
|
@DeleteMapping("/{id}")
|
|
public ResponseEntity<ApiResponse<Void>> delete(@PathVariable Long id) {
|
|
maintenanceService.delete(id);
|
|
return ResponseEntity.ok(ApiResponse.success("Mantenimiento eliminado", null));
|
|
}
|
|
}
|