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>
This commit is contained in:
57
app/Http/Controllers/PropertyController.php
Normal file
57
app/Http/Controllers/PropertyController.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?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']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user