Skip to content

Commit f325a93

Browse files
authored
Remove sharding references (#558)
* Replace Sharding references with Tenant * Refactor meter association logic in transaction services * Update documentation to clarify multitenancy approach in Micropower Manager * Rename Tenant namespace to TenantResolver
1 parent 66c7c31 commit f325a93

18 files changed

+41
-34
lines changed

docs/development/multitenancy.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@ order: 4
88
> MPM's multitenancy feature was sometimes called **sharding** (and the corresponding databases **shards**).
99
> We are moving away from this notion in favour of **multitenancy** and **tenants**.
1010
11-
## Sharding in Micropower Manager
11+
## Multitenancy in Micropower Manager
1212

13-
Sharding is a technique employed to partition a large database into smaller, more agile, and easily manageable segments
14-
known as data shards. In the context of Micropower Manager, sharding is integral to the implementation of Software as a
15-
Service (SaaS) functionality.
13+
Multitenancy in Micropower Manager is implemented using a database-per-tenant approach, where each tenant has a dedicated database. This ensures data isolation, enhances security, and allows for more flexible scaling. By storing each tenant's data in a separate database, Micropower Manager enables efficient management of Software as a Service (SaaS) functionality while maintaining performance and customization per tenant.
1614

1715
### Tenant Representation
1816

src/backend/app/Console/Commands/AbstractSharedCommand.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ protected function execute(InputInterface $input, OutputInterface $output) {
4040
if ($companyId) {
4141
$this->runForCompany($databaseProxyManagerService, (int) $companyId, $input, $output);
4242
} else {
43-
$this->runForAllShards($databaseProxyManagerService, $input, $output);
43+
$this->runForAllTenants($databaseProxyManagerService, $input, $output);
4444
}
4545

4646
return $this->EXECUTION_TYPE;
4747
}
4848

49-
private function runForAllShards(
49+
private function runForAllTenants(
5050
DatabaseProxyManagerService $databaseProxyManagerService,
5151
InputInterface $input,
5252
OutputInterface $output,

src/backend/app/Http/Middleware/UserDefaultDatabaseConnectionMiddleware.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
use Illuminate\Support\Facades\Log;
1111
use Illuminate\Support\Str;
1212
use MPM\DatabaseProxy\DatabaseProxyManagerService;
13-
use MPM\Sharding\ApiCompanyResolverService;
14-
use MPM\Sharding\ApiResolvers\Data\ApiResolverMap;
13+
use MPM\TenantResolver\ApiCompanyResolverService;
14+
use MPM\TenantResolver\ApiResolvers\Data\ApiResolverMap;
1515

1616
/**
1717
* The goal is to have the database connection on each incomming http request.

src/backend/app/Misc/TransactionDataContainer.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ public static function initialize(Transaction $transaction): TransactionDataCont
3939
$container->amount = $transaction->amount;
4040
$container->rawAmount = $transaction->amount;
4141

42-
$container->meter = $transaction->meter()->first();
42+
$meter = Meter::where('serial_number', $transaction->message)->first();
43+
$container->meter = $meter;
4344

4445
try {
4546
$container->device = $deviceService->getBySerialNumber($transaction->message);

src/backend/app/modules/Sharding/ApiCompanyResolverService.php src/backend/app/modules/TenantResolver/ApiCompanyResolverService.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
declare(strict_types=1);
44

5-
namespace MPM\Sharding;
5+
namespace MPM\TenantResolver;
66

77
use App\Exceptions\ValidationException;
88
use Illuminate\Http\Request;
99
use Illuminate\Support\Str;
10-
use MPM\Sharding\ApiResolvers\ApiResolverInterface;
11-
use MPM\Sharding\ApiResolvers\Data\ApiResolverMap;
10+
use MPM\TenantResolver\ApiResolvers\ApiResolverInterface;
11+
use MPM\TenantResolver\ApiResolvers\Data\ApiResolverMap;
1212

1313
class ApiCompanyResolverService {
1414
public function __construct(private ApiResolverMap $apiResolverMap) {}

src/backend/app/modules/Sharding/ApiResolvers/AfricasTalkingApiResolver.php src/backend/app/modules/TenantResolver/ApiResolvers/AfricasTalkingApiResolver.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace MPM\Sharding\ApiResolvers;
5+
namespace MPM\TenantResolver\ApiResolvers;
66

77
use App\Exceptions\ValidationException;
88
use Illuminate\Http\Request;

src/backend/app/modules/Sharding/ApiResolvers/AndroidGatewayCallbackApiResolver.php src/backend/app/modules/TenantResolver/ApiResolvers/AndroidGatewayCallbackApiResolver.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace MPM\Sharding\ApiResolvers;
3+
namespace MPM\TenantResolver\ApiResolvers;
44

55
use App\Exceptions\ValidationException;
66
use Illuminate\Http\Request;

src/backend/app/modules/Sharding/ApiResolvers/ApiResolverInterface.php src/backend/app/modules/TenantResolver/ApiResolvers/ApiResolverInterface.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace MPM\Sharding\ApiResolvers;
3+
namespace MPM\TenantResolver\ApiResolvers;
44

55
use Illuminate\Http\Request;
66

src/backend/app/modules/Sharding/ApiResolvers/Data/ApiResolverMap.php src/backend/app/modules/TenantResolver/ApiResolvers/Data/ApiResolverMap.php

+10-10
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
declare(strict_types=1);
44

5-
namespace MPM\Sharding\ApiResolvers\Data;
6-
7-
use MPM\Sharding\ApiResolvers\AfricasTalkingApiResolver;
8-
use MPM\Sharding\ApiResolvers\AndroidGatewayCallbackApiResolver;
9-
use MPM\Sharding\ApiResolvers\DataExportResolver;
10-
use MPM\Sharding\ApiResolvers\DownloadingReportsResolver;
11-
use MPM\Sharding\ApiResolvers\SwiftaPaymentApiResolver;
12-
use MPM\Sharding\ApiResolvers\TestApiResolver;
13-
use MPM\Sharding\ApiResolvers\ViberMessagingApiResolver;
14-
use MPM\Sharding\ApiResolvers\WaveMoneyApiResolver;
5+
namespace MPM\TenantResolver\ApiResolvers\Data;
6+
7+
use MPM\TenantResolver\ApiResolvers\AfricasTalkingApiResolver;
8+
use MPM\TenantResolver\ApiResolvers\AndroidGatewayCallbackApiResolver;
9+
use MPM\TenantResolver\ApiResolvers\DataExportResolver;
10+
use MPM\TenantResolver\ApiResolvers\DownloadingReportsResolver;
11+
use MPM\TenantResolver\ApiResolvers\SwiftaPaymentApiResolver;
12+
use MPM\TenantResolver\ApiResolvers\TestApiResolver;
13+
use MPM\TenantResolver\ApiResolvers\ViberMessagingApiResolver;
14+
use MPM\TenantResolver\ApiResolvers\WaveMoneyApiResolver;
1515

1616
class ApiResolverMap {
1717
public const VIBER_API = 'api/viber-messaging/webhook';

src/backend/app/modules/Sharding/ApiResolvers/DataExportResolver.php src/backend/app/modules/TenantResolver/ApiResolvers/DataExportResolver.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace MPM\Sharding\ApiResolvers;
3+
namespace MPM\TenantResolver\ApiResolvers;
44

55
use App\Exceptions\ValidationException;
66
use Illuminate\Http\Request;

src/backend/app/modules/Sharding/ApiResolvers/DownloadingReportsResolver.php src/backend/app/modules/TenantResolver/ApiResolvers/DownloadingReportsResolver.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace MPM\Sharding\ApiResolvers;
3+
namespace MPM\TenantResolver\ApiResolvers;
44

55
use App\Exceptions\ValidationException;
66
use Illuminate\Http\Request;

src/backend/app/modules/Sharding/ApiResolvers/JetsonApiResolver.php src/backend/app/modules/TenantResolver/ApiResolvers/JetsonApiResolver.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace MPM\Sharding\ApiResolvers;
3+
namespace MPM\TenantResolver\ApiResolvers;
44

55
use App\Exceptions\ValidationException;
66
use Illuminate\Http\Request;

src/backend/app/modules/Sharding/ApiResolvers/SwiftaPaymentApiResolver.php src/backend/app/modules/TenantResolver/ApiResolvers/SwiftaPaymentApiResolver.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace MPM\Sharding\ApiResolvers;
3+
namespace MPM\TenantResolver\ApiResolvers;
44

55
use Illuminate\Http\Request;
66

src/backend/app/modules/Sharding/ApiResolvers/TestApiResolver.php src/backend/app/modules/TenantResolver/ApiResolvers/TestApiResolver.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace MPM\Sharding\ApiResolvers;
5+
namespace MPM\TenantResolver\ApiResolvers;
66

77
use App\Exceptions\ValidationException;
88
use Illuminate\Http\Request;

src/backend/app/modules/Sharding/ApiResolvers/ViberMessagingApiResolver.php src/backend/app/modules/TenantResolver/ApiResolvers/ViberMessagingApiResolver.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace MPM\Sharding\ApiResolvers;
5+
namespace MPM\TenantResolver\ApiResolvers;
66

77
use App\Exceptions\ValidationException;
88
use Illuminate\Http\Request;

src/backend/app/modules/Sharding/ApiResolvers/WaveMoneyApiResolver.php src/backend/app/modules/TenantResolver/ApiResolvers/WaveMoneyApiResolver.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace MPM\Sharding\ApiResolvers;
3+
namespace MPM\TenantResolver\ApiResolvers;
44

55
use App\Exceptions\ValidationException;
66
use Illuminate\Http\Request;

src/backend/packages/inensus/spark-meter/src/Services/TransactionService.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Inensus\SparkMeter\Services;
44

5+
use App\Models\Meter\Meter;
56
use App\Models\Meter\MeterToken;
67
use App\Models\Transaction\ThirdPartyTransaction;
78
use App\Models\Transaction\Transaction;
@@ -381,7 +382,10 @@ private function createToken($sparkTariff, $mainTransaction, $transaction, $spar
381382
'load' => $chargedEnergy,
382383
]);
383384
$token->transaction()->associate($mainTransaction);
384-
$token->meter()->associate($meterParameter->meter);
385+
$meter = Meter::where('serial_number', $mainTransaction->message)->first();
386+
if ($meter) {
387+
$token->meter()->associate($meter);
388+
}
385389
$token->save();
386390

387391
return $token;

src/backend/packages/inensus/steama-meter/src/Services/SteamaTransactionsService.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Inensus\SteamaMeter\Services;
44

5+
use App\Models\Meter\Meter;
56
use App\Models\Meter\MeterToken;
67
use App\Models\Transaction\ThirdPartyTransaction;
78
use App\Models\Transaction\Transaction;
@@ -237,7 +238,10 @@ private function createToken($steamaMeter, $mainTransaction, $transaction) {
237238
]);
238239

239240
$token->transaction()->associate($mainTransaction);
240-
$token->meter()->associate($mainTransaction->meter);
241+
$meter = Meter::where('serial_number', $mainTransaction->message)->first();
242+
if ($meter) {
243+
$token->meter()->associate($meter);
244+
}
241245
$token->save();
242246

243247
return $token;

0 commit comments

Comments
 (0)