Initial commit: proyecto ContabilidadSaPolar completo

This commit is contained in:
root
2026-08-19 21:30:23 +00:00
commit 0d5c6f9512
232 changed files with 26730 additions and 0 deletions
@@ -0,0 +1,87 @@
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));
}
}