Add all files

This commit is contained in:
root
2025-11-30 11:57:22 +01:00
parent 2ee51cac4f
commit 044271db3d
1476 changed files with 142544 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Http\Requests\Api\Admin;
use Illuminate\Foundation\Http\FormRequest;
abstract class AdminApiRequest extends FormRequest
{
protected $permission;
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return in_array('admin.' . $this->permission, $this->instance()->attributes->get('api_key_permissions', []));
}
/**
* Default set of rules to apply to API requests.
*/
public function rules(): array
{
return [];
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace App\Http\Requests\Api\Admin\Invoices;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class CreateInvoiceRequest extends AdminApiRequest
{
protected $permission = 'invoices.create';
public function rules(): array
{
return [
'user_id' => 'required|exists:users,id',
/**
* @example USD
*/
'currency_code' => 'required|string|exists:currencies,code',
'due_at' => 'nullable|date',
/**
* @default pending
*/
'status' => 'required|string|in:pending,paid,cancelled', // Status can be one of these values
];
}
public function prepareForValidation()
{
$this->mergeIfMissing([
'status' => 'pending', // Default status to 'pending' if not provided
]);
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Invoices;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class DeleteInvoiceRequest extends AdminApiRequest
{
protected $permission = 'invoices.delete';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Invoices;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetInvoiceRequest extends AdminApiRequest
{
protected $permission = 'invoices.view';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Invoices;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetInvoicesRequest extends AdminApiRequest
{
protected $permission = 'invoices.view';
}

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Http\Requests\Api\Admin\Invoices;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class UpdateInvoiceRequest extends AdminApiRequest
{
protected $permission = 'invoices.update';
public function rules(): array
{
return [
'user_id' => 'required|exists:users,id',
/**
* @example USD
*/
'currency_code' => 'required|string|exists:currencies,code',
'due_at' => 'nullable|date',
/**
* @default pending
*/
'status' => 'required|string|in:pending,paid,cancelled', // Status can be one of these values
];
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\Api\Admin\Orders;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class CreateOrderRequest extends AdminApiRequest
{
protected $permission = 'orders.create';
public function rules(): array
{
return [
'user_id' => 'required|exists:users,id',
/**
* @example USD
*/
'currency_code' => 'required|string|exists:currencies,code',
];
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Orders;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class DeleteOrderRequest extends AdminApiRequest
{
protected $permission = 'orders.delete';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Orders;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetOrderRequest extends AdminApiRequest
{
protected $permission = 'orders.view';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Orders;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetOrdersRequest extends AdminApiRequest
{
protected $permission = 'orders.view';
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\Api\Admin\Orders;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class UpdateOrderRequest extends AdminApiRequest
{
protected $permission = 'orders.update';
public function rules(): array
{
return [
'user_id' => 'required|exists:users,id',
/**
* @example USD
*/
'currency_code' => 'required|string|exists:currencies,code',
];
}
}

View File

@@ -0,0 +1,55 @@
<?php
namespace App\Http\Requests\Api\Admin\Services;
use App\Http\Requests\Api\Admin\AdminApiRequest;
use App\Models\Product;
class CreateServiceRequest extends AdminApiRequest
{
protected $permission = 'services.create';
public function rules(): array
{
return [
'product_id' => 'required|exists:products,id',
'plan_id' => [
'required',
'exists:plans,id',
function ($attribute, $value, $fail) {
$productId = $this->input('product_id');
if ($productId && !\App\Models\Plan::where('id', $value)->where('priceable_type', Product::class)->where('priceable_id', $productId)->exists()) {
// Check if the plan belongs to the specified product
$fail('The selected plan does not belong to the specified product.');
}
},
],
'user_id' => 'required|exists:users,id',
/**
* @default 1
*/
'quantity' => 'required|integer|min:1',
/**
* @default pending
*/
'status' => 'required|in:pending,active,cancelled,suspended',
'expires_at' => 'nullable|date|after_or_equal:today',
/**
* @example USD
*/
'currency_code' => 'required|string|exists:currencies,code',
'price' => 'required|numeric|min:0',
'coupon_id' => 'nullable|exists:coupons,id',
'subscription_id' => 'nullable|string|max:255',
'order_id' => 'nullable|exists:orders,id',
];
}
public function prepareForValidation()
{
$this->mergeIfMissing([
'quantity' => 1, // Default quantity to 1 if not provided
'status' => 'pending', // Default status to 'pending' if not provided
]);
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Services;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class DeleteServiceRequest extends AdminApiRequest
{
protected $permission = 'services.delete';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Services;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetServiceRequest extends AdminApiRequest
{
protected $permission = 'services.view';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Services;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetServicesRequest extends AdminApiRequest
{
protected $permission = 'services.view';
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Http\Requests\Api\Admin\Services;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class UpdateServiceRequest extends AdminApiRequest
{
protected $permission = 'services.update';
public function rules(): array
{
return [
'product_id' => 'required|exists:products,id',
'plan_id' => [
'required',
'exists:plans,id',
function ($attribute, $value, $fail) {
$productId = $this->input('product_id');
if ($productId && !\App\Models\Plan::where('id', $value)->where('priceable_type', Product::class)->where('priceable_id', $productId)->exists()) {
// Check if the plan belongs to the specified product
$fail('The selected plan does not belong to the specified product.');
}
},
],
'user_id' => 'required|exists:users,id',
/**
* @default 1
*/
'quantity' => 'required|integer|min:1',
/**
* @default pending
*/
'status' => 'required|in:pending,active,cancelled,suspended',
'expires_at' => 'nullable|date|after_or_equal:today',
/**
* @example USD
*/
'currency_code' => 'required|string|exists:currencies,code',
'price' => 'required|numeric|min:0',
'coupon_id' => 'nullable|exists:coupons,id',
'subscription_id' => 'nullable|string|max:255',
'order_id' => 'nullable|exists:orders,id',
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Http\Requests\Api\Admin\TicketMessages;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class CreateTicketMessageRequest extends AdminApiRequest
{
protected $permission = 'ticket_messages.create';
public function rules(): array
{
return [
'message' => 'required|string|max:5000',
'user_id' => 'required|exists:users,id',
'ticket_id' => 'required|exists:tickets,id',
];
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\TicketMessages;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class DeleteTicketMessageRequest extends AdminApiRequest
{
protected $permission = 'ticket_messages.delete';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\TicketMessages;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetTicketMessageRequest extends AdminApiRequest
{
protected $permission = 'ticket_messages.view';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\TicketMessages;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetTicketMessagesRequest extends AdminApiRequest
{
protected $permission = 'ticket_messages.view';
}

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests\Api\Admin\Tickets;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class CreateTicketRequest extends AdminApiRequest
{
protected $permission = 'tickets.create';
public function rules(): array
{
return [
'subject' => 'required|string|max:255',
'user_id' => 'required|exists:users,id',
'department' => 'nullable|string|in:' . implode(',', config('settings.ticket_departments', [])),
'priority' => 'required|string|in:low,medium,high',
'status' => 'required|string|in:open,closed,replied',
];
}
public function prepareForValidation()
{
$this->mergeIfMissing([
'priority' => 'medium', // Default priority to 'medium' if not provided
'status' => 'open', // Default status to 'open' if not provided
]);
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Tickets;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class DeleteTicketRequest extends AdminApiRequest
{
protected $permission = 'tickets.delete';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Tickets;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetTicketRequest extends AdminApiRequest
{
protected $permission = 'tickets.view';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Tickets;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetTicketsRequest extends AdminApiRequest
{
protected $permission = 'tickets.view';
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\Api\Admin\Tickets;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class UpdateTicketRequest extends AdminApiRequest
{
protected $permission = 'tickets.update';
public function rules(): array
{
return [
'subject' => 'required|string|max:255',
'user_id' => 'required|exists:users,id',
'department' => 'nullable|string|in:' . implode(',', config('settings.ticket_departments', [])),
'priority' => 'required|string|in:low,medium,high',
'status' => 'required|string|in:open,closed,replied',
];
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Http\Requests\Api\Admin\Users;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class CreateUserRequest extends AdminApiRequest
{
protected $permission = 'users.create';
public function rules(): array
{
return [
'first_name' => 'nullable|string|max:255',
'last_name' => 'nullable|string|max:255',
'email' => 'required|email|max:255|unique:users,email',
'password' => 'required|string|min:8',
'email_verified_at' => 'nullable|date',
'role_id' => 'nullable|exists:roles,id',
];
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Users;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class DeleteUserRequest extends AdminApiRequest
{
protected $permission = 'users.delete';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Users;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetUserRequest extends AdminApiRequest
{
protected $permission = 'users.view';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests\Api\Admin\Users;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetUsersRequest extends AdminApiRequest
{
protected $permission = 'users.view';
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Http\Requests\Api\Admin\Users;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class UpdateUserRequest extends AdminApiRequest
{
protected $permission = 'users.update';
public function rules(): array
{
return [
'first_name' => 'nullable|string|max:255',
'last_name' => 'nullable|string|max:255',
'email' => 'required|email|max:255|unique:users,email,' . $this->route()->parameter('user')->id,
'password' => 'nullable|string|min:8',
'email_verified_at' => 'nullable|date',
'role_id' => 'nullable|exists:roles,id',
];
}
}