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,90 @@
<?php
namespace Paymenter\Extensions\Others\Affiliates\Http\Controllers;
use App\Http\Controllers\Api\ApiController;
use Dedoc\Scramble\Attributes\Group;
use Dedoc\Scramble\Attributes\QueryParameter;
use Paymenter\Extensions\Others\Affiliates\Http\Requests\CreateAffiliateRequest;
use Paymenter\Extensions\Others\Affiliates\Http\Requests\DeleteAffiliateRequest;
use Paymenter\Extensions\Others\Affiliates\Http\Requests\GetAffiliateRequest;
use Paymenter\Extensions\Others\Affiliates\Http\Requests\GetAffiliatesRequest;
use Paymenter\Extensions\Others\Affiliates\Http\Requests\UpdateAffiliateRequest;
use Paymenter\Extensions\Others\Affiliates\Http\Resources\AffiliateResource;
use Paymenter\Extensions\Others\Affiliates\Models\Affiliate;
use Spatie\QueryBuilder\QueryBuilder;
#[Group(name: 'Affiliates', weight: 1)]
class AffiliateController extends ApiController
{
protected const INCLUDES = [
'user',
'orders',
];
/**
* List Affiliates
*/
#[QueryParameter('per_page', 'How many items to show per page.', type: 'int', default: 15, example: 20)]
#[QueryParameter('page', 'Which page to show.', type: 'int', example: 2)]
public function index(GetAffiliatesRequest $request)
{
// Fetch affiliates with pagination
$affiliates = QueryBuilder::for(Affiliate::class)
->allowedFilters(['affiliate_id', 'code', 'visitors', 'reward', 'discount'])
->allowedIncludes($this->allowedIncludes(self::INCLUDES))
->allowedSorts(['id', 'code', 'visitors', 'reward', 'discount', 'created_at'])
->simplePaginate(request('per_page', 15));
// Return the affiliates as a JSON response
return AffiliateResource::collection($affiliates);
}
/**
* Create a new affiliate
*/
public function store(CreateAffiliateRequest $request)
{
// Validate and create the affiliate
$affiliate = Affiliate::create($request->validated());
// Return the created affiliate as a JSON response
return new AffiliateResource($affiliate);
}
/**
* Show a specific affiliate
*/
public function show(GetAffiliateRequest $request, Affiliate $affiliate)
{
$affiliate = QueryBuilder::for(Affiliate::class)
->allowedIncludes($this->allowedIncludes(self::INCLUDES))
->findOrFail($affiliate->id);
// Return the affiliate as a JSON response
return new AffiliateResource($affiliate);
}
/**
* Update a specific affiliate
*/
public function update(UpdateAffiliateRequest $request, Affiliate $affiliate)
{
// Validate and update the affiliate
$affiliate->update($request->validated());
// Return the updated affiliate as a JSON response
return new AffiliateResource($affiliate);
}
/**
* Delete a specific affiliate
*/
public function destroy(DeleteAffiliateRequest $request, Affiliate $affiliate)
{
// Delete the affiliate
$affiliate->delete();
return $this->returnNoContent();
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace Paymenter\Extensions\Others\Affiliates\Http\Requests;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class CreateAffiliateRequest extends AdminApiRequest
{
protected $permission = 'affiliates.create';
public function rules(): array
{
return [
'user_id' => 'required|exists:users,id',
'code' => 'required|string|max:255|unique:affiliates,code',
'enabled' => 'nullable|boolean',
'reward' => 'nullable|numeric|min:0|max:100',
];
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace Paymenter\Extensions\Others\Affiliates\Http\Requests;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class DeleteAffiliateRequest extends AdminApiRequest
{
protected $permission = 'affiliates.delete';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace Paymenter\Extensions\Others\Affiliates\Http\Requests;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetAffiliateRequest extends AdminApiRequest
{
protected $permission = 'affiliates.view';
}

View File

@@ -0,0 +1,10 @@
<?php
namespace Paymenter\Extensions\Others\Affiliates\Http\Requests;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class GetAffiliatesRequest extends AdminApiRequest
{
protected $permission = 'affiliates.view';
}

View File

@@ -0,0 +1,20 @@
<?php
namespace Paymenter\Extensions\Others\Affiliates\Http\Requests;
use App\Http\Requests\Api\Admin\AdminApiRequest;
class UpdateAffiliateRequest extends AdminApiRequest
{
protected $permission = 'affiliates.update';
public function rules(): array
{
return [
'user_id' => 'nullable|exists:users,id',
'code' => 'nullable|string|max:255|unique:affiliates,code,' . $this->route()->parameter('affiliate')->id,
'enabled' => 'nullable|boolean',
'reward' => 'nullable|numeric|min:0|max:100',
];
}
}

View File

@@ -0,0 +1,14 @@
<?php
namespace Paymenter\Extensions\Others\Affiliates\Http\Resources;
use TiMacDonald\JsonApi\JsonApiResource;
/** @mixin \App\Models\AffiliateOrder */
class AffiliateOrderResource extends JsonApiResource
{
public $attributes = [
'id',
'order_id',
];
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Paymenter\Extensions\Others\Affiliates\Http\Resources;
use App\Http\Resources\UserResource;
use TiMacDonald\JsonApi\JsonApiResource;
/** @mixin \App\Models\Affiliate */
class AffiliateResource extends JsonApiResource
{
public $attributes = [
'id',
'code',
'enabled',
'visitors',
'reward',
'discount',
'earnings',
'updated_at',
'created_at',
];
public $relationships = [
'user' => UserResource::class,
'orders' => AffiliateOrderResource::class,
];
}