diff --git a/app/Http/Controllers/API/SyncController.php b/app/Http/Controllers/API/SyncController.php index f362391..74c543c 100644 --- a/app/Http/Controllers/API/SyncController.php +++ b/app/Http/Controllers/API/SyncController.php @@ -5,7 +5,6 @@ namespace App\Http\Controllers\API; use App\Http\Controllers\Controller; use App\Http\Requests\Api\Contacts\DestroyContactsRequest; use App\Http\Requests\Api\Contacts\UpsertContactsRequest; -use App\Http\Requests\Api\SendFlyerRequest; use App\Http\Resources\ApiResponseResource; use App\Http\Resources\AppUserResource; use App\Http\Resources\ContactResource; @@ -37,10 +36,8 @@ class SyncController extends Controller */ public function getUsers(): \App\Http\Resources\ApiResponseResource { - /** @var string $tenantKey */ - $tenantKey = request()->tenant; - $users = AppUserResource::collection( - AppUser::query()->where('tenant_id', $tenantKey)->where('status', 1)->get() + $users = AppUserResource::collection( + AppUser::query()->where('tenant_id', \tenant()->getKey())->where('status', 1)->get() )->toArray(request()); return new ApiResponseResource("OK", $users); } @@ -55,11 +52,9 @@ class SyncController extends Controller */ public function getContacts(AppUser $app_user): \Illuminate\Http\Resources\Json\AnonymousResourceCollection { - /** @var string $tenantKey */ - $tenantKey = request()->tenant; return ContactResource::collection( - Contact::query()->whereHas('appUser', function (Builder $q) use ($tenantKey, $app_user) { - $q->where('tenant_id', $tenantKey)->where('id', $app_user->id); + Contact::query()->whereHas('appUser', function (Builder $q) use ($app_user) { + $q->where('tenant_id', \tenant()->getKey())->where('id', $app_user->id); })->get() ); } @@ -75,13 +70,10 @@ class SyncController extends Controller UpsertContactsRequest $request, AppUser $app_user ): \Illuminate\Http\JsonResponse { - /** @var string $tenantKey */ - $tenantKey = $request->tenant; - /** @var \Illuminate\Support\Collection */ $formularies = Formulary::query()->pluck('slug')->flip(); - $contactQuery = Contact::query()->whereHas('appUser', function (Builder $q) use ($tenantKey, $app_user) { - $q->where('tenant_id', $tenantKey)->where('id', $app_user->getKey()); + $contactQuery = Contact::query()->whereHas('appUser', function (Builder $q) use ($app_user) { + $q->where('tenant_id', \tenant()->getKey())->where('id', $app_user->getKey()); }); \collect($request->contacts)->each( @@ -129,11 +121,9 @@ class SyncController extends Controller */ public function destroyContacts(DestroyContactsRequest $request, AppUser $app_user): \Illuminate\Http\JsonResponse { - /** @var string $tenantKey */ - $tenantKey = $request->tenant; - Contact::query()->whereIn('id', $request->contactUuidList) - ->whereHas('appUser', function (Builder $q) use ($tenantKey, $app_user) { - $q->where('tenant_id', $tenantKey)->where('id', $app_user->id); + Contact::query()->whereIn('id', $request->validated()['contactUuidList']) + ->whereHas('appUser', function (Builder $q) use ($app_user) { + $q->where('tenant_id', \tenant()->getKey())->where('id', $app_user->id); })->delete(); // * HTTP 200 is ok. @@ -147,10 +137,8 @@ class SyncController extends Controller */ public function getDirectories(): \Illuminate\Http\Resources\Json\AnonymousResourceCollection { - /** @var string $tenantKey */ - $tenantKey = request()->tenant; return DirectoryResource::collection( - Directory::query()->where('tenant_id', $tenantKey)->orderBy('order')->get() + Directory::query()->where('tenant_id', \tenant()->getKey())->orderBy('order')->get() ); } @@ -159,10 +147,8 @@ class SyncController extends Controller */ public function getDocuments(): \Illuminate\Http\Resources\Json\AnonymousResourceCollection { - /** @var string $tenantKey */ - $tenantKey = request()->tenant; return DocumentResource::collection( - Document::query()->where('tenant_id', $tenantKey)->where('status', 1)->get() + Document::query()->where('tenant_id', \tenant()->getKey())->where('status', 1)->get() ); } @@ -172,12 +158,16 @@ class SyncController extends Controller */ public function getVersion(Request $request): array { - /** @var string $tenantKey */ - $tenantKey = $request->tenant; $app_uuid = $request->app_uuid; $app_version = $request->app_version; - $version = Setting::query()->where('tenant_id', $tenantKey)->where('key', 'version')->value('value'); - $ShowIsActive = Setting::query()->where('tenant_id', $tenantKey)->where('key', 'ShowIsActive')->value('value'); + $version = Setting::query() + ->where('tenant_id', \tenant()->getKey()) + ->where('key', 'version') + ->value('value'); + $ShowIsActive = Setting::query() + ->where('tenant_id', \tenant()->getKey()) + ->where('key', 'ShowIsActive') + ->value('value'); try { $client = new \GuzzleHttp\Client(); @@ -205,10 +195,8 @@ class SyncController extends Controller */ public function getFormularies(): \Illuminate\Http\Resources\Json\AnonymousResourceCollection { - /** @var string $tenantKey */ - $tenantKey = request()->tenant; return FormularyResource::collection( - Formulary::query()->where('tenant_id', $tenantKey)->orderBy('order')->get() + Formulary::query()->where('tenant_id', \tenant()->getKey())->orderBy('order')->get() ); } @@ -216,11 +204,9 @@ class SyncController extends Controller * @param \App\Http\Requests\Api\SendFlyerRequest $request * @return string */ - public function sendFlyer(SendFlyerRequest $request): string + public function sendFlyer(Request $request): string { - /** @var string $tenantKey */ - $tenantKey = $request->tenant; - $requestData = $request->validated()['emails']; + $requestData = $request['emails']; $email = $requestData['email']; $subject = $requestData['subject']; $message = $requestData['message']; @@ -234,12 +220,12 @@ class SyncController extends Controller $noExists = []; foreach ($docs as $doc) { $exists = Storage::disk('public') - ->exists(sprintf('docs/%s/%s.%s', $tenantKey, $doc['uuid'], $doc['type'])); + ->exists(sprintf('docs/%s/%s.%s', \tenant()->getKey(), $doc['uuid'], $doc['type'])); if ($exists) { array_push($attach, URL::temporarySignedRoute( 'bo.docs.download', now()->addDays(30), - ['tenant' => $tenantKey, 'uuid' => $doc['uuid']] + ['tenant' => \tenant()->getKey(), 'uuid' => $doc['uuid']] )); array_push($filesName, $doc['title']); } else { @@ -247,7 +233,7 @@ class SyncController extends Controller } } if (count($noExists) === 0) { - $message = new SendFlyer([ + $mail = new SendFlyer([ 'body' => $message, 'from' => $user->email, 'fromName' => $user->firstname . ' ' . $user->lastname, @@ -258,7 +244,7 @@ class SyncController extends Controller Mail::to($email)->cc($user->email)->queue($message); } else { - $message = new SendFlyerFailed([ + $mail = new SendFlyerFailed([ 'email' => $email, 'message' => $message, 'subject' => $subject, @@ -266,7 +252,7 @@ class SyncController extends Controller 'noExists' => $noExists ]); - Mail::to($user->email)->queue($message); + Mail::to($user->email)->queue($mail); } //end if return 'OK'; } diff --git a/app/Http/Requests/Api/Contacts/DestroyContactsRequest.php b/app/Http/Requests/Api/Contacts/DestroyContactsRequest.php index d5a80bd..4a21b6a 100644 --- a/app/Http/Requests/Api/Contacts/DestroyContactsRequest.php +++ b/app/Http/Requests/Api/Contacts/DestroyContactsRequest.php @@ -6,6 +6,18 @@ use Illuminate\Foundation\Http\FormRequest; class DestroyContactsRequest extends FormRequest { + /** + * Prepare the data for validation. + * + * @return void + */ + protected function prepareForValidation(): void + { + $this->merge([ + 'contactUuidList' => \collect($this->contactUuidList)->filter()->all(), + ]); + } + /** * Get the validation rules that apply to the request. * diff --git a/app/Http/Requests/Api/Contacts/UpsertContactsRequest.php b/app/Http/Requests/Api/Contacts/UpsertContactsRequest.php index b6d21b9..a5ffcfb 100644 --- a/app/Http/Requests/Api/Contacts/UpsertContactsRequest.php +++ b/app/Http/Requests/Api/Contacts/UpsertContactsRequest.php @@ -55,11 +55,11 @@ class UpsertContactsRequest extends FormRequest 'contacts' => 'present|array', 'contacts.*' => 'array', 'contacts.*.id' => 'uuid', - 'contacts.*.lastname' => 'nullable|string|between:3,255', - 'contacts.*.firstname' => 'nullable|string|between:3,255', + 'contacts.*.lastname' => 'nullable|string|between:1,255', + 'contacts.*.firstname' => 'nullable|string|between:1,255', // * Dot not validate email here (soft validate), if it does not pass, app will be blocked. - 'contacts.*.email' => 'required|string|between:3,255', - 'contacts.*.phone' => 'nullable|string|between:3,255', + 'contacts.*.email' => 'required|string|between:1,255', + 'contacts.*.phone' => 'nullable|string|between:1,255', 'contacts.*.timestamp' => 'required|date', // * DATA diff --git a/app/Http/Requests/Api/SendFlyerRequest.php b/app/Http/Requests/Api/SendFlyerRequest.php index 1e17640..3e21bea 100644 --- a/app/Http/Requests/Api/SendFlyerRequest.php +++ b/app/Http/Requests/Api/SendFlyerRequest.php @@ -5,6 +5,7 @@ namespace App\Http\Requests\Api; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; +/** FIXME: currently not used but will be in the future. */ class SendFlyerRequest extends FormRequest { /** diff --git a/app/Models/Formulary.php b/app/Models/Formulary.php index e7b2f0e..244fc04 100644 --- a/app/Models/Formulary.php +++ b/app/Models/Formulary.php @@ -53,6 +53,7 @@ class Formulary extends Model protected $casts = [ 'required' => 'bool', 'is_visible' => 'bool', + // FIXME: update the json cast if api crash. 'placeholder' => 'json', 'details' => 'json', 'type' => InputTypeEnum::class, diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index aaba0ea..0eaa94a 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -41,8 +41,7 @@ class RouteServiceProvider extends ServiceProvider ->namespace($this->namespace) ->group(base_path('routes/web-bo.php')); - Route::prefix('api') - ->middleware('api') + Route::middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api.php')); }); diff --git a/routes/api.php b/routes/api.php index 67fd7df..66cdad6 100644 --- a/routes/api.php +++ b/routes/api.php @@ -4,6 +4,7 @@ use App\Http\Controllers\API\AppController; use App\Http\Controllers\API\SettingsController; use App\Http\Controllers\API\SyncController; use Illuminate\Support\Facades\Route; +use Stancl\Tenancy\Middleware\InitializeTenancyByPath; /* |-------------------------------------------------------------------------- @@ -16,7 +17,10 @@ use Illuminate\Support\Facades\Route; | */ -Route::middleware('api.token') +Route::middleware([ + InitializeTenancyByPath::class, + 'api.token', +])->prefix('{tenant}/api') ->name('api.') ->group(function () { Route::get('settings', [SettingsController::class, 'get'])->name('settings.index');