diff --git a/app/Http/Controllers/Oasis/AdminController.php b/app/Http/Controllers/Oasis/AdminController.php index 484e1b5e..4a6c6ee7 100644 --- a/app/Http/Controllers/Oasis/AdminController.php +++ b/app/Http/Controllers/Oasis/AdminController.php @@ -8,7 +8,10 @@ use App\Models\User; use App\Notifications\Oasis\PaymentRequiredNotification; use App\Services\Oasis\CzechRegisterSearchService; use Hash; +use Illuminate\Contracts\Foundation\Application; +use Illuminate\Contracts\Routing\ResponseFactory; use Illuminate\Http\Request; +use Illuminate\Http\Response; use Illuminate\Support\Str; use Notification; @@ -17,7 +20,7 @@ class AdminController extends Controller /** * Get company details from czech company register * - * @return array|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response + * @return array|Application|ResponseFactory|Response */ public function get_company_details() { @@ -38,7 +41,7 @@ class AdminController extends Controller * Register new client and send email with payment details * * @param Request $request - * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response + * @return Application|ResponseFactory|Response */ public function register_new_client(Request $request) { diff --git a/app/Http/Controllers/Oasis/SubscriptionController.php b/app/Http/Controllers/Oasis/SubscriptionController.php new file mode 100644 index 00000000..1aa6daa6 --- /dev/null +++ b/app/Http/Controllers/Oasis/SubscriptionController.php @@ -0,0 +1,24 @@ + [ + 'id' => $this->id, + 'type' => 'subscription-requests', + 'attributes' => [ + 'requested_plan' => $this->requested_plan, + 'status' => $this->status, + 'created_at_formatted' => format_date($this->created_at, '%d. %B. %Y'), + ], + 'relationships' => [ + 'user' => [ + 'data' => [ + 'id' => $this->user->id, + 'type' => 'users', + 'attributes' => [ + 'name' => $this->user->settings->name, + 'address' => $this->user->settings->address, + 'state' => $this->user->settings->state, + 'city' => $this->user->settings->city, + 'postal_code' => $this->user->settings->postal_code, + 'country' => $this->user->settings->country, + 'phone_number' => $this->user->settings->phone_number, + ] + ] + ], + 'plan' => new PlanResource( + $this->get_plan($this->requested_plan) + ), + ] + ], + ]; + } + + /** + * @param $slug + * @return mixed + */ + private function get_plan($slug) + { + if (Cache::has("plan-$slug")) { + return Cache::get("plan-$slug"); + } + + return Cache::rememberForever("plan-$slug", function () use ($slug) { + return resolve(StripeService::class) + ->getPlan($slug); + }); + } +} diff --git a/app/Models/Oasis/SubscriptionRequest.php b/app/Models/Oasis/SubscriptionRequest.php index 88cfed23..b1ef3f85 100644 --- a/app/Models/Oasis/SubscriptionRequest.php +++ b/app/Models/Oasis/SubscriptionRequest.php @@ -2,6 +2,7 @@ namespace App\Models\Oasis; +use App\Models\User; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; @@ -18,6 +19,11 @@ class SubscriptionRequest extends Model protected $keyType = 'string'; + public function user() + { + return $this->hasOne(User::class, 'id', 'user_id'); + } + protected static function boot() { parent::boot(); diff --git a/routes/oasis.php b/routes/oasis.php index 4abaa974..d5130070 100644 --- a/routes/oasis.php +++ b/routes/oasis.php @@ -1,11 +1,12 @@ 'auth:sanctum', 'prefix' => 'admin'], function () { Route::get('/company-details', [AdminController::class, 'get_company_details']); - - // Users Route::post('/users/create', [AdminController::class, 'register_new_client']); }); + +Route::get('/subscription-request/{order}', [SubscriptionController::class, 'get_subscription_request']); diff --git a/tests/Feature/Oasis/OasisSubscriptionTest.php b/tests/Feature/Oasis/OasisSubscriptionTest.php new file mode 100644 index 00000000..df2c4fd6 --- /dev/null +++ b/tests/Feature/Oasis/OasisSubscriptionTest.php @@ -0,0 +1,34 @@ +create(['role' => 'user']); + + $user + ->subscriptionRequest() + ->create([ + 'requested_plan' => 'virtualni-sanon-basic', + ]); + + $this->getJson("/api/oasis/subscription-request/{$user->subscriptionRequest->id}") + ->assertStatus(200) + ->assertJsonFragment([ + 'id' => $user->subscriptionRequest->id, + 'requested_plan' => 'virtualni-sanon-basic', + ]); + } +}