From 6d1816bd1b89523c417641f5247006834457d931 Mon Sep 17 00:00:00 2001
From: Darko Gjorgjijoski
Date: Sat, 11 Apr 2026 10:00:00 +0200
Subject: [PATCH] refactor: reorganize app/Services and app/Support by domain
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The app/Services/ directory had grown into 22 flat files at the root plus 7 uneven subdirectories — finding anything required scrolling through an alphabetical mix of small CRUD services, infrastructure drivers, and install-time utilities. This commit groups services by domain, folds Backup into a new Storage namespace, and moves framework-infrastructure and install-time helpers out of Services and into Support where they belong.
New Services layout: Documents/ (Invoice, Estimate, RecurringInvoice, Payment, Expense, Transaction, DocumentItem, SerialNumber, Currency — matches the 'Documents' navigation group); Company/ (Company, Member, Invitation); Mail/ (MailConfiguration, CompanyMailConfig); Storage/ (FileDisk, plus Backup folded in). ExchangeRateProviderService moves next to its drivers in ExchangeRate/; FontService moves into Pdf/ where it belongs. CustomerService, ItemService, CustomFieldService stay at the Services root as standalone single-file domains.
Moves to Support/: Hashids/ (library wrapper — not business logic); Setup/ (one-shot install-time utilities — stateless helpers); Pdf/ (ImageUtils, PdfTemplateUtils, plus the existing PdfHtmlSanitizer consolidated into the same subdir). These are all framework infrastructure and stateless utilities — the 'service' label never really fit them.
Namespace declarations in 29 moved files updated to match new paths. 62 consumer files (controllers, other services, tests, database factories, seeders, routes, bootstrap/providers.php) have their use statements rewritten via a literal-string replacement script — no regex meant no risk of half-matching. Three Documents services needed an explicit 'use App\Services\Mail\CompanyMailConfigService' added because the same-namespace short reference they relied on no longer resolves after the split.
Verified: composer dump-autoload, 350 tests pass (850 assertions), vendor/bin/pint clean, npm run build succeeds.
---
app/Console/Commands/CreateTemplateCommand.php | 2 +-
app/Console/Commands/MigrateMediaToPrivateDisk.php | 2 +-
app/Http/Controllers/Admin/BackupsController.php | 2 +-
app/Http/Controllers/Admin/CompaniesController.php | 2 +-
app/Http/Controllers/Admin/CurrenciesController.php | 2 +-
app/Http/Controllers/Admin/FontController.php | 2 +-
app/Http/Controllers/Admin/Settings/DiskController.php | 2 +-
.../Admin/Settings/MailConfigurationController.php | 2 +-
.../Admin/Settings/PDFConfigurationController.php | 2 +-
app/Http/Controllers/Company/Auth/AuthController.php | 2 +-
.../Company/Auth/InvitationRegistrationController.php | 2 +-
.../Company/Estimate/EstimateTemplatesController.php | 2 +-
.../Controllers/Company/Estimate/EstimatesController.php | 2 +-
.../Company/ExchangeRate/ExchangeRateProviderController.php | 2 +-
app/Http/Controllers/Company/Expense/ExpensesController.php | 2 +-
.../Company/General/InvitationResponseController.php | 2 +-
.../Controllers/Company/General/SerialNumberController.php | 2 +-
.../Company/Invoice/InvoiceTemplatesController.php | 2 +-
app/Http/Controllers/Company/Invoice/InvoicesController.php | 2 +-
app/Http/Controllers/Company/Members/MembersController.php | 2 +-
app/Http/Controllers/Company/Payment/PaymentsController.php | 2 +-
.../Company/RecurringInvoice/RecurringInvoiceController.php | 2 +-
.../Company/Settings/CompanyMailConfigurationController.php | 4 ++--
.../Controllers/Company/Settings/InvitationController.php | 2 +-
app/Http/Controllers/Pdf/DocumentPdfController.php | 4 ++--
app/Http/Controllers/Setup/AppDomainController.php | 2 +-
.../Controllers/Setup/DatabaseConfigurationController.php | 4 ++--
app/Http/Controllers/Setup/FilePermissionsController.php | 2 +-
app/Http/Controllers/Setup/OnboardingWizardController.php | 2 +-
app/Http/Controllers/Setup/RequirementsController.php | 2 +-
app/Http/Middleware/ConfigMiddleware.php | 2 +-
app/Http/Middleware/InstallationMiddleware.php | 2 +-
app/Http/Middleware/RedirectIfInstalled.php | 2 +-
app/Http/Middleware/UseInstallWizardTokenAuth.php | 2 +-
app/Http/Requests/CompanyMailConfigurationRequest.php | 2 +-
app/Http/Requests/MailEnvironmentRequest.php | 2 +-
app/Jobs/CreateBackupJob.php | 2 +-
app/Models/Estimate.php | 6 +++---
app/Models/FileDisk.php | 2 +-
app/Models/Invoice.php | 6 +++---
app/Models/Payment.php | 4 ++--
app/Providers/AppConfigProvider.php | 6 +++---
app/Providers/AppServiceProvider.php | 2 +-
app/Services/{ => Company}/CompanyService.php | 2 +-
app/Services/{ => Company}/InvitationService.php | 2 +-
app/Services/{ => Company}/MemberService.php | 2 +-
app/Services/{ => Documents}/CurrencyService.php | 2 +-
app/Services/{ => Documents}/DocumentItemService.php | 2 +-
app/Services/{ => Documents}/EstimateService.php | 5 +++--
app/Services/{ => Documents}/ExpenseService.php | 2 +-
app/Services/{ => Documents}/InvoiceService.php | 5 +++--
app/Services/{ => Documents}/PaymentService.php | 3 ++-
app/Services/{ => Documents}/RecurringInvoiceService.php | 2 +-
app/Services/{ => Documents}/SerialNumberService.php | 2 +-
app/Services/{ => Documents}/TransactionService.php | 2 +-
.../{ => ExchangeRate}/ExchangeRateProviderService.php | 2 +-
app/Services/{ => Mail}/CompanyMailConfigService.php | 2 +-
app/Services/{ => Mail}/MailConfigurationService.php | 2 +-
app/Services/{ => Pdf}/FontService.php | 2 +-
.../{Backup => Storage}/BackupConfigurationFactory.php | 4 ++--
app/Services/{Backup => Storage}/BackupService.php | 4 ++--
app/Services/{ => Storage}/FileDiskService.php | 2 +-
app/{Services => Support}/Hashids/HashidsFactory.php | 2 +-
app/{Services => Support}/Hashids/HashidsManager.php | 2 +-
.../Hashids/HashidsServiceProvider.php | 2 +-
app/{Services => Support}/Pdf/ImageUtils.php | 2 +-
app/Support/{ => Pdf}/PdfHtmlSanitizer.php | 2 +-
app/{Services => Support}/Pdf/PdfTemplateUtils.php | 2 +-
app/{Services => Support}/Setup/EnvironmentManager.php | 2 +-
app/{Services => Support}/Setup/FilePermissionChecker.php | 2 +-
app/{Services => Support}/Setup/InstallUtils.php | 2 +-
app/{Services => Support}/Setup/RequirementsChecker.php | 2 +-
app/Support/helpers.php | 2 +-
app/Traits/GeneratesPdfTrait.php | 4 ++--
bootstrap/providers.php | 2 +-
config/hashids.php | 2 +-
database/factories/EstimateFactory.php | 2 +-
database/factories/InvoiceFactory.php | 2 +-
database/factories/PaymentFactory.php | 2 +-
database/seeders/DemoSeeder.php | 2 +-
database/seeders/UsersTableSeeder.php | 4 ++--
routes/console.php | 4 ++--
tests/Feature/Admin/BackupGlobalTest.php | 2 +-
.../Company/CompanyMailConfigurationControllerTest.php | 4 ++--
tests/Unit/EstimateTest.php | 4 ++--
tests/Unit/InvoiceTest.php | 4 ++--
tests/Unit/PdfHtmlSanitizerTest.php | 2 +-
87 files changed, 110 insertions(+), 107 deletions(-)
rename app/Services/{ => Company}/CompanyService.php (99%)
rename app/Services/{ => Company}/InvitationService.php (99%)
rename app/Services/{ => Company}/MemberService.php (98%)
rename app/Services/{ => Documents}/CurrencyService.php (95%)
rename app/Services/{ => Documents}/DocumentItemService.php (98%)
rename app/Services/{ => Documents}/EstimateService.php (99%)
rename app/Services/{ => Documents}/ExpenseService.php (98%)
rename app/Services/{ => Documents}/InvoiceService.php (99%)
rename app/Services/{ => Documents}/PaymentService.php (98%)
rename app/Services/{ => Documents}/RecurringInvoiceService.php (99%)
rename app/Services/{ => Documents}/SerialNumberService.php (99%)
rename app/Services/{ => Documents}/TransactionService.php (95%)
rename app/Services/{ => ExchangeRate}/ExchangeRateProviderService.php (99%)
rename app/Services/{ => Mail}/CompanyMailConfigService.php (86%)
rename app/Services/{ => Mail}/MailConfigurationService.php (99%)
rename app/Services/{ => Pdf}/FontService.php (99%)
rename app/Services/{Backup => Storage}/BackupConfigurationFactory.php (88%)
rename app/Services/{Backup => Storage}/BackupService.php (94%)
rename app/Services/{ => Storage}/FileDiskService.php (99%)
rename app/{Services => Support}/Hashids/HashidsFactory.php (96%)
rename app/{Services => Support}/Hashids/HashidsManager.php (98%)
rename app/{Services => Support}/Hashids/HashidsServiceProvider.php (97%)
rename app/{Services => Support}/Pdf/ImageUtils.php (92%)
rename app/Support/{ => Pdf}/PdfHtmlSanitizer.php (98%)
rename app/{Services => Support}/Pdf/PdfTemplateUtils.php (99%)
rename app/{Services => Support}/Setup/EnvironmentManager.php (99%)
rename app/{Services => Support}/Setup/FilePermissionChecker.php (98%)
rename app/{Services => Support}/Setup/InstallUtils.php (97%)
rename app/{Services => Support}/Setup/RequirementsChecker.php (99%)
diff --git a/app/Console/Commands/CreateTemplateCommand.php b/app/Console/Commands/CreateTemplateCommand.php
index 487865a7..a47c60db 100644
--- a/app/Console/Commands/CreateTemplateCommand.php
+++ b/app/Console/Commands/CreateTemplateCommand.php
@@ -2,7 +2,7 @@
namespace App\Console\Commands;
-use App\Services\Pdf\PdfTemplateUtils;
+use App\Support\Pdf\PdfTemplateUtils;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
diff --git a/app/Console/Commands/MigrateMediaToPrivateDisk.php b/app/Console/Commands/MigrateMediaToPrivateDisk.php
index c3547c0d..573a48aa 100644
--- a/app/Console/Commands/MigrateMediaToPrivateDisk.php
+++ b/app/Console/Commands/MigrateMediaToPrivateDisk.php
@@ -4,7 +4,7 @@ namespace App\Console\Commands;
use App\Models\FileDisk;
use App\Models\Setting;
-use App\Services\FileDiskService;
+use App\Services\Storage\FileDiskService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
diff --git a/app/Http/Controllers/Admin/BackupsController.php b/app/Http/Controllers/Admin/BackupsController.php
index a1eaec3f..b1bb9c51 100644
--- a/app/Http/Controllers/Admin/BackupsController.php
+++ b/app/Http/Controllers/Admin/BackupsController.php
@@ -5,7 +5,7 @@ namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Jobs\CreateBackupJob;
use App\Rules\Backup\PathToZip;
-use App\Services\Backup\BackupService;
+use App\Services\Storage\BackupService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
diff --git a/app/Http/Controllers/Admin/CompaniesController.php b/app/Http/Controllers/Admin/CompaniesController.php
index aa05fe5f..db48052f 100644
--- a/app/Http/Controllers/Admin/CompaniesController.php
+++ b/app/Http/Controllers/Admin/CompaniesController.php
@@ -8,7 +8,7 @@ use App\Http\Requests\AdminCompanyUpdateRequest;
use App\Http\Requests\CompaniesRequest;
use App\Http\Resources\CompanyResource;
use App\Models\Company;
-use App\Services\CompanyService;
+use App\Services\Company\CompanyService;
use Illuminate\Http\Request;
use Silber\Bouncer\BouncerFacade;
diff --git a/app/Http/Controllers/Admin/CurrenciesController.php b/app/Http/Controllers/Admin/CurrenciesController.php
index 61f39fbb..5d3ed760 100644
--- a/app/Http/Controllers/Admin/CurrenciesController.php
+++ b/app/Http/Controllers/Admin/CurrenciesController.php
@@ -4,7 +4,7 @@ namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Resources\CurrencyResource;
-use App\Services\CurrencyService;
+use App\Services\Documents\CurrencyService;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
diff --git a/app/Http/Controllers/Admin/FontController.php b/app/Http/Controllers/Admin/FontController.php
index 1791649b..ffbc1f71 100644
--- a/app/Http/Controllers/Admin/FontController.php
+++ b/app/Http/Controllers/Admin/FontController.php
@@ -3,7 +3,7 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
-use App\Services\FontService;
+use App\Services\Pdf\FontService;
use Illuminate\Http\JsonResponse;
class FontController extends Controller
diff --git a/app/Http/Controllers/Admin/Settings/DiskController.php b/app/Http/Controllers/Admin/Settings/DiskController.php
index 30d3312f..96f1de45 100644
--- a/app/Http/Controllers/Admin/Settings/DiskController.php
+++ b/app/Http/Controllers/Admin/Settings/DiskController.php
@@ -7,7 +7,7 @@ use App\Http\Requests\DiskEnvironmentRequest;
use App\Http\Resources\FileDiskResource;
use App\Models\FileDisk;
use App\Models\Setting;
-use App\Services\FileDiskService;
+use App\Services\Storage\FileDiskService;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/Admin/Settings/MailConfigurationController.php b/app/Http/Controllers/Admin/Settings/MailConfigurationController.php
index 7aca9f6a..0abd988e 100755
--- a/app/Http/Controllers/Admin/Settings/MailConfigurationController.php
+++ b/app/Http/Controllers/Admin/Settings/MailConfigurationController.php
@@ -6,7 +6,7 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\MailEnvironmentRequest;
use App\Mail\TestMail;
use App\Models\Setting;
-use App\Services\MailConfigurationService;
+use App\Services\Mail\MailConfigurationService;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/Admin/Settings/PDFConfigurationController.php b/app/Http/Controllers/Admin/Settings/PDFConfigurationController.php
index 078f2b96..0ebb68cd 100644
--- a/app/Http/Controllers/Admin/Settings/PDFConfigurationController.php
+++ b/app/Http/Controllers/Admin/Settings/PDFConfigurationController.php
@@ -5,7 +5,7 @@ namespace App\Http\Controllers\Admin\Settings;
use App\Http\Controllers\Controller;
use App\Http\Requests\PDFConfigurationRequest;
use App\Models\Setting;
-use App\Services\Setup\EnvironmentManager;
+use App\Support\Setup\EnvironmentManager;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\JsonResponse;
diff --git a/app/Http/Controllers/Company/Auth/AuthController.php b/app/Http/Controllers/Company/Auth/AuthController.php
index f1f4c307..29c6dd40 100644
--- a/app/Http/Controllers/Company/Auth/AuthController.php
+++ b/app/Http/Controllers/Company/Auth/AuthController.php
@@ -6,7 +6,7 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\LoginRequest;
use App\Models\CompanyInvitation;
use App\Models\User;
-use App\Services\InvitationService;
+use App\Services\Company\InvitationService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
diff --git a/app/Http/Controllers/Company/Auth/InvitationRegistrationController.php b/app/Http/Controllers/Company/Auth/InvitationRegistrationController.php
index f8e9ddc7..610b5f7c 100644
--- a/app/Http/Controllers/Company/Auth/InvitationRegistrationController.php
+++ b/app/Http/Controllers/Company/Auth/InvitationRegistrationController.php
@@ -5,7 +5,7 @@ namespace App\Http\Controllers\Company\Auth;
use App\Http\Controllers\Controller;
use App\Models\CompanyInvitation;
use App\Models\User;
-use App\Services\InvitationService;
+use App\Services\Company\InvitationService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
diff --git a/app/Http/Controllers/Company/Estimate/EstimateTemplatesController.php b/app/Http/Controllers/Company/Estimate/EstimateTemplatesController.php
index 3c46ae93..4b5df455 100644
--- a/app/Http/Controllers/Company/Estimate/EstimateTemplatesController.php
+++ b/app/Http/Controllers/Company/Estimate/EstimateTemplatesController.php
@@ -4,7 +4,7 @@ namespace App\Http\Controllers\Company\Estimate;
use App\Http\Controllers\Controller;
use App\Models\Estimate;
-use App\Services\Pdf\PdfTemplateUtils;
+use App\Support\Pdf\PdfTemplateUtils;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/Company/Estimate/EstimatesController.php b/app/Http/Controllers/Company/Estimate/EstimatesController.php
index 18322075..cf26d882 100644
--- a/app/Http/Controllers/Company/Estimate/EstimatesController.php
+++ b/app/Http/Controllers/Company/Estimate/EstimatesController.php
@@ -11,7 +11,7 @@ use App\Http\Resources\InvoiceResource;
use App\Jobs\GenerateEstimatePdfJob;
use App\Models\Estimate;
use App\Models\Invoice;
-use App\Services\EstimateService;
+use App\Services\Documents\EstimateService;
use Illuminate\Http\Request;
use Illuminate\Mail\Markdown;
diff --git a/app/Http/Controllers/Company/ExchangeRate/ExchangeRateProviderController.php b/app/Http/Controllers/Company/ExchangeRate/ExchangeRateProviderController.php
index c78f0086..c55ca669 100644
--- a/app/Http/Controllers/Company/ExchangeRate/ExchangeRateProviderController.php
+++ b/app/Http/Controllers/Company/ExchangeRate/ExchangeRateProviderController.php
@@ -14,7 +14,7 @@ use App\Models\ExchangeRateProvider;
use App\Models\Invoice;
use App\Models\Payment;
use App\Models\Tax;
-use App\Services\ExchangeRateProviderService;
+use App\Services\ExchangeRate\ExchangeRateProviderService;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Arr;
diff --git a/app/Http/Controllers/Company/Expense/ExpensesController.php b/app/Http/Controllers/Company/Expense/ExpensesController.php
index 85ead680..27e692da 100644
--- a/app/Http/Controllers/Company/Expense/ExpensesController.php
+++ b/app/Http/Controllers/Company/Expense/ExpensesController.php
@@ -8,7 +8,7 @@ use App\Http\Requests\ExpenseRequest;
use App\Http\Requests\UploadExpenseReceiptRequest;
use App\Http\Resources\ExpenseResource;
use App\Models\Expense;
-use App\Services\ExpenseService;
+use App\Services\Documents\ExpenseService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/Company/General/InvitationResponseController.php b/app/Http/Controllers/Company/General/InvitationResponseController.php
index 70cec8e2..e4c21148 100644
--- a/app/Http/Controllers/Company/General/InvitationResponseController.php
+++ b/app/Http/Controllers/Company/General/InvitationResponseController.php
@@ -5,7 +5,7 @@ namespace App\Http\Controllers\Company\General;
use App\Http\Controllers\Controller;
use App\Http\Resources\CompanyInvitationResource;
use App\Models\CompanyInvitation;
-use App\Services\InvitationService;
+use App\Services\Company\InvitationService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/Company/General/SerialNumberController.php b/app/Http/Controllers/Company/General/SerialNumberController.php
index 3ad47b44..4731c9a0 100644
--- a/app/Http/Controllers/Company/General/SerialNumberController.php
+++ b/app/Http/Controllers/Company/General/SerialNumberController.php
@@ -6,7 +6,7 @@ use App\Http\Controllers\Controller;
use App\Models\Estimate;
use App\Models\Invoice;
use App\Models\Payment;
-use App\Services\SerialNumberService;
+use App\Services\Documents\SerialNumberService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/Company/Invoice/InvoiceTemplatesController.php b/app/Http/Controllers/Company/Invoice/InvoiceTemplatesController.php
index 5c2042f7..8332afb5 100644
--- a/app/Http/Controllers/Company/Invoice/InvoiceTemplatesController.php
+++ b/app/Http/Controllers/Company/Invoice/InvoiceTemplatesController.php
@@ -4,7 +4,7 @@ namespace App\Http\Controllers\Company\Invoice;
use App\Http\Controllers\Controller;
use App\Models\Invoice;
-use App\Services\Pdf\PdfTemplateUtils;
+use App\Support\Pdf\PdfTemplateUtils;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/Company/Invoice/InvoicesController.php b/app/Http/Controllers/Company/Invoice/InvoicesController.php
index 6ac7b6c0..51fa9df1 100644
--- a/app/Http/Controllers/Company/Invoice/InvoicesController.php
+++ b/app/Http/Controllers/Company/Invoice/InvoicesController.php
@@ -11,7 +11,7 @@ use App\Http\Resources\InvoiceResource;
use App\Jobs\GenerateInvoicePdfJob;
use App\Models\Estimate;
use App\Models\Invoice;
-use App\Services\InvoiceService;
+use App\Services\Documents\InvoiceService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Mail\Markdown;
diff --git a/app/Http/Controllers/Company/Members/MembersController.php b/app/Http/Controllers/Company/Members/MembersController.php
index b7c72ea4..cb2e3bea 100644
--- a/app/Http/Controllers/Company/Members/MembersController.php
+++ b/app/Http/Controllers/Company/Members/MembersController.php
@@ -7,7 +7,7 @@ use App\Http\Requests\DeleteMemberRequest;
use App\Http\Requests\MemberRequest;
use App\Http\Resources\UserResource;
use App\Models\User;
-use App\Services\MemberService;
+use App\Services\Company\MemberService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/Company/Payment/PaymentsController.php b/app/Http/Controllers/Company/Payment/PaymentsController.php
index a69b9245..0ad4b1d3 100644
--- a/app/Http/Controllers/Company/Payment/PaymentsController.php
+++ b/app/Http/Controllers/Company/Payment/PaymentsController.php
@@ -8,7 +8,7 @@ use App\Http\Requests\PaymentRequest;
use App\Http\Requests\SendPaymentRequest;
use App\Http\Resources\PaymentResource;
use App\Models\Payment;
-use App\Services\PaymentService;
+use App\Services\Documents\PaymentService;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Mail\Markdown;
diff --git a/app/Http/Controllers/Company/RecurringInvoice/RecurringInvoiceController.php b/app/Http/Controllers/Company/RecurringInvoice/RecurringInvoiceController.php
index 38cfdc6d..4aeac0ba 100644
--- a/app/Http/Controllers/Company/RecurringInvoice/RecurringInvoiceController.php
+++ b/app/Http/Controllers/Company/RecurringInvoice/RecurringInvoiceController.php
@@ -6,7 +6,7 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\RecurringInvoiceRequest;
use App\Http\Resources\RecurringInvoiceResource;
use App\Models\RecurringInvoice;
-use App\Services\RecurringInvoiceService;
+use App\Services\Documents\RecurringInvoiceService;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
diff --git a/app/Http/Controllers/Company/Settings/CompanyMailConfigurationController.php b/app/Http/Controllers/Company/Settings/CompanyMailConfigurationController.php
index 69f3e49e..3eca1fbf 100644
--- a/app/Http/Controllers/Company/Settings/CompanyMailConfigurationController.php
+++ b/app/Http/Controllers/Company/Settings/CompanyMailConfigurationController.php
@@ -5,8 +5,8 @@ namespace App\Http\Controllers\Company\Settings;
use App\Http\Controllers\Controller;
use App\Http\Requests\CompanyMailConfigurationRequest;
use App\Mail\TestMail;
-use App\Services\CompanyMailConfigService;
-use App\Services\MailConfigurationService;
+use App\Services\Mail\CompanyMailConfigService;
+use App\Services\Mail\MailConfigurationService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
diff --git a/app/Http/Controllers/Company/Settings/InvitationController.php b/app/Http/Controllers/Company/Settings/InvitationController.php
index 203ee0af..041ba587 100644
--- a/app/Http/Controllers/Company/Settings/InvitationController.php
+++ b/app/Http/Controllers/Company/Settings/InvitationController.php
@@ -6,7 +6,7 @@ use App\Http\Controllers\Controller;
use App\Http\Resources\CompanyInvitationResource;
use App\Models\Company;
use App\Models\CompanyInvitation;
-use App\Services\InvitationService;
+use App\Services\Company\InvitationService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/Pdf/DocumentPdfController.php b/app/Http/Controllers/Pdf/DocumentPdfController.php
index 81cd6d78..c9a44357 100644
--- a/app/Http/Controllers/Pdf/DocumentPdfController.php
+++ b/app/Http/Controllers/Pdf/DocumentPdfController.php
@@ -6,8 +6,8 @@ use App\Http\Controllers\Controller;
use App\Models\Estimate;
use App\Models\Invoice;
use App\Models\Payment;
-use App\Services\EstimateService;
-use App\Services\InvoiceService;
+use App\Services\Documents\EstimateService;
+use App\Services\Documents\InvoiceService;
use Illuminate\Http\Request;
class DocumentPdfController extends Controller
diff --git a/app/Http/Controllers/Setup/AppDomainController.php b/app/Http/Controllers/Setup/AppDomainController.php
index 6a6b7ce7..e0eca00c 100644
--- a/app/Http/Controllers/Setup/AppDomainController.php
+++ b/app/Http/Controllers/Setup/AppDomainController.php
@@ -4,7 +4,7 @@ namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use App\Http\Requests\DomainEnvironmentRequest;
-use App\Services\Setup\EnvironmentManager;
+use App\Support\Setup\EnvironmentManager;
use Illuminate\Support\Facades\Artisan;
class AppDomainController extends Controller
diff --git a/app/Http/Controllers/Setup/DatabaseConfigurationController.php b/app/Http/Controllers/Setup/DatabaseConfigurationController.php
index 497237bc..cccb0c47 100644
--- a/app/Http/Controllers/Setup/DatabaseConfigurationController.php
+++ b/app/Http/Controllers/Setup/DatabaseConfigurationController.php
@@ -4,8 +4,8 @@ namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use App\Http\Requests\DatabaseEnvironmentRequest;
-use App\Services\Setup\EnvironmentManager;
-use App\Services\Setup\InstallUtils;
+use App\Support\Setup\EnvironmentManager;
+use App\Support\Setup\InstallUtils;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
diff --git a/app/Http/Controllers/Setup/FilePermissionsController.php b/app/Http/Controllers/Setup/FilePermissionsController.php
index c75b37f7..1db0787e 100644
--- a/app/Http/Controllers/Setup/FilePermissionsController.php
+++ b/app/Http/Controllers/Setup/FilePermissionsController.php
@@ -3,7 +3,7 @@
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
-use App\Services\Setup\FilePermissionChecker;
+use App\Support\Setup\FilePermissionChecker;
use Illuminate\Http\JsonResponse;
class FilePermissionsController extends Controller
diff --git a/app/Http/Controllers/Setup/OnboardingWizardController.php b/app/Http/Controllers/Setup/OnboardingWizardController.php
index c2e62191..54ce4926 100644
--- a/app/Http/Controllers/Setup/OnboardingWizardController.php
+++ b/app/Http/Controllers/Setup/OnboardingWizardController.php
@@ -4,7 +4,7 @@ namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use App\Models\Setting;
-use App\Services\Setup\InstallUtils;
+use App\Support\Setup\InstallUtils;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/Setup/RequirementsController.php b/app/Http/Controllers/Setup/RequirementsController.php
index 5eeaf502..6f96d581 100755
--- a/app/Http/Controllers/Setup/RequirementsController.php
+++ b/app/Http/Controllers/Setup/RequirementsController.php
@@ -3,7 +3,7 @@
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
-use App\Services\Setup\RequirementsChecker;
+use App\Support\Setup\RequirementsChecker;
use Illuminate\Http\JsonResponse;
class RequirementsController extends Controller
diff --git a/app/Http/Middleware/ConfigMiddleware.php b/app/Http/Middleware/ConfigMiddleware.php
index 42e6e687..e95d7fec 100644
--- a/app/Http/Middleware/ConfigMiddleware.php
+++ b/app/Http/Middleware/ConfigMiddleware.php
@@ -3,7 +3,7 @@
namespace App\Http\Middleware;
use App\Models\FileDisk;
-use App\Services\Setup\InstallUtils;
+use App\Support\Setup\InstallUtils;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
diff --git a/app/Http/Middleware/InstallationMiddleware.php b/app/Http/Middleware/InstallationMiddleware.php
index 48ea6cfa..8abd3e58 100644
--- a/app/Http/Middleware/InstallationMiddleware.php
+++ b/app/Http/Middleware/InstallationMiddleware.php
@@ -3,7 +3,7 @@
namespace App\Http\Middleware;
use App\Models\Setting;
-use App\Services\Setup\InstallUtils;
+use App\Support\Setup\InstallUtils;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
diff --git a/app/Http/Middleware/RedirectIfInstalled.php b/app/Http/Middleware/RedirectIfInstalled.php
index 1ac820f1..6b973f94 100644
--- a/app/Http/Middleware/RedirectIfInstalled.php
+++ b/app/Http/Middleware/RedirectIfInstalled.php
@@ -3,7 +3,7 @@
namespace App\Http\Middleware;
use App\Models\Setting;
-use App\Services\Setup\InstallUtils;
+use App\Support\Setup\InstallUtils;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
diff --git a/app/Http/Middleware/UseInstallWizardTokenAuth.php b/app/Http/Middleware/UseInstallWizardTokenAuth.php
index a700e95a..1b1891dc 100644
--- a/app/Http/Middleware/UseInstallWizardTokenAuth.php
+++ b/app/Http/Middleware/UseInstallWizardTokenAuth.php
@@ -3,8 +3,8 @@
namespace App\Http\Middleware;
use App\Models\Setting;
-use App\Services\Setup\InstallUtils;
use App\Support\InstallWizardAuth;
+use App\Support\Setup\InstallUtils;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
diff --git a/app/Http/Requests/CompanyMailConfigurationRequest.php b/app/Http/Requests/CompanyMailConfigurationRequest.php
index 01d3ce81..44c4a3ff 100644
--- a/app/Http/Requests/CompanyMailConfigurationRequest.php
+++ b/app/Http/Requests/CompanyMailConfigurationRequest.php
@@ -2,7 +2,7 @@
namespace App\Http\Requests;
-use App\Services\MailConfigurationService;
+use App\Services\Mail\MailConfigurationService;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
diff --git a/app/Http/Requests/MailEnvironmentRequest.php b/app/Http/Requests/MailEnvironmentRequest.php
index 51194e93..9c560303 100644
--- a/app/Http/Requests/MailEnvironmentRequest.php
+++ b/app/Http/Requests/MailEnvironmentRequest.php
@@ -2,7 +2,7 @@
namespace App\Http\Requests;
-use App\Services\MailConfigurationService;
+use App\Services\Mail\MailConfigurationService;
use Illuminate\Foundation\Http\FormRequest;
class MailEnvironmentRequest extends FormRequest
diff --git a/app/Jobs/CreateBackupJob.php b/app/Jobs/CreateBackupJob.php
index 131bbe5f..ec958487 100644
--- a/app/Jobs/CreateBackupJob.php
+++ b/app/Jobs/CreateBackupJob.php
@@ -2,7 +2,7 @@
namespace App\Jobs;
-use App\Services\Backup\BackupConfigurationFactory;
+use App\Services\Storage\BackupConfigurationFactory;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
diff --git a/app/Models/Estimate.php b/app/Models/Estimate.php
index 6702e110..40c190b7 100644
--- a/app/Models/Estimate.php
+++ b/app/Models/Estimate.php
@@ -2,9 +2,9 @@
namespace App\Models;
-use App\Services\EstimateService;
-use App\Services\Pdf\PdfTemplateUtils;
-use App\Support\PdfHtmlSanitizer;
+use App\Services\Documents\EstimateService;
+use App\Support\Pdf\PdfHtmlSanitizer;
+use App\Support\Pdf\PdfTemplateUtils;
use App\Traits\GeneratesPdfTrait;
use App\Traits\HasCustomFieldsTrait;
use Carbon\Carbon;
diff --git a/app/Models/FileDisk.php b/app/Models/FileDisk.php
index 545d7e91..653c9500 100644
--- a/app/Models/FileDisk.php
+++ b/app/Models/FileDisk.php
@@ -2,7 +2,7 @@
namespace App\Models;
-use App\Services\FileDiskService;
+use App\Services\Storage\FileDiskService;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php
index 6c9f9a89..a723e1bf 100644
--- a/app/Models/Invoice.php
+++ b/app/Models/Invoice.php
@@ -2,9 +2,9 @@
namespace App\Models;
-use App\Services\InvoiceService;
-use App\Services\Pdf\PdfTemplateUtils;
-use App\Support\PdfHtmlSanitizer;
+use App\Services\Documents\InvoiceService;
+use App\Support\Pdf\PdfHtmlSanitizer;
+use App\Support\Pdf\PdfTemplateUtils;
use App\Traits\GeneratesPdfTrait;
use App\Traits\HasCustomFieldsTrait;
use Carbon\Carbon;
diff --git a/app/Models/Payment.php b/app/Models/Payment.php
index 139d80bd..9f716751 100644
--- a/app/Models/Payment.php
+++ b/app/Models/Payment.php
@@ -3,8 +3,8 @@
namespace App\Models;
use App\Jobs\GeneratePaymentPdfJob;
-use App\Services\PaymentService;
-use App\Support\PdfHtmlSanitizer;
+use App\Services\Documents\PaymentService;
+use App\Support\Pdf\PdfHtmlSanitizer;
use App\Traits\GeneratesPdfTrait;
use App\Traits\HasCustomFieldsTrait;
use Carbon\Carbon;
diff --git a/app/Providers/AppConfigProvider.php b/app/Providers/AppConfigProvider.php
index 8a69dbdc..071f9600 100644
--- a/app/Providers/AppConfigProvider.php
+++ b/app/Providers/AppConfigProvider.php
@@ -4,9 +4,9 @@ namespace App\Providers;
use App\Models\FileDisk;
use App\Models\Setting;
-use App\Services\FileDiskService;
-use App\Services\MailConfigurationService;
-use App\Services\Setup\InstallUtils;
+use App\Services\Mail\MailConfigurationService;
+use App\Services\Storage\FileDiskService;
+use App\Support\Setup\InstallUtils;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\ServiceProvider;
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 531bcb1d..911653ee 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -18,9 +18,9 @@ use App\Policies\ReportPolicy;
use App\Policies\RolePolicy;
use App\Policies\SettingsPolicy;
use App\Policies\UserPolicy;
-use App\Services\Setup\InstallUtils;
use App\Support\BouncerDefaultScope;
use App\Support\InstallWizardAuth;
+use App\Support\Setup\InstallUtils;
use Gate;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Broadcast;
diff --git a/app/Services/CompanyService.php b/app/Services/Company/CompanyService.php
similarity index 99%
rename from app/Services/CompanyService.php
rename to app/Services/Company/CompanyService.php
index d58619ce..c96b6e4b 100644
--- a/app/Services/CompanyService.php
+++ b/app/Services/Company/CompanyService.php
@@ -1,6 +1,6 @@
Hi
";