File: /var/www/vhost/disk-apps/qas.sports-crowd.com/app/Http/Controllers/Tickets/TransferController.php
<?php
namespace App\Http\Controllers\Tickets;
use App\Core\Ticket\Application\TransferService;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
class TransferController extends Controller
{
protected $transferService;
public function __construct(TransferService $transferService)
{
$this->transferService = $transferService;
}
public function batchTransfer(Request $request)
{
$user = Auth::user();
$request->validate([
'ticket_count' => 'required|integer|min:1',
'recipient_email' => 'required|email',
'match_event_id' => 'required|integer|exists:match_events,id',
'ticket_ids' => 'array',
'zone' => 'required|string',
]);
try {
$response = $this->transferService->batchTransfer(
$user->id,
$request->ticket_count,
$request->recipient_email,
$request->match_event_id,
$request->zone,
$request->ticket_ids
);
return response()->json([
'status' => 'success',
'data' => $response
]);
} catch (Exception $e) {
return response()->json([
'status' => 'fail',
'message' => $e->getMessage()
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
public function acceptTransfer($transferGroup)
{
try {
$user = Auth::user();
$this->transferService->acceptTransfer($user, $transferGroup);
return response()->json([
'status' => 'success',
'data' => null,
'message' => __('transfer_tickets.accepted_tickets')
]);
} catch (Exception $e) {
return response()->json([
'status' => 'fail',
'message' => $e->getMessage()
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
public function declineTransfer($transferGroup)
{
try {
$user = Auth::user();
$this->transferService->declineTransfer($user->id, $transferGroup);
return response()->json([
'status' => 'success',
'data' => null,
'message' => __('transfer_tickets.declined_tickets')
]);
} catch (Exception $e) {
return response()->json([
'status' => 'fail',
'message' => $e->getMessage()
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
public function reassignTransfer(Request $request, $transferGroup)
{
$request->validate([
'new_user_email' => 'required|email'
]);
try {
$user = Auth::user();
$this->transferService->reassignTransfer($user->id, $transferGroup, $request->new_user_email);
return response()->json([
'status' => 'success',
'data' => null,
'message' => __('transfer_tickets.reassigned_tickets')
]);
} catch (Exception $e) {
return response()->json([
'status' => 'fail',
'message' => $e->getMessage()
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
public function reverseTransfer($transferGroup)
{
try {
$user = Auth::user();
$this->transferService->reverseTransfer($user->id, $transferGroup);
return response()->json([
'status' => 'success',
'data' => null,
'message' => __('transfer_tickets.reversed_tickets')
]);
} catch (Exception $e) {
return response()->json([
'status' => 'fail',
'message' => $e->getMessage()
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
public function getPendingTransfers()
{
try {
$user = Auth::user();
$pendingTransfers = $this->transferService->getPendingTransfersByUser($user);
foreach ($pendingTransfers as $pendingTransfer) {
$pendingTransfer->match_event = null;
$pendingTransfer->match_event = $this->transferService->getMatchEventByTransferGroupId($pendingTransfer->transfer_group);
}
return response()->json([
'status' => 'success',
'data' => $pendingTransfers
]);
} catch (Exception $e) {
return response()->json([
'status' => 'fail',
'message' => $e->getMessage()
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
}