- admin client order

This commit is contained in:
Peter Papp
2021-03-22 10:43:37 +01:00
parent 80b24cd753
commit 3c01ce5ad3
10 changed files with 1022 additions and 252 deletions

View File

@@ -3,8 +3,14 @@
namespace App\Http\Controllers\Oasis;
use App\Http\Controllers\Controller;
use App\Services\CzechRegisterSearchService;
use App\Http\Resources\UserResource;
use App\Models\User;
use App\Notifications\Oasis\PaymentRequiredNotification;
use App\Services\Oasis\CzechRegisterSearchService;
use Hash;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Notification;
class AdminController extends Controller
{
@@ -27,4 +33,33 @@ class AdminController extends Controller
return response($result[0], 200);
}
public function register_new_client(Request $request)
{
$newbie = User::create([
'email' => $request->email,
'password' => Hash::make(Str::random()),
]);
$newbie
->settings()
->create([
'ico' => $request->ico,
'name' => $request->name,
'address' => $request->address,
'state' => $request->state,
'city' => $request->city,
'postal_code' => $request->postal_code,
'country' => $request->country,
'phone_number' => $request->phone_number,
'timezone' => '1.0',
'requested_plan' => $request->plan,
]);
$newbie->notify(new PaymentRequiredNotification());
return response(
new UserResource($newbie), 201
);
}
}

View File

@@ -34,6 +34,7 @@ class User extends Authenticatable
];
protected $casts = [
'id' => 'string',
'email_verified_at' => 'datetime',
];

View File

@@ -0,0 +1,61 @@
<?php
namespace App\Notifications\Oasis;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class PaymentRequiredNotification extends Notification
{
use Queueable;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->line('The introduction to the notification.')
->action('Notification Action', url('/'))
->line('Thank you for using our application!');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}

View File

@@ -29,5 +29,21 @@ class AppServiceProvider extends ServiceProvider
// Set locale for carbon dates
setlocale(LC_TIME, $get_time_locale);
// Get all migrations with all directories
$this->loadMigrationsFrom(
$this->get_migration_paths()
);
}
/**
* @return array
*/
private function get_migration_paths(): array
{
$mainPath = database_path('migrations');
$directories = glob($mainPath . '/*', GLOB_ONLYDIR);
return array_merge([$mainPath], $directories);
}
}

View File

@@ -23,7 +23,7 @@
* echo ''.print_r($out, 1).'';
*/
namespace App\Services;
namespace App\Services\Oasis;
class CzechRegisterSearchService
{

View File

@@ -21,9 +21,9 @@
"kyslik/column-sortable": "^6.4",
"laravel/cashier": "^12.9.1",
"laravel/fortify": "^1.7.7",
"laravel/framework": "^8.26.1",
"laravel/framework": "^8.30.1",
"laravel/sanctum": "^2.9",
"laravel/tinker": "^2.0",
"laravel/tinker": "^2.6.1",
"laravel/ui": "^3.0",
"league/flysystem-aws-s3-v3": "^1.0",
"league/flysystem-cached-adapter": "^1.0",

1058
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddItemsToUserSettingsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('user_settings', function (Blueprint $table) {
$table->boolean('payment_activation')->after('storage_capacity')->default(0);
$table->string('ico')->after('phone_number')->nullable();
$table->string('requested_plan')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('user_settings', function (Blueprint $table) {
$table->dropColumn('ico');
});
}
}

View File

@@ -2,7 +2,10 @@
use App\Http\Controllers\Oasis\AdminController;
Route::group(['prefix' => 'admin'], function () {
Route::group(['middleware' => 'auth:sanctum', 'prefix' => 'admin'], function () {
Route::get('/company-details', [AdminController::class, 'get_company_details']);
// Users
Route::post('/users/create', [AdminController::class, 'register_new_client']);
});

View File

@@ -2,8 +2,12 @@
namespace Tests\Feature\Oasis;
use App\Models\User;
use App\Notifications\Oasis\PaymentRequiredNotification;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Support\Facades\Http;
use Laravel\Sanctum\Sanctum;
use Notification;
use Tests\TestCase;
class OasisAdminTest extends TestCase
@@ -15,6 +19,11 @@ class OasisAdminTest extends TestCase
*/
public function it_get_register_by_ico()
{
$admin = User::factory(User::class)
->create();
Sanctum::actingAs($admin);
$response = [
"name" => "GDPR Cloud Solution, s.r.o.",
"ico" => "08995281",
@@ -39,6 +48,11 @@ class OasisAdminTest extends TestCase
*/
public function it_try_to_get_register_by_ico_with_not_found_result()
{
$admin = User::factory(User::class)
->create();
Sanctum::actingAs($admin);
Http::fake([
'https://or.justice.cz/ias/ui/rejstrik-0899528199' => Http::response([], 200),
]);
@@ -46,4 +60,45 @@ class OasisAdminTest extends TestCase
$this->getJson('/api/oasis/admin/company-details?ico=0899528199')
->assertNotFound();
}
/**
* @test
*/
public function it_register_new_client_from_admin_panel()
{
Notification::fake();
$admin = User::factory(User::class)
->create(['role' => 'admin']);
Sanctum::actingAs($admin);
$this->postJson('/api/oasis/admin/users/create', [
'ico' => '08995281',
'name' => 'GDPR Cloud Solution, s.r.o.',
'email' => 'john@doe.com',
'phone_number' => '+420950123456',
'address' => 'Zbraslavská 12/11',
'state' => 'CZ',
'city' => 'Praha',
'postal_code' => '15900',
'country' => 'CZ',
'plan' => 'virtualni-sanon-basic',
])->assertStatus(201);
$this->assertDatabaseHas('users', [
'email' => 'john@doe.com',
]);
$this->assertDatabaseHas('user_settings', [
'ico' => '08995281',
'payment_activation' => 0,
'requested_plan' => 'virtualni-sanon-basic',
]);
$newbie = User::whereEmail('john@doe.com')
->first();
Notification::assertSentTo($newbie, PaymentRequiredNotification::class);
}
}