fix: db seeds

This commit is contained in:
2026-01-18 00:52:12 +02:00
parent 51c49c32da
commit 03c2a6162b
2 changed files with 48 additions and 25 deletions

View File

@@ -11,22 +11,17 @@ use Closure;
use OCP\DB\ISchemaWrapper;
use OCP\Migration\IOutput;
use OCP\Migration\SimpleMigrationStep;
use Psr\Log\LoggerInterface;
/**
* Version 16 Migration:
* - Remove unique constraint on role_type column to allow multiple custom roles
* - Re-run seeding to ensure all required data exists
*
* The unique constraint was incorrectly added in Version15, which prevented
* creating more than one custom role (since all custom roles have role_type='custom').
*
* Seeding is handled in Version17.
*/
class Version16Date20260117000000 extends SimpleMigrationStep {
public function __construct(
private LoggerInterface $logger,
) {
}
/**
* @param IOutput $output
* @param Closure(): ISchemaWrapper $schemaClosure
@@ -51,22 +46,4 @@ class Version16Date20260117000000 extends SimpleMigrationStep {
return null;
}
/**
* @param IOutput $output
* @param Closure(): ISchemaWrapper $schemaClosure
* @param array $options
*/
public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void {
// Re-run seeding to ensure all required data exists
// Pass throwOnError=false to avoid PostgreSQL transaction abort issues
// If seeding fails, users can run "occ forum:repair-seeds" to retry
try {
SeedHelper::seedAll($output, false);
} catch (\Exception $e) {
// This should not happen with throwOnError=false, but handle it gracefully
$this->logger->error('Forum migration: Seeding failed unexpectedly', ['exception' => $e->getMessage()]);
$output->warning('Forum: Seeding failed. Run "occ forum:repair-seeds" after enabling the app to complete setup.');
}
}
}

View File

@@ -0,0 +1,46 @@
<?php
declare(strict_types=1);
// SPDX-FileCopyrightText: Chen Asraf <contact@casraf.dev>
// SPDX-License-Identifier: AGPL-3.0-or-later
namespace OCA\Forum\Migration;
use Closure;
use OCP\DB\ISchemaWrapper;
use OCP\Migration\IOutput;
use OCP\Migration\SimpleMigrationStep;
use Psr\Log\LoggerInterface;
/**
* Version 17 Migration:
* - Re-run seeding to ensure all required data exists
*
* Seeding is run after Version16 removes the incorrect unique constraint on role_type,
* ensuring multiple custom roles can be created properly.
*/
class Version17Date20260118000000 extends SimpleMigrationStep {
public function __construct(
private LoggerInterface $logger,
) {
}
/**
* @param IOutput $output
* @param Closure(): ISchemaWrapper $schemaClosure
* @param array $options
*/
public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void {
// Re-run seeding to ensure all required data exists
// Pass throwOnError=false to avoid PostgreSQL transaction abort issues
// If seeding fails, users can run "occ forum:repair-seeds" to retry
try {
SeedHelper::seedAll($output, false);
} catch (\Exception $e) {
// This should not happen with throwOnError=false, but handle it gracefully
$this->logger->error('Forum migration: Seeding failed unexpectedly', ['exception' => $e->getMessage()]);
$output->warning('Forum: Seeding failed. Run "occ forum:repair-seeds" after enabling the app to complete setup.');
}
}
}