- 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>
58 lines
1.7 KiB
PHP
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']);
|
|
}
|
|
}
|