This commit is contained in:
Utkarsh Khedkar
2025-12-19 11:04:16 +05:30
16 changed files with 76 additions and 65 deletions

View File

@@ -60,6 +60,7 @@ class NewChatMessage implements ShouldBroadcastNow
'sender_id' => $this->message->sender_id, 'sender_id' => $this->message->sender_id,
'sender_type' => $this->message->sender_type, 'sender_type' => $this->message->sender_type,
'message' => $this->message->message, 'message' => $this->message->message,
'client_id' => $this->message->client_id,
// ✅ relative path only // ✅ relative path only
'file_path' => $this->message->file_path ?? null, 'file_path' => $this->message->file_path ?? null,

View File

@@ -183,6 +183,8 @@ class AdminInvoiceController extends Controller
// Mark as 'paid' if GST-inclusive total is cleared // Mark as 'paid' if GST-inclusive total is cleared
if ($newPaid >= $invoice->final_amount_with_gst) { if ($newPaid >= $invoice->final_amount_with_gst) {
$invoice->update(['status' => 'paid']); $invoice->update(['status' => 'paid']);
$this->generateInvoicePDF($invoice);
} }
return response()->json([ return response()->json([
@@ -210,6 +212,8 @@ class AdminInvoiceController extends Controller
// Update status if not fully paid anymore // Update status if not fully paid anymore
if ($remaining > 0 && $invoice->status === "paid") { if ($remaining > 0 && $invoice->status === "paid") {
$invoice->update(['status' => 'pending']); $invoice->update(['status' => 'pending']);
$this->generateInvoicePDF($invoice);
} }
return response()->json([ return response()->json([

View File

@@ -6,77 +6,49 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use PHPOpenSourceSaver\JWTAuth\Facades\JWTAuth; use PHPOpenSourceSaver\JWTAuth\Facades\JWTAuth;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Log;
class UserAuthController extends Controller class UserAuthController extends Controller
{ {
public function refreshToken() public function refreshToken()
{ {
\Log::info('🔄 refreshToken() called'); Log::info('🔄 [JWT-REFRESH] called');
try { try {
// Get current token $newToken = JWTAuth::parseToken()->refresh();
$currentToken = JWTAuth::getToken();
if (!$currentToken) { Log::info('✅ [JWT-REFRESH] Token refreshed');
\Log::warning('⚠ No token provided in refreshToken()');
return response()->json([
'success' => false,
'message' => 'Token not provided',
], 401);
}
\Log::info('📥 Current Token:', ['token' => (string) $currentToken]);
// Try refreshing token
$newToken = JWTAuth::refresh($currentToken);
\Log::info('✅ Token refreshed successfully', ['new_token' => $newToken]);
return response()->json([ return response()->json([
'success' => true, 'success' => true,
'token' => $newToken, 'token' => $newToken,
]); ]);
} catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) { } catch (\PHPOpenSourceSaver\JWTAuth\Exceptions\TokenExpiredException $e) {
\Log::error('❌ TokenExpiredException in refreshToken()', [ Log::warning('⛔ [JWT-REFRESH] Refresh TTL expired');
'message' => $e->getMessage(),
]);
return response()->json([
'success' => false,
'message' => 'Token expired, cannot refresh.',
], 401);
} catch (\Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
\Log::error('❌ TokenInvalidException in refreshToken()', [
'message' => $e->getMessage(),
]);
return response()->json([ return response()->json([
'success' => false, 'success' => false,
'message' => 'Invalid token.', 'message' => 'Refresh expired. Please login again.',
], 401);
} catch (\Tymon\JWTAuth\Exceptions\JWTException $e) {
\Log::error('❌ JWTException in refreshToken()', [
'message' => $e->getMessage(),
]);
return response()->json([
'success' => false,
'message' => 'Could not refresh token.',
], 401); ], 401);
} catch (\Exception $e) { } catch (\Exception $e) {
\Log::error('❌ General Exception in refreshToken()', [ Log::error('🔥 [JWT-REFRESH] Exception', [
'message' => $e->getMessage(), 'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]); ]);
return response()->json([ return response()->json([
'success' => false, 'success' => false,
'message' => 'Unexpected error while refreshing token.', 'message' => 'Unable to refresh token.',
], 500); ], 401);
} }
} }
/** /**
* User Login * User Login
*/ */

View File

@@ -67,7 +67,7 @@ class ChatController extends Controller
'sender_id' => auth()->id(), 'sender_id' => auth()->id(),
'sender_type' => \App\Models\User::class, 'sender_type' => \App\Models\User::class,
'message' => $request->message, 'message' => $request->message,
'client_id' => $request->client_id, // ✅ ADD
'read_by_admin' => false, 'read_by_admin' => false,
'read_by_user' => true, 'read_by_user' => true,
]; ];

View File

@@ -18,6 +18,7 @@ class ChatMessage extends Model
'file_type', 'file_type',
'read_by_admin', 'read_by_admin',
'read_by_user', 'read_by_user',
'client_id',
]; ];

View File

@@ -89,7 +89,7 @@ return [
| |
*/ */
'ttl' => (int) env('JWT_TTL', 86400), 'ttl' => (int) env('JWT_TTL', 15),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -108,7 +108,7 @@ return [
| |
*/ */
'refresh_ttl' => (int) env('JWT_REFRESH_TTL', 129600), 'refresh_ttl' => (int) env('JWT_REFRESH_TTL', 60),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

View File

@@ -0,0 +1,25 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('chat_messages', function (Blueprint $table) {
$table->string('client_id')
->nullable()
->after('sender_type')
->index();
});
}
public function down(): void
{
Schema::table('chat_messages', function (Blueprint $table) {
$table->dropColumn('client_id');
});
}
};

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@@ -19,8 +19,11 @@ Route::post('/signup-request', [RequestController::class, 'usersignup']);
//login / logout //login / logout
Route::post('/user/login', [UserAuthController::class, 'login']); Route::post('/user/login', [UserAuthController::class, 'login']);
Route::post('/auth/refresh', [UserAuthController::class, 'refreshToken']);
Route::middleware(['auth:api'])->group(function () { Route::middleware(['auth:api'])->group(function () {
//Route::post('/user/refresh', [UserAuthController::class, 'refreshToken']);
Route::post('/user/logout', [UserAuthController::class, 'logout']); Route::post('/user/logout', [UserAuthController::class, 'logout']);
@@ -35,9 +38,10 @@ Route::middleware(['auth:api'])->group(function () {
Route::get('/user/order/{order_id}/shipment', [UserOrderController::class, 'orderShipment']); Route::get('/user/order/{order_id}/shipment', [UserOrderController::class, 'orderShipment']);
Route::get('/user/order/{order_id}/invoice', [UserOrderController::class, 'orderInvoice']); Route::get('/user/order/{order_id}/invoice', [UserOrderController::class, 'orderInvoice']);
Route::get('/user/order/{order_id}/track', [UserOrderController::class, 'trackOrder']); Route::get('/user/order/{order_id}/track', [UserOrderController::class, 'trackOrder']);
Route::get('/user/invoice/{invoice_id}/details', [UserOrderController::class, 'invoiceDetails']);
// Invoice List // Invoice List
Route::get('/user/invoice/{invoice_id}/details', [UserOrderController::class, 'invoiceDetails']);
Route::get('/user/invoices', [UserOrderController::class, 'allInvoices']); Route::get('/user/invoices', [UserOrderController::class, 'allInvoices']);
Route::get('/user/invoice/{invoice_id}/installments', [UserOrderController::class, 'invoiceInstallmentsById']); Route::get('/user/invoice/{invoice_id}/installments', [UserOrderController::class, 'invoiceInstallmentsById']);

View File

@@ -35,6 +35,10 @@ Route::prefix('admin')->middleware('web')->group(function () {
}); });
Route::get('/login', function () {
return redirect()->route('admin.login');
})->name('login');
@@ -217,7 +221,7 @@ Route::prefix('admin')
->name('admin.invoice.installment.delete'); ->name('admin.invoice.installment.delete');
//Add New Invoice // //Add New Invoice
Route::get('/admin/invoices/create', [InvoiceController::class, 'create'])->name('admin.invoices.create'); Route::get('/admin/invoices/create', [InvoiceController::class, 'create'])->name('admin.invoices.create');