fix:improve import performance

This commit is contained in:
hackerESQ
2024-10-28 20:31:29 -05:00
parent be859ad859
commit 03dda7b947
3 changed files with 14 additions and 14 deletions
+2 -2
View File
@@ -52,8 +52,8 @@ class BackupImport implements WithMultipleSheets, WithEvents
fn() => Artisan::call(SyncHoldingData::class, ['--user' => $this->backupImportModel->user_id]), fn() => Artisan::call(SyncHoldingData::class, ['--user' => $this->backupImportModel->user_id]),
fn() => User::find($this->backupImportModel->user_id)->portfolios->each(function($portfolio) { fn() => User::find($this->backupImportModel->user_id)->portfolios->each(function($portfolio) {
Artisan::queue(SyncDailyChange::class, ['portfolio_id' => $portfolio->id]); Artisan::queue(SyncDailyChange::class, ['portfolio_id' => $portfolio->id]);
}) })
]); ]);
}, },
ImportFailed::class => fn(ImportFailed $event) => $this->backupImportModel->update([ ImportFailed::class => fn(ImportFailed $event) => $this->backupImportModel->update([
+1 -1
View File
@@ -79,7 +79,7 @@ class DailyChangesSheet implements ToCollection, WithHeadingRow, WithValidation,
public function batchSize(): int public function batchSize(): int
{ {
return 750; return 1000;
} }
public function rules(): array public function rules(): array
+11 -11
View File
@@ -4,7 +4,6 @@ namespace App\Imports\Sheets;
use App\Imports\ValidatesPortfolioAccess; use App\Imports\ValidatesPortfolioAccess;
use App\Models\Holding; use App\Models\Holding;
use App\Models\Portfolio;
use App\Models\Transaction; use App\Models\Transaction;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use App\Models\BackupImport; use App\Models\BackupImport;
@@ -85,16 +84,17 @@ class TransactionsSheet implements ToCollection, WithHeadingRow, WithValidation,
); );
// stub out related holdings // stub out related holdings
$chunk->unique('symbol')->each(function($holding) { $chunk->unique(fn($item) => $item['symbol'] . $item['portfolio_id'])
->each(function($holding) {
Holding::firstOrCreate([
'symbol' => $holding['symbol'], Holding::firstOrCreate([
'portfolio_id' => $holding['portfolio_id'] 'symbol' => $holding['symbol'],
], [ 'portfolio_id' => $holding['portfolio_id']
'quantity' => 0, ], [
'average_cost_basis' => 0, 'quantity' => 0,
]); 'average_cost_basis' => 0,
}); ]);
});
}); });
} }