feat(api): sincronizar tipo de elemento y activo/inactivo en la app móvil

- bundle: mapFeature incluye feature_type_id e is_active; nuevo array feature_types
  (catálogo) para que el móvil resuelva nombres/colores.
- /sync feature.update acepta is_active y feature_type_id (last-write-wins).
- openapi.yaml: bundle documenta feature_types.

Tests: MobileApiTest cubre feature.update con los nuevos campos + bundle. Suite 88 passing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-25 16:19:33 +02:00
co-authored by Claude Opus 4.8
parent 3ee70cf48d
commit a52be91dd4
4 changed files with 33 additions and 4 deletions
@@ -73,6 +73,7 @@ class ProjectApiController extends Controller
'phases' => $phases->map(fn ($p) => $this->mapPhase($p))->values(),
'layers' => $layers->map(fn ($l) => $this->mapLayer($l))->values(),
'features' => $features->map(fn ($f) => $this->mapFeature($f))->values(),
'feature_types' => \App\Models\FeatureType::orderBy('name')->get(['id', 'name', 'color'])->values(),
'inspections' => $inspections->map(fn ($i) => $this->mapInspection($i))->values(),
'issues' => $issues->map(fn ($i) => $this->mapIssue($i))->values(),
'issue_tasks' => $issueTasks->map(fn ($t) => $this->mapIssueTask($t))->values(),
@@ -156,6 +157,7 @@ class ProjectApiController extends Controller
'id' => $f->id, 'layer_id' => $f->layer_id, 'name' => $f->name,
'geometry' => $f->geometry, 'status' => $f->status, 'progress' => $f->progress,
'responsible' => $f->responsible, 'template_id' => $f->template_id,
'feature_type_id' => $f->feature_type_id, 'is_active' => (bool) $f->is_active,
'updated_at' => $f->updated_at?->toIso8601String(),
];
}