Files
Jobhero_back/app/Http/Controllers/PropertyController.php
Carlos 700ddafba4 feat: branch betos — propiedades, oferta de proveedores, chat en contratos y flujo de postulacion renovado
- Sistema de propiedades: tabla, modelo, CRUD API para que el cliente guarde direcciones nombradas
- Postulacion renovada: cliente elige propiedad sin precio ni fecha, sube fotos a GCS/S3
- Proveedores ofertan date_1, date_2 y amount al postularse via pivot; sort por fecha/monto/membresia
- Contratacion: selected_date recibe date_1 o date_2, amount desde pivot (depreca minimun_fee)
- Cancelacion/repostulacion: archive con status=perdido, related_postulation_id para vincular
- Chat en contratos activos: tabla contract_comments, controller, rutas web+API, vista panel, notificaciones bilingues
- PaymentIntent calcula amount desde pivot en vez de recibirlo del front
- getpendingcontracts: sin filtro de tiempo, filtra por status=active, agrega time_created
- Expiracion de postulaciones reducida a 1000 min

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 11:26:10 -06:00

58 lines
1.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Property;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
class PropertyController extends Controller
{
public function index()
{
$properties = Auth::user()->properties()->orderBy('name')->get();
return response()->json($properties);
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string',
'address' => 'required|string',
'lat' => 'required|numeric',
'lng' => 'required|numeric',
'int_number' => 'nullable|string',
'icon' => 'nullable|in:casa,oficina',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$property = new Property();
$property->user_id = Auth::id();
$property->name = strip_tags($request->name);
$property->address = strip_tags($request->address);
$property->lat = $request->lat;
$property->lng = $request->lng;
$property->int_number = $request->int_number ? strip_tags($request->int_number) : null;
$property->icon = $request->icon ?? 'casa';
$property->save();
return response()->json($property, 201);
}
public function destroy($id)
{
$property = Property::find($id);
if (!$property || $property->user_id !== Auth::id()) {
return response()->json(['message' => 'No autorizado'], 403);
}
$property->delete();
return response()->json(['message' => 'Propiedad eliminada']);
}
}