fix: 🐛 update tenant in api routes

This commit is contained in:
Alexis Gousseau 2025-05-28 15:16:35 +02:00
parent ea87502ba4
commit 8d1156382c
7 changed files with 51 additions and 48 deletions

View file

@ -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<string,integer> */
$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';
}

View file

@ -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.
*

View file

@ -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

View file

@ -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
{
/**

View file

@ -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,

View file

@ -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'));
});

View file

@ -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');