This commit is contained in:
Codex
2026-07-10 10:38:02 -05:00
parent 63820994f8
commit 42db078e47
51 changed files with 1173 additions and 26 deletions
+14 -2
View File
@@ -1,5 +1,6 @@
<?php
use App\Models\Dispute;
use App\Models\JobPost;
use App\Models\ProviderProfile;
use App\Models\WorkOrder;
@@ -16,11 +17,12 @@ Route::get('/jobs', function () {
Route::middleware('auth:sanctum')->group(function () {
Route::get('/me', function (Request $request) {
return $request->user()->load('roles', 'providerProfile', 'buyerProfile');
return $request->user()->load('roles', 'providerProfile', 'buyerProfile')
->setAttribute('unread_notifications_count', $request->user()->unreadNotifications()->count());
});
Route::get('/work-orders', function (Request $request) {
return WorkOrder::with('jobPost:id,title,location', 'buyer:id,name', 'provider:id,name')
return WorkOrder::with('jobPost:id,title,location', 'buyer:id,name', 'provider:id,name', 'messages.user:id,name', 'reviews', 'disputes')
->where(fn ($query) => $query
->where('buyer_id', $request->user()->id)
->orWhere('provider_id', $request->user()->id)
@@ -28,4 +30,14 @@ Route::middleware('auth:sanctum')->group(function () {
->latest()
->paginate(20);
});
Route::get('/disputes', function (Request $request) {
return Dispute::with('workOrder.jobPost:id,title', 'openedBy:id,name', 'votes.user:id,name')
->whereHas('workOrder', fn ($query) => $query
->where('buyer_id', $request->user()->id)
->orWhere('provider_id', $request->user()->id)
)
->latest()
->paginate(20);
});
});
+13
View File
@@ -1,14 +1,19 @@
<?php
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\AttachmentController;
use App\Http\Controllers\BuyerProfileController;
use App\Http\Controllers\CommentController;
use App\Http\Controllers\DisputeController;
use App\Http\Controllers\DisputeVoteController;
use App\Http\Controllers\ExternalProfileImportController;
use App\Http\Controllers\JobPostController;
use App\Http\Controllers\ProviderProfileController;
use App\Http\Controllers\QuoteController;
use App\Http\Controllers\ReviewController;
use App\Http\Controllers\SocialPostController;
use App\Http\Controllers\WorkOrderMessageController;
use App\Http\Controllers\WorkOrderController;
use Illuminate\Support\Facades\Route;
@@ -33,18 +38,26 @@ Route::middleware('auth')->group(function () {
Route::put('/buyer-profile', [BuyerProfileController::class, 'update'])->name('buyers.update');
Route::post('/feed', [SocialPostController::class, 'store'])->name('feed.store');
Route::post('/comments', [CommentController::class, 'store'])->name('comments.store');
Route::post('/attachments', [AttachmentController::class, 'store'])->name('attachments.store');
Route::get('/jobs/create', [JobPostController::class, 'create'])->name('jobs.create');
Route::post('/jobs', [JobPostController::class, 'store'])->name('jobs.store');
Route::post('/jobs/{job}/quotes', [QuoteController::class, 'store'])->name('quotes.store');
Route::patch('/quotes/{quote}', [QuoteController::class, 'update'])->name('quotes.update');
Route::post('/quotes/{quote}/accept', [QuoteController::class, 'accept'])->name('quotes.accept');
Route::post('/quotes/{quote}/decline', [QuoteController::class, 'decline'])->name('quotes.decline');
Route::get('/work-orders', [WorkOrderController::class, 'index'])->name('work-orders.index');
Route::get('/work-orders/{workOrder}', [WorkOrderController::class, 'show'])->name('work-orders.show');
Route::patch('/work-orders/{workOrder}/transition', [WorkOrderController::class, 'transition'])->name('work-orders.transition');
Route::post('/work-orders/{workOrder}/messages', [WorkOrderMessageController::class, 'store'])->name('work-order-messages.store');
Route::post('/work-orders/{workOrder}/reviews', [ReviewController::class, 'store'])->name('reviews.store');
Route::post('/work-orders/{workOrder}/disputes', [DisputeController::class, 'store'])->name('disputes.store');
Route::get('/disputes/{dispute}', [DisputeController::class, 'show'])->name('disputes.show');
Route::post('/disputes/{dispute}/votes', [DisputeVoteController::class, 'store'])->name('dispute-votes.store');
Route::get('/admin', [AdminController::class, 'index'])->name('admin.index');
});
Route::get('/providers', [ProviderProfileController::class, 'index'])->name('providers.index');