mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-28 19:10:40 +00:00
controller refactoring part 11
This commit is contained in:
@@ -61,10 +61,10 @@
|
|||||||
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=fd25990d1ccec0294602",
|
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=fd25990d1ccec0294602",
|
||||||
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=b35e751cdc1946a4fb60",
|
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=b35e751cdc1946a4fb60",
|
||||||
"/chunks/settings.js": "/chunks/settings.js?id=7070921d97a2510445ac",
|
"/chunks/settings.js": "/chunks/settings.js?id=7070921d97a2510445ac",
|
||||||
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=0e818baec7f92c7fa542",
|
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=1e6beb962430641f4671",
|
||||||
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=eab2781e9935230c6971",
|
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=148da32ea779f084f4bd",
|
||||||
"/chunks/settings-password.js": "/chunks/settings-password.js?id=9258c6edb9815296b976",
|
"/chunks/settings-password.js": "/chunks/settings-password.js?id=9258c6edb9815296b976",
|
||||||
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=fc84aad90497e1ae99f9",
|
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=323729734ffc814a48d2",
|
||||||
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=682f4f690ac252a78a3a",
|
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=682f4f690ac252a78a3a",
|
||||||
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=4f1793d53633a2c4cc18",
|
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=4f1793d53633a2c4cc18",
|
||||||
"/chunks/settings~chunks/settings-password.js": "/chunks/settings~chunks/settings-password.js?id=f5aaffe3aa073cb2ee19",
|
"/chunks/settings~chunks/settings-password.js": "/chunks/settings~chunks/settings-password.js?id=f5aaffe3aa073cb2ee19",
|
||||||
@@ -73,12 +73,12 @@
|
|||||||
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=bfdf9bb904d354bdcbd1",
|
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=bfdf9bb904d354bdcbd1",
|
||||||
"/chunks/shared/file-browser.js": "/chunks/shared/file-browser.js?id=0f6c34512740fca7e007",
|
"/chunks/shared/file-browser.js": "/chunks/shared/file-browser.js?id=0f6c34512740fca7e007",
|
||||||
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=7886247bb35deada28a2",
|
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=7886247bb35deada28a2",
|
||||||
"/chunks/sign-in.js": "/chunks/sign-in.js?id=799cae3044c4c56debf8",
|
"/chunks/sign-in.js": "/chunks/sign-in.js?id=0709543b76769c50a873",
|
||||||
"/chunks/sign-up.js": "/chunks/sign-up.js?id=b30b10ca09b115efc6ca",
|
"/chunks/sign-up.js": "/chunks/sign-up.js?id=b30b10ca09b115efc6ca",
|
||||||
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=3beb031ba99961e8c51c",
|
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=3beb031ba99961e8c51c",
|
||||||
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=4ae406cdb5805d9c4a45",
|
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=4ae406cdb5805d9c4a45",
|
||||||
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=a09dc140a3914fb64a1a",
|
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=a09dc140a3914fb64a1a",
|
||||||
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=2ae7d7c13fee27b4edff",
|
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=10416cb784a62f3c8fd7",
|
||||||
"/chunks/upgrade-billing~chunks/upgrade-plan.js": "/chunks/upgrade-billing~chunks/upgrade-plan.js?id=43888143d0a6afe67d7a",
|
"/chunks/upgrade-billing~chunks/upgrade-plan.js": "/chunks/upgrade-billing~chunks/upgrade-plan.js?id=43888143d0a6afe67d7a",
|
||||||
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=5979a154f760a992e617",
|
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=5979a154f760a992e617",
|
||||||
"/chunks/user.js": "/chunks/user.js?id=41076be9126702330159",
|
"/chunks/user.js": "/chunks/user.js?id=41076be9126702330159",
|
||||||
@@ -279,5 +279,10 @@
|
|||||||
"/chunks/settings-payment-methods.8681aa04995d55912730.hot-update.js": "/chunks/settings-payment-methods.8681aa04995d55912730.hot-update.js",
|
"/chunks/settings-payment-methods.8681aa04995d55912730.hot-update.js": "/chunks/settings-payment-methods.8681aa04995d55912730.hot-update.js",
|
||||||
"/chunks/upgrade-billing.8681aa04995d55912730.hot-update.js": "/chunks/upgrade-billing.8681aa04995d55912730.hot-update.js",
|
"/chunks/upgrade-billing.8681aa04995d55912730.hot-update.js": "/chunks/upgrade-billing.8681aa04995d55912730.hot-update.js",
|
||||||
"/chunks/settings.38169fdae69094598f31.hot-update.js": "/chunks/settings.38169fdae69094598f31.hot-update.js",
|
"/chunks/settings.38169fdae69094598f31.hot-update.js": "/chunks/settings.38169fdae69094598f31.hot-update.js",
|
||||||
"/chunks/settings-password.38169fdae69094598f31.hot-update.js": "/chunks/settings-password.38169fdae69094598f31.hot-update.js"
|
"/chunks/settings-password.38169fdae69094598f31.hot-update.js": "/chunks/settings-password.38169fdae69094598f31.hot-update.js",
|
||||||
|
"/chunks/sign-in.5fd48bc3e49b7cb7e5e7.hot-update.js": "/chunks/sign-in.5fd48bc3e49b7cb7e5e7.hot-update.js",
|
||||||
|
"/chunks/settings-create-payment-methods.3c553438a1090569af54.hot-update.js": "/chunks/settings-create-payment-methods.3c553438a1090569af54.hot-update.js",
|
||||||
|
"/chunks/settings-payment-methods.3c553438a1090569af54.hot-update.js": "/chunks/settings-payment-methods.3c553438a1090569af54.hot-update.js",
|
||||||
|
"/chunks/upgrade-billing.3c553438a1090569af54.hot-update.js": "/chunks/upgrade-billing.3c553438a1090569af54.hot-update.js",
|
||||||
|
"/chunks/settings-invoices.4ab4d27b8447516929d2.hot-update.js": "/chunks/settings-invoices.4ab4d27b8447516929d2.hot-update.js"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -202,7 +202,7 @@
|
|||||||
},
|
},
|
||||||
resendEmail() {
|
resendEmail() {
|
||||||
axios.
|
axios.
|
||||||
post('/api/user/email/resend/verify', {
|
post('/api/user/email/verify/resend', {
|
||||||
email: this.loginEmail
|
email: this.loginEmail
|
||||||
})
|
})
|
||||||
.then(
|
.then(
|
||||||
|
|||||||
@@ -490,7 +490,7 @@
|
|||||||
this.$isSomethingWrong()
|
this.$isSomethingWrong()
|
||||||
})
|
})
|
||||||
|
|
||||||
axios.get('/api/user/payment-cards')
|
axios.get('/api/user/subscription/payment-cards')
|
||||||
.then(response => {
|
.then(response => {
|
||||||
|
|
||||||
this.defaultPaymentMethod = response.data.default
|
this.defaultPaymentMethod = response.data.default
|
||||||
|
|||||||
@@ -104,7 +104,7 @@
|
|||||||
if (setupIntent) {
|
if (setupIntent) {
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.post('/api/user/payment-cards', {
|
.post('/api/user/subscription/payment-cards', {
|
||||||
token: setupIntent.payment_method,
|
token: setupIntent.payment_method,
|
||||||
default: this.defaultPaymentMethod,
|
default: this.defaultPaymentMethod,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<PageTab :is-loading="isLoading">
|
<PageTab :is-loading="isLoading">
|
||||||
<PageTabGroup v-show="! isLoading">
|
<PageTabGroup v-show="! isLoading">
|
||||||
<FormLabel>{{ $t('user_invoices.title') }}</FormLabel>
|
<FormLabel>{{ $t('user_invoices.title') }}</FormLabel>
|
||||||
<DatatableWrapper @init="isLoading = false" api="/api/user/invoices" :paginator="false" :columns="columns" class="table">
|
<DatatableWrapper @init="isLoading = false" api="/api/user/subscription/invoices" :paginator="false" :columns="columns" class="table">
|
||||||
|
|
||||||
<!--Table data content-->
|
<!--Table data content-->
|
||||||
<template slot-scope="{ row }">
|
<template slot-scope="{ row }">
|
||||||
|
|||||||
@@ -151,7 +151,7 @@
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
fetchPaymentMethods() {
|
fetchPaymentMethods() {
|
||||||
axios.get('/api/user/payment-cards')
|
axios.get('/api/user/subscription/payment-cards')
|
||||||
.then(response => {
|
.then(response => {
|
||||||
|
|
||||||
if (response.status == 204) {
|
if (response.status == 204) {
|
||||||
@@ -182,7 +182,7 @@
|
|||||||
|
|
||||||
this.deletingID = data.id
|
this.deletingID = data.id
|
||||||
|
|
||||||
axios.post('/api/user/payment-cards/' + data.id, {
|
axios.post('/api/user/subscription/payment-cards/' + data.id, {
|
||||||
_method: 'delete'
|
_method: 'delete'
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
@@ -206,7 +206,7 @@
|
|||||||
|
|
||||||
if (data.operation === 'set-as-default-credit-card') {
|
if (data.operation === 'set-as-default-credit-card') {
|
||||||
|
|
||||||
axios.post('/api/user/payment-cards/' + data.id, {
|
axios.post('/api/user/subscription/payment-cards/' + data.id, {
|
||||||
default: 1,
|
default: 1,
|
||||||
_method: 'patch'
|
_method: 'patch'
|
||||||
})
|
})
|
||||||
|
|||||||
+26
-16
@@ -1,39 +1,49 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Users\Controllers\AccessTokenController;
|
use App\Users\Controllers\Account\AccountDetailsController;
|
||||||
|
use App\Users\Controllers\Account\StorageCapacityController;
|
||||||
|
use App\Users\Controllers\Account\UpdatePasswordController;
|
||||||
|
use App\Users\Controllers\Account\UpdateProfileSettingsController;
|
||||||
use App\Users\Controllers\AuthController;
|
use App\Users\Controllers\AuthController;
|
||||||
use App\Users\Controllers\AccountController;
|
use App\Users\Controllers\Authentication\AccountAccessTokenController;
|
||||||
|
use App\Users\Controllers\Authentication\CheckAccountController;
|
||||||
|
use App\Users\Controllers\Verification\ResendVerificationEmail;
|
||||||
|
use App\Users\Controllers\Verification\VerifyEmailController;
|
||||||
|
use Domain\Invoices\Controllers\UserInvoicesController;
|
||||||
use Domain\Payments\Controllers\PaymentMethodsController;
|
use Domain\Payments\Controllers\PaymentMethodsController;
|
||||||
use Domain\Subscriptions\Controllers\GetSetupIntentController;
|
use Domain\Subscriptions\Controllers\GetSetupIntentController;
|
||||||
use Domain\Subscriptions\Controllers\SubscriptionCancelController;
|
use Domain\Subscriptions\Controllers\SubscriptionCancelController;
|
||||||
use Domain\Subscriptions\Controllers\SubscriptionController;
|
use Domain\Subscriptions\Controllers\SubscriptionDetailsController;
|
||||||
use Domain\Subscriptions\Controllers\SubscriptionResumeController;
|
use Domain\Subscriptions\Controllers\SubscriptionResumeController;
|
||||||
use Domain\Subscriptions\Controllers\SubscriptionUpgradeController;
|
use Domain\Subscriptions\Controllers\SubscriptionUpgradeController;
|
||||||
|
|
||||||
Route::post('/check', [AuthController::class, 'check_account']);
|
Route::post('/check', CheckAccountController::class);
|
||||||
|
|
||||||
// Email verification
|
// Email verification
|
||||||
Route::get('/email/verify/{id}', [AccountController::class, 'email_verification'])->name('verification.verify');
|
Route::get('/email/verify/{id}', VerifyEmailController::class)
|
||||||
Route::post('/email/resend/verify', [AccountController::class, 'resend_verification_email'])->name('verification.send');
|
->name('verification.verify');
|
||||||
|
|
||||||
|
Route::post('/email/verify/resend', ResendVerificationEmail::class)
|
||||||
|
->name('verification.send');
|
||||||
|
|
||||||
Route::group(['middleware' => ['auth:sanctum']], function () {
|
Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||||
// Account
|
// Account
|
||||||
Route::patch('/relationships/settings', [AccountController::class, 'update_user_settings']);
|
Route::patch('/relationships/settings', UpdateProfileSettingsController::class);
|
||||||
Route::post('/password', [AccountController::class, 'change_password']);
|
Route::post('/password', UpdatePasswordController::class);
|
||||||
Route::get('/subscription', [SubscriptionController::class, 'show']);
|
Route::get('/storage', StorageCapacityController::class);
|
||||||
Route::get('/invoices', [AccountController::class, 'invoices']);
|
Route::get('/', AccountDetailsController::class);
|
||||||
Route::get('/storage', [AccountController::class, 'storage']);
|
|
||||||
Route::get('/', [AccountController::class, 'user']);
|
|
||||||
|
|
||||||
// User Access Token
|
// User Access Token
|
||||||
Route::apiResource('/tokens', AccessTokenController::class);
|
Route::apiResource('/tokens', AccountAccessTokenController::class);
|
||||||
|
|
||||||
// Payment cards
|
|
||||||
Route::apiResource('/payment-cards', PaymentMethodsController::class);
|
|
||||||
|
|
||||||
// Subscription
|
// Subscription
|
||||||
Route::group(['prefix' => 'subscription'], function () {
|
Route::group(['prefix' => 'subscription'], function () {
|
||||||
Route::get('/setup-intent', GetSetupIntentController::class);
|
Route::get('/setup-intent', GetSetupIntentController::class);
|
||||||
|
|
||||||
|
Route::apiResource('/payment-cards', PaymentMethodsController::class);
|
||||||
|
Route::get('/invoices', UserInvoicesController::class);
|
||||||
|
Route::get('/', SubscriptionDetailsController::class);
|
||||||
|
|
||||||
Route::post('/upgrade', SubscriptionUpgradeController::class);
|
Route::post('/upgrade', SubscriptionUpgradeController::class);
|
||||||
Route::post('/cancel', SubscriptionCancelController::class);
|
Route::post('/cancel', SubscriptionCancelController::class);
|
||||||
Route::post('/resume', SubscriptionResumeController::class);
|
Route::post('/resume', SubscriptionResumeController::class);
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\Users\Controllers\Account;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use App\Users\Resources\UserResource;
|
||||||
|
|
||||||
|
class AccountDetailsController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get all user data for frontend
|
||||||
|
*/
|
||||||
|
public function __invoke(): UserResource
|
||||||
|
{
|
||||||
|
return new UserResource(
|
||||||
|
Auth::user()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Users\Controllers\Account;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Users\Resources\UserStorageResource;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
|
class StorageCapacityController
|
||||||
|
{
|
||||||
|
public function __invoke(): UserStorageResource
|
||||||
|
{
|
||||||
|
return new UserStorageResource(
|
||||||
|
Auth::user()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Users\Controllers\Account;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Users\Requests\UpdateUserPasswordRequest;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
|
class UpdatePasswordController extends Controller
|
||||||
|
{
|
||||||
|
public function __invoke(
|
||||||
|
UpdateUserPasswordRequest $request
|
||||||
|
): Response{
|
||||||
|
$user = Auth::user();
|
||||||
|
|
||||||
|
// Check if is demo
|
||||||
|
abort_if(is_demo_account($user->email), 204, 'Changed!');
|
||||||
|
|
||||||
|
// Store new password
|
||||||
|
$user->update([
|
||||||
|
'password' => bcrypt($request->input('password')),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return response('Changed!', 204);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Users\Controllers\Account;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class UpdateProfileSettingsController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Update user settings
|
||||||
|
*/
|
||||||
|
public function __invoke(Request $request): Response
|
||||||
|
{
|
||||||
|
// Validate request
|
||||||
|
// TODO: pridat validator do requestu
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'avatar' => 'sometimes|file',
|
||||||
|
'name' => 'string',
|
||||||
|
'value' => 'string',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Return error
|
||||||
|
if ($validator->fails()) {
|
||||||
|
abort(400, 'Bad input');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get user
|
||||||
|
$user = Auth::user();
|
||||||
|
|
||||||
|
// Check if is demo
|
||||||
|
abort_if(is_demo_account($user->email), 204, 'Done.');
|
||||||
|
|
||||||
|
// Update avatar
|
||||||
|
if ($request->hasFile('avatar')) {
|
||||||
|
$user
|
||||||
|
->settings()
|
||||||
|
->update([
|
||||||
|
'avatar' => store_avatar($request, 'avatar'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return response('Saved!', 204);
|
||||||
|
}
|
||||||
|
|
||||||
|
$user
|
||||||
|
->settings()
|
||||||
|
->update(
|
||||||
|
make_single_input($request)
|
||||||
|
);
|
||||||
|
|
||||||
|
return response('Saved!', 204);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace App\Users\Controllers;
|
|
||||||
|
|
||||||
use App\Users\Models\User;
|
|
||||||
use Illuminate\Support\Str;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Http\Response;
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
use App\Users\Resources\UserResource;
|
|
||||||
use Illuminate\Http\RedirectResponse;
|
|
||||||
use Support\Demo\Actions\DemoService;
|
|
||||||
use Laravel\Sanctum\PersonalAccessToken;
|
|
||||||
use Illuminate\Support\Facades\Validator;
|
|
||||||
use App\Users\Resources\UserStorageResource;
|
|
||||||
use Domain\Invoices\Resources\InvoiceCollection;
|
|
||||||
use App\Users\Requests\UpdateUserPasswordRequest;
|
|
||||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
|
||||||
use App\Users\Requests\UserCreateAccessTokenRequest;
|
|
||||||
|
|
||||||
class AccountController extends Controller
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
public DemoService $demo,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all user data to frontend
|
|
||||||
*
|
|
||||||
* @return UserResource
|
|
||||||
*/
|
|
||||||
public function user()
|
|
||||||
{
|
|
||||||
return new UserResource(
|
|
||||||
Auth::user()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get storage details
|
|
||||||
*
|
|
||||||
* @return UserStorageResource
|
|
||||||
*/
|
|
||||||
public function storage()
|
|
||||||
{
|
|
||||||
return new UserStorageResource(
|
|
||||||
Auth::user()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get user invoices
|
|
||||||
*
|
|
||||||
* @return InvoiceCollection
|
|
||||||
*/
|
|
||||||
public function invoices()
|
|
||||||
{
|
|
||||||
return new InvoiceCollection(
|
|
||||||
Auth::user()->invoices()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update user settings relationship
|
|
||||||
*
|
|
||||||
* @param Request $request
|
|
||||||
* @return ResponseFactory|\Illuminate\Http\Response
|
|
||||||
*/
|
|
||||||
public function update_user_settings(Request $request)
|
|
||||||
{
|
|
||||||
// Validate request
|
|
||||||
// TODO: pridat validator do requestu
|
|
||||||
$validator = Validator::make($request->all(), [
|
|
||||||
'avatar' => 'sometimes|file',
|
|
||||||
'name' => 'string',
|
|
||||||
'value' => 'string',
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Return error
|
|
||||||
if ($validator->fails()) {
|
|
||||||
abort(400, 'Bad input');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get user
|
|
||||||
$user = Auth::user();
|
|
||||||
|
|
||||||
// Check if is demo
|
|
||||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
|
||||||
|
|
||||||
// Update avatar
|
|
||||||
if ($request->hasFile('avatar')) {
|
|
||||||
$user
|
|
||||||
->settings()
|
|
||||||
->update([
|
|
||||||
'avatar' => store_avatar($request, 'avatar'),
|
|
||||||
]);
|
|
||||||
|
|
||||||
return response('Saved!', 204);
|
|
||||||
}
|
|
||||||
|
|
||||||
$user
|
|
||||||
->settings()
|
|
||||||
->update(
|
|
||||||
make_single_input($request)
|
|
||||||
);
|
|
||||||
|
|
||||||
return response('Saved!', 204);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Change user password
|
|
||||||
*
|
|
||||||
* @param Request $request
|
|
||||||
* @return ResponseFactory|\Illuminate\Http\Response
|
|
||||||
*/
|
|
||||||
public function change_password(UpdateUserPasswordRequest $request)
|
|
||||||
{
|
|
||||||
// Get user
|
|
||||||
$user = Auth::user();
|
|
||||||
|
|
||||||
// Check if is demo
|
|
||||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
|
||||||
|
|
||||||
// Change and store new password
|
|
||||||
$user->password = bcrypt($request->input('password'));
|
|
||||||
$user->save();
|
|
||||||
|
|
||||||
return response('Changed!', 204);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function email_verification(string $id, Request $request): RedirectResponse | Response
|
|
||||||
{
|
|
||||||
if (! $request->hasValidSignature()) {
|
|
||||||
return response('Invalid or expired url provided.', 401);
|
|
||||||
}
|
|
||||||
|
|
||||||
$user = User::find($id);
|
|
||||||
|
|
||||||
if (! $user->hasVerifiedEmail()) {
|
|
||||||
$user->markEmailAsVerified();
|
|
||||||
}
|
|
||||||
|
|
||||||
return redirect()->to('/successfully-verified');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function resend_verification_email(Request $request): Response
|
|
||||||
{
|
|
||||||
$user = User::whereEmail($request->input('email'))->first();
|
|
||||||
|
|
||||||
if ($user->hasVerifiedEmail()) {
|
|
||||||
return response('Email was already verified.', 204);
|
|
||||||
}
|
|
||||||
|
|
||||||
$user->sendEmailVerificationNotification();
|
|
||||||
|
|
||||||
return response('Email verification link sent to your email', 204);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
namespace App\Users\Controllers;
|
namespace App\Users\Controllers\Authentication;
|
||||||
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
@@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Auth;
|
|||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Laravel\Sanctum\PersonalAccessToken;
|
use Laravel\Sanctum\PersonalAccessToken;
|
||||||
|
|
||||||
class AccessTokenController extends Controller
|
class AccountAccessTokenController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Get all user tokens
|
* Get all user tokens
|
||||||
+8
-9
@@ -1,22 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Users\Controllers;
|
namespace App\Users\Controllers\Authentication;
|
||||||
|
|
||||||
use App\Users\Models\User;
|
use App\Users\Models\User;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Users\Requests\CheckAccountRequest;
|
use App\Users\Requests\CheckAccountRequest;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
|
||||||
class AuthController extends Controller
|
class CheckAccountController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Check if user account exist
|
* Check if user account exist
|
||||||
*
|
|
||||||
* @param CheckAccountRequest $request
|
|
||||||
* @return mixed
|
|
||||||
*/
|
*/
|
||||||
public function check_account(CheckAccountRequest $request)
|
public function __invoke(
|
||||||
{
|
CheckAccountRequest $request
|
||||||
// Get User
|
): array|Response {
|
||||||
$user = User::whereEmail($request->email)
|
|
||||||
|
$user = User::whereEmail($request->input('email'))
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
if (! $user) {
|
if (! $user) {
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Users\Controllers\Verification;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Users\Models\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
|
||||||
|
class ResendVerificationEmail extends Controller
|
||||||
|
{
|
||||||
|
public function __invoke(
|
||||||
|
Request $request
|
||||||
|
): Response {
|
||||||
|
|
||||||
|
$user = User::where('email', $request->input('email'))
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if ($user->hasVerifiedEmail()) {
|
||||||
|
return response('Email was already verified.', 204);
|
||||||
|
}
|
||||||
|
|
||||||
|
$user->sendEmailVerificationNotification();
|
||||||
|
|
||||||
|
return response('Email verification link sent to your email', 204);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Users\Controllers\Verification;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Users\Models\User;
|
||||||
|
use Illuminate\Http\RedirectResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
|
||||||
|
class VerifyEmailController extends Controller
|
||||||
|
{
|
||||||
|
public function __invoke(
|
||||||
|
string $id,
|
||||||
|
Request $request,
|
||||||
|
): RedirectResponse|Response {
|
||||||
|
|
||||||
|
if (! $request->hasValidSignature()) {
|
||||||
|
return response('Invalid or expired url provided.', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = User::find($id);
|
||||||
|
|
||||||
|
if (! $user->hasVerifiedEmail()) {
|
||||||
|
$user->markEmailAsVerified();
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect()->to('/successfully-verified');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace Domain\Invoices\Controllers;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Domain\Invoices\Resources\InvoiceCollection;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
|
class UserInvoicesController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get user invoices
|
||||||
|
*/
|
||||||
|
public function __invoke(): InvoiceCollection
|
||||||
|
{
|
||||||
|
return new InvoiceCollection(
|
||||||
|
Auth::user()->invoices()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Domain\Subscriptions\Controllers;
|
|
||||||
|
|
||||||
use Auth;
|
|
||||||
use Stripe\SetupIntent;
|
|
||||||
use App\Users\Models\User;
|
|
||||||
use Illuminate\Http\Response;
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use Illuminate\Support\Facades\Cache;
|
|
||||||
use Support\Demo\Actions\DemoService;
|
|
||||||
use App\Users\Resources\UserSubscription;
|
|
||||||
use Domain\Subscriptions\Services\StripeService;
|
|
||||||
use Illuminate\Contracts\Foundation\Application;
|
|
||||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
|
||||||
use Domain\Subscriptions\Requests\StoreUpgradeAccountRequest;
|
|
||||||
|
|
||||||
class SubscriptionController extends Controller
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private StripeService $stripe,
|
|
||||||
private DemoService $demo,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get user subscription detail
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function show()
|
|
||||||
{
|
|
||||||
$user = User::find(Auth::id());
|
|
||||||
|
|
||||||
if (! $user->subscription('main')) {
|
|
||||||
return abort(204, 'User don\'t have any subscription');
|
|
||||||
}
|
|
||||||
|
|
||||||
$slug = 'subscription-user-' . $user->id;
|
|
||||||
|
|
||||||
if (Cache::has($slug)) {
|
|
||||||
return Cache::get($slug);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Cache::rememberForever($slug, function () use ($user) {
|
|
||||||
return new UserSubscription(
|
|
||||||
$user
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace Domain\Subscriptions\Controllers;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Users\Resources\UserSubscription;
|
||||||
|
use Auth;
|
||||||
|
|
||||||
|
class SubscriptionDetailsController extends Controller
|
||||||
|
{
|
||||||
|
public function __invoke(): mixed
|
||||||
|
{
|
||||||
|
$user = Auth::user();
|
||||||
|
|
||||||
|
if (!$user->subscription('main')) {
|
||||||
|
return abort(204, "User don't have any subscription");
|
||||||
|
}
|
||||||
|
|
||||||
|
$slug = "subscription-user-{$user->id}";
|
||||||
|
|
||||||
|
if (cache()->has($slug)) {
|
||||||
|
return cache()->get($slug);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cache()->rememberForever(
|
||||||
|
$slug, fn() => new UserSubscription($user)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -199,7 +199,7 @@ class UserAccountTest extends TestCase
|
|||||||
'email_verified_at' => null,
|
'email_verified_at' => null,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->postJson('/api/user/email/resend/verify', [
|
$this->postJson('/api/user/email/verify/resend', [
|
||||||
'email' => $user->email,
|
'email' => $user->email,
|
||||||
])
|
])
|
||||||
->assertStatus(204);
|
->assertStatus(204);
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class UserInvoicesTest extends TestCase
|
|||||||
],
|
],
|
||||||
])->assertStatus(204);
|
])->assertStatus(204);
|
||||||
|
|
||||||
$this->getJson('/api/user/invoices')
|
$this->getJson('/api/user/subscription/invoices')
|
||||||
->assertStatus(200)
|
->assertStatus(200)
|
||||||
->assertJsonFragment([
|
->assertJsonFragment([
|
||||||
'customer' => $this->user['stripe_id'],
|
'customer' => $this->user['stripe_id'],
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ class AdminPlansTest extends TestCase
|
|||||||
|
|
||||||
$invoices = $this
|
$invoices = $this
|
||||||
->actingAs($user)
|
->actingAs($user)
|
||||||
->getJson('/api/user/invoices')
|
->getJson('/api/user/subscription/invoices')
|
||||||
->assertStatus(200)
|
->assertStatus(200)
|
||||||
->assertJsonFragment([
|
->assertJsonFragment([
|
||||||
'customer' => $this->user['stripe_id'],
|
'customer' => $this->user['stripe_id'],
|
||||||
|
|||||||
Reference in New Issue
Block a user