Passed
Push — main ( c5f286...f548df )
by Thierry
07:56 queued 18s
created

anonymous//app/Providers/SiakServiceProvider.php$0   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 5
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 10
c 0
b 0
f 0
wmc 1
1
<?php
2
3
namespace App\Providers;
4
5
use Illuminate\Database\Eloquent\Model;
6
use Illuminate\Support\ServiceProvider;
7
use Illuminate\Support\Facades\Log;
8
use Illuminate\Support\Facades\DB;
9
use Mcamara\LaravelLocalization\LaravelLocalization;
10
use Siak\Tontine\Service\BalanceCalculator;
11
use Siak\Tontine\Service\LocaleService;
12
use Siak\Tontine\Service\TenantService;
13
use Siak\Tontine\Service\Meeting\Cash\DisbursementService;
14
use Siak\Tontine\Service\Meeting\Charge\BillService;
15
use Siak\Tontine\Service\Meeting\Charge\FixedFeeService;
16
use Siak\Tontine\Service\Meeting\Charge\LibreFeeService;
17
use Siak\Tontine\Service\Meeting\Charge\SettlementService;
18
use Siak\Tontine\Service\Meeting\Charge\SettlementTargetService;
19
use Siak\Tontine\Service\Meeting\Credit\DebtCalculator;
20
use Siak\Tontine\Service\Meeting\Credit\LoanService;
21
use Siak\Tontine\Service\Meeting\Credit\RefundService;
22
use Siak\Tontine\Service\Meeting\PaymentServiceInterface;
23
use Siak\Tontine\Service\Meeting\Pool\AuctionService;
24
use Siak\Tontine\Service\Meeting\Pool\DepositService;
25
use Siak\Tontine\Service\Meeting\Pool\PoolService as MeetingPoolService;
26
use Siak\Tontine\Service\Meeting\Pool\RemitmentService;
27
use Siak\Tontine\Service\Meeting\PresenceService;
28
use Siak\Tontine\Service\Meeting\Saving\ProfitService;
29
use Siak\Tontine\Service\Meeting\Saving\SavingService;
30
use Siak\Tontine\Service\Meeting\SessionService as MeetingSessionService;
31
use Siak\Tontine\Service\Meeting\SummaryService as MeetingSummaryService;
32
use Siak\Tontine\Service\Planning\PoolService as TontinePoolService;
33
use Siak\Tontine\Service\Planning\RoundService;
34
use Siak\Tontine\Service\Planning\SessionService as PlanningSessionService;
35
use Siak\Tontine\Service\Planning\SubscriptionService;
36
use Siak\Tontine\Service\Planning\SummaryService as PlanningSummaryService;
37
use Siak\Tontine\Service\Report\MemberService as MemberReportService;
38
use Siak\Tontine\Service\Report\Pdf\PrinterService;
39
use Siak\Tontine\Service\Report\ReportService;
40
use Siak\Tontine\Service\Report\RoundService as RoundReportService;
41
use Siak\Tontine\Service\Report\SessionService as SessionReportService;
42
use Siak\Tontine\Service\Tontine\CategoryService;
43
use Siak\Tontine\Service\Tontine\ChargeService;
44
use Siak\Tontine\Service\Tontine\FundService;
45
use Siak\Tontine\Service\Tontine\GuestService;
46
use Siak\Tontine\Service\Tontine\MemberService;
47
use Siak\Tontine\Service\Tontine\TontineService;
48
use Siak\Tontine\Validation\Meeting\ClosingValidator;
49
use Siak\Tontine\Validation\Meeting\DisbursementValidator;
50
use Siak\Tontine\Validation\Meeting\DebtValidator;
51
use Siak\Tontine\Validation\Meeting\LoanValidator;
52
use Siak\Tontine\Validation\Meeting\RemitmentValidator;
53
use Siak\Tontine\Validation\Meeting\SavingValidator;
54
use Siak\Tontine\Validation\Meeting\TargetValidator;
55
use Siak\Tontine\Validation\Planning\PoolValidator;
56
use Siak\Tontine\Validation\Planning\PoolRoundValidator;
57
use Siak\Tontine\Validation\Planning\RoundValidator;
58
use Siak\Tontine\Validation\Planning\SessionValidator;
59
use Siak\Tontine\Validation\Tontine\ChargeValidator;
60
use Siak\Tontine\Validation\Tontine\GuestAccessValidator;
61
use Siak\Tontine\Validation\Tontine\GuestInviteValidator;
62
use Siak\Tontine\Validation\Tontine\MemberValidator;
63
use Siak\Tontine\Validation\Tontine\OptionsValidator;
64
use Siak\Tontine\Validation\Tontine\TontineValidator;
65
use Sqids\Sqids;
66
use Sqids\SqidsInterface;
67
68
use function base_path;
69
use function config;
70
71
class SiakServiceProvider extends ServiceProvider
72
{
73
    /**
74
     * Bootstrap any application services.
75
     *
76
     * @return void
77
     */
78
    public function boot()
79
    {
80
        // Log database queries
81
        // DB::listen(function($query) {
82
        //     Log::info($query->sql, $query->bindings, $query->time);
83
        // });
84
    }
85
86
    /**
87
     * Register any application services
88
     *
89
     * @return void
90
     */
91
    public function register()
92
    {
93
        $this->app->singleton(LocaleService::class, function($app) {
94
            $vendorDir = base_path('vendor');
95
            // Read country list from the umpirsky/country-list package data.
96
            $countriesDataDir = $vendorDir . '/umpirsky/country-list/data';
97
            // Read currency list from the umpirsky/currency-list package data.
98
            $currenciesDataDir = $vendorDir . '/umpirsky/currency-list/data';
99
            $localization = $app->make(LaravelLocalization::class);
100
            return new LocaleService($localization, $countriesDataDir, $currenciesDataDir);
101
        });
102
        $this->app->singleton(SqidsInterface::class, function() {
103
            return new Sqids(minLength: 8);
104
        });
105
106
        $this->app->singleton(FundService::class, FundService::class);
107
        $this->app->singleton(ChargeService::class, ChargeService::class);
108
        $this->app->singleton(CategoryService::class, CategoryService::class);
109
        $this->app->singleton(FixedFeeService::class, FixedFeeService::class);
110
        $this->app->singleton(LibreFeeService::class, LibreFeeService::class);
111
        $this->app->singleton(BillService::class, BillService::class);
112
        $this->app->singleton(SettlementService::class, SettlementService::class);
113
        $this->app->singleton(SettlementTargetService::class, SettlementTargetService::class);
114
115
        $this->app->singleton(SavingService::class, SavingService::class);
116
        $this->app->singleton(DebtCalculator::class, DebtCalculator::class);
117
        $this->app->singleton(LoanService::class, LoanService::class);
118
        $this->app->singleton(AuctionService::class, AuctionService::class);
119
        $this->app->singleton(DepositService::class, DepositService::class);
120
        $this->app->singleton(BalanceCalculator::class, BalanceCalculator::class);
121
        $this->app->singleton(DisbursementService::class, DisbursementService::class);
122
        $this->app->singleton(MeetingPoolService::class, MeetingPoolService::class);
123
        $this->app->singleton(RefundService::class, RefundService::class);
124
        $this->app->singleton(ProfitService::class, ProfitService::class);
125
        $this->app->singleton(RemitmentService::class, RemitmentService::class);
126
        $this->app->singleton(MeetingSummaryService::class, MeetingSummaryService::class);
127
        $this->app->singleton(MeetingSessionService::class, MeetingSessionService::class);
128
        $this->app->singleton(PresenceService::class, PresenceService::class);
129
        $this->app->singleton(MemberReportService::class, MemberReportService::class);
130
        $this->app->singleton(RoundReportService::class, RoundReportService::class);
131
        $this->app->singleton(SessionReportService::class, SessionReportService::class);
132
        $this->app->singleton(ReportService::class, ReportService::class);
133
        $this->app->singleton(PrinterService::class, PrinterService::class);
134
        $this->app->when(PrinterService::class)
135
            ->needs('$config')
136
            ->give(config('chrome.page'));
137
138
        $this->app->singleton(RoundService::class, RoundService::class);
139
        $this->app->singleton(PlanningSessionService::class, PlanningSessionService::class);
140
        $this->app->singleton(SubscriptionService::class, SubscriptionService::class);
141
        $this->app->singleton(PlanningSummaryService::class, PlanningSummaryService::class);
142
143
        $this->app->singleton(TenantService::class, TenantService::class);
144
        $this->app->singleton(TontinePoolService::class, TontinePoolService::class);
145
        $this->app->singleton(GuestService::class, GuestService::class);
146
        $this->app->singleton(MemberService::class, MemberService::class);
147
        $this->app->singleton(TontineService::class, TontineService::class);
148
        $this->app->singleton(PaymentServiceInterface::class, function() {
149
            return new class implements PaymentServiceInterface {
150
                // By default, all the payment items are editable.
151
                public function isEditable(Model $item): bool
152
                {
153
                    return true;
154
                }
155
            };
156
        });
157
158
        $this->app->singleton(ChargeValidator::class, ChargeValidator::class);
159
        $this->app->singleton(DebtValidator::class, DebtValidator::class);
160
        $this->app->singleton(SavingValidator::class, SavingValidator::class);
161
        $this->app->singleton(ClosingValidator::class, ClosingValidator::class);
162
        $this->app->singleton(DisbursementValidator::class, DisbursementValidator::class);
163
        $this->app->singleton(LoanValidator::class, LoanValidator::class);
164
        $this->app->singleton(MemberValidator::class, MemberValidator::class);
165
        $this->app->singleton(RoundValidator::class, RoundValidator::class);
166
        $this->app->singleton(PoolValidator::class, PoolValidator::class);
167
        $this->app->singleton(PoolRoundValidator::class, PoolRoundValidator::class);
168
        $this->app->singleton(RemitmentValidator::class, RemitmentValidator::class);
169
        $this->app->singleton(SessionValidator::class, SessionValidator::class);
170
        $this->app->singleton(OptionsValidator::class, OptionsValidator::class);
171
        $this->app->singleton(TontineValidator::class, TontineValidator::class);
172
        $this->app->singleton(TargetValidator::class, TargetValidator::class);
173
        $this->app->singleton(GuestAccessValidator::class, GuestAccessValidator::class);
174
        $this->app->singleton(GuestInviteValidator::class, GuestInviteValidator::class);
175
    }
176
}
177