This commit is contained in:
Simon Pocrnjič
2025-12-26 22:39:58 +01:00
parent f8623a6071
commit dea7432deb
55 changed files with 7977 additions and 1983 deletions
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('import_entities', function (Blueprint $table) {
$table->string('handler_class')->nullable()->after('meta');
$table->json('validation_rules')->nullable()->after('handler_class');
$table->json('processing_options')->nullable()->after('validation_rules');
$table->boolean('is_active')->default(true)->after('processing_options');
$table->integer('priority')->default(0)->after('is_active');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('import_entities', function (Blueprint $table) {
$table->dropColumn(['handler_class', 'validation_rules', 'processing_options', 'is_active', 'priority']);
});
}
};
@@ -0,0 +1,87 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
public function up(): void
{
DB::unprepared('
CREATE OR REPLACE FUNCTION delete_client_case_cascade(case_id INTEGER)
RETURNS TABLE(deleted_table TEXT, deleted_count INTEGER) AS $$
DECLARE
v_deleted_count INTEGER;
BEGIN
-- Delete bookings related to payments in this case
WITH deleted AS (
DELETE FROM bookings
WHERE payment_id IN (
SELECT p.id FROM payments p
INNER JOIN accounts a ON p.account_id = a.id
INNER JOIN contracts c ON a.contract_id = c.id
WHERE c.client_case_id = case_id
)
RETURNING *
)
SELECT COUNT(*) INTO v_deleted_count FROM deleted;
RETURN QUERY SELECT \'bookings\'::TEXT, v_deleted_count;
-- Delete payments related to accounts in this case
WITH deleted AS (
DELETE FROM payments
WHERE account_id IN (
SELECT a.id FROM accounts a
INNER JOIN contracts c ON a.contract_id = c.id
WHERE c.client_case_id = case_id
)
RETURNING *
)
SELECT COUNT(*) INTO v_deleted_count FROM deleted;
RETURN QUERY SELECT \'payments\'::TEXT, v_deleted_count;
-- Delete activities
WITH deleted AS (
DELETE FROM activities WHERE client_case_id = case_id
RETURNING *
)
SELECT COUNT(*) INTO v_deleted_count FROM deleted;
RETURN QUERY SELECT \'activities\'::TEXT, v_deleted_count;
-- Delete accounts
WITH deleted AS (
DELETE FROM accounts
WHERE contract_id IN (
SELECT id FROM contracts WHERE client_case_id = case_id
)
RETURNING *
)
SELECT COUNT(*) INTO v_deleted_count FROM deleted;
RETURN QUERY SELECT \'accounts\'::TEXT, v_deleted_count;
-- Delete contracts
WITH deleted AS (
DELETE FROM contracts WHERE client_case_id = case_id
RETURNING *
)
SELECT COUNT(*) INTO v_deleted_count FROM deleted;
RETURN QUERY SELECT \'contracts\'::TEXT, v_deleted_count;
-- Delete the client_case itself
WITH deleted AS (
DELETE FROM client_cases WHERE id = case_id
RETURNING *
)
SELECT COUNT(*) INTO v_deleted_count FROM deleted;
RETURN QUERY SELECT \'client_cases\'::TEXT, v_deleted_count;
END;
$$ LANGUAGE plpgsql;
');
}
public function down(): void
{
DB::unprepared('DROP FUNCTION IF EXISTS delete_client_case_cascade(INTEGER);');
}
};