Compare commits

...

9 Commits

39 changed files with 643 additions and 54 deletions

View File

@@ -67,8 +67,7 @@ class ExpertManagementController extends Controller
*/ */
public function show(Expert $expert): JsonResponse public function show(Expert $expert): JsonResponse
{ {
return $this->successResponse( return $this->successResponse($expert->load(['roles','permissions'])
new ExpertManagementResource($expert)
); );
} }

View File

@@ -27,7 +27,7 @@ class UpdateRequest extends FormRequest
public function rules(): array public function rules(): array
{ {
return [ return [
'name' => ['required', 'string', 'max:255', Rule::unique('permission', 'name')->ignore($this->permission->id)], 'name' => ['required', 'string', 'max:255', Rule::unique('permissions', 'name')->ignore($this->permission->id)],
]; ];
} }
} }

View File

@@ -24,8 +24,8 @@ class StoreRequest extends FormRequest
{ {
return [ return [
'name' => 'required|string|unique:roles,name', 'name' => 'required|string|unique:roles,name',
'permissions' => 'required|array', 'permissions' => 'array',
'permissions.*.name' => 'required|string|exists:permissions,name', 'permissions.*' => 'integer|exists:permissions,id',
]; ];
} }
} }

View File

@@ -27,9 +27,9 @@ class UpdateRequest extends FormRequest
public function rules(): array public function rules(): array
{ {
return [ return [
'name' => ['required', 'string', 'max:255', Rule::unique('roles', 'name')->ignore($this->role->id)], 'name' => ['string', 'max:255', Rule::unique('roles', 'name')->ignore($this->role->id)],
'permissions' => 'required|array', 'permissions' => 'array',
'permissions.*.name' => 'required|string|exists:permissions,name', 'permissions.*' => 'integer|exists:permissions,id',
]; ];
} }
} }

View File

@@ -1,41 +0,0 @@
<?php
namespace App\Admin\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
/**
* @method roles()
* @method getAllPermissions()
*/
class ExpertManagementResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'username' => $this->username,
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'national_id' => $this->national_id,
'email' => $this->email,
'phone_number' => $this->phone_number,
'province_name' => $this->province_name,
'city_name' => $this->city_name,
'roles' => $this->roles()
->pluck('name')
->values(),
'permissions' => $this->getAllPermissions()
->pluck('name')
->values(),
];
}
}

View File

@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Database\Factories\BusinessTypeFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class BusinessType extends Model
{
/** @use HasFactory<BusinessTypeFactory> */
use HasFactory;
protected $guarded = ['id'];
}

View File

@@ -5,6 +5,7 @@ namespace App\Models;
use Database\Factories\ExpertFactory; use Database\Factories\ExpertFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Spatie\Permission\Traits\HasRoles;
/** /**
* @method roles() * @method roles()
@@ -14,6 +15,8 @@ class Expert extends Model
{ {
/** @use HasFactory<ExpertFactory> */ /** @use HasFactory<ExpertFactory> */
use HasFactory; use HasFactory;
use HasRoles;
protected $guarded = ['id']; protected $guarded = ['id'];
protected string $guard_name = 'web';
} }

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class FibTransaction extends Model
{
/** @use HasFactory<\Database\Factories\FibTransactionFactory> */
use HasFactory;
}

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class FibTransactionStatus extends Model
{
/** @use HasFactory<\Database\Factories\FibTransactionStatusFactory> */
use HasFactory;
}

View File

@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Database\Factories\PaymentFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Payment extends Model
{
/** @use HasFactory<PaymentFactory> */
use HasFactory;
protected $guarded = ['id'];
}

View File

@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Database\Factories\PaymentStatusFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class PaymentStatus extends Model
{
/** @use HasFactory<PaymentStatusFactory> */
use HasFactory;
protected $guarded = ['id'];
}

View File

@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Database\Factories\TransactionFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Transaction extends Model
{
/** @use HasFactory<TransactionFactory> */
use HasFactory;
protected $guarded = ['id'];
}

View File

@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Database\Factories\UserGatewayFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class UserGateway extends Model
{
/** @use HasFactory<UserGatewayFactory> */
use HasFactory;
protected $guarded = ['id'];
}

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace App\User\Services\FIB; namespace App\Services\FIB;
use Exception; use Exception;
use Illuminate\Http\Client\ConnectionException; use Illuminate\Http\Client\ConnectionException;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace App\User\Services\FIB; namespace App\Services\FIB;
use Exception; use Exception;
use Illuminate\Http\Client\ConnectionException; use Illuminate\Http\Client\ConnectionException;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace App\User\Services\FIB; namespace App\Services\FIB;
use Exception; use Exception;
use Illuminate\Http\Client\ConnectionException; use Illuminate\Http\Client\ConnectionException;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace App\User\Services\FIB; namespace App\Services\FIB;
use Exception; use Exception;
use Illuminate\Http\Client\ConnectionException; use Illuminate\Http\Client\ConnectionException;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace App\User\Services\FIB; namespace App\Services\FIB;
use Exception; use Exception;
use Illuminate\Http\Client\ConnectionException; use Illuminate\Http\Client\ConnectionException;

View File

@@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use App\Models\BusinessType;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<BusinessType>
*/
class BusinessTypeFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use App\Models\FibTransaction;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<FibTransaction>
*/
class FibTransactionFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use App\Models\FibTransactionStatus;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<FibTransactionStatus>
*/
class FibTransactionStatusFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use App\Models\Payment;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<Payment>
*/
class PaymentFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use App\Models\PaymentStatus;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<PaymentStatus>
*/
class PaymentStatusFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use App\Models\Transaction;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<Transaction>
*/
class TransactionFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use App\Models\UserGateway;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<UserGateway>
*/
class UserGatewayFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('payment_statuses', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('payment_statuses');
}
};

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('business_types', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('business_types');
}
};

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('user_gateways', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained('users');
$table->string('username');
$table->string('name');
$table->string('domain');
$table->string('tax_id');
$table->string('bank_name');
$table->string('account_holder');
$table->string('logo')->nullable();
$table->string('iban');
$table->foreignId('business_type_id')->constrained('business_types');
$table->string('business_type_name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('user_gateways');
}
};

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('payments', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained('users');
$table->string('username');
$table->uuid('track_id');
$table->string('amount');
$table->string('currency');
$table->string('callback_url');
$table->dateTime('expires_at');
$table->foreignId('status_id')->constrained('payment_statuses');
$table->string('status_name');
$table->ipAddress('ip');
$table->foreignId('user_gateway_id')->constrained('user_gateways');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('payments');
}
};

View File

@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('transactions', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained('users');
$table->string('amount');
$table->string('currency');
$table->string('callback_url');
$table->string('description');
$table->dateTime('expires_in');
$table->foreignId('payment_id')->constrained('payments');
$table->string('payment_track_id');
$table->foreignId('gateway_id')->constrained('gateways');
$table->integer('status');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('transactions');
}
};

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('fib_transaction_statuses', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('fib_transaction_statuses');
}
};

View File

@@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('fib_transactions', function (Blueprint $table) {
$table->id();
$table->foreignId('transaction_id')->constrained('transactions');
$table->text('qrcode');
$table->string('readable_code');
$table->string('personalAppLink');
$table->string('businessAppLink');
$table->string('corporateAppLink');
$table->string('paymentId');
$table->string('paymentMethod');
$table->timestamp('validUntil');
$table->foreignId('status_id')->constrained('fib_transaction_statuses');
$table->string('status_name');
$table->timestamp('paidAt');
$table->string('paidAmount');
$table->string('paidCurrency');
$table->string('decliningReason');
$table->timestamp('declinedAt');
$table->string('paidByName');
$table->string('paidByIban');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('fib_transactions');
}
};

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class BusinessTypeSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class FibTransactionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class FibTransactionStatusSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class PaymentSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class PaymentStatusSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class TransactionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class UserGatewaySeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}