1
0

refactor(bookmarks): remove factory chain, interfaces, and duplicated sort logic

Remove BookmarkRepositoryFactory, BookmarkServicesFactory, and all 3
repository interfaces — single-consumer abstractions with no
polymorphism. Simplify container registrar to wire directly. Extract
duplicated updateSortOrders() (60 identical lines in two repos) into
SortOrderTrait. Consolidate icon labels from template into
BookmarkService::allowedGroupIconLabels() single source of truth.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-26 12:10:05 +01:00
parent e746a2e874
commit 8f6c9951c1
13 changed files with 146 additions and 298 deletions

View File

@@ -6,8 +6,15 @@ use MintyPHP\DB;
use MintyPHP\Repository\Support\RepoQuery;
use MintyPHP\Repository\Support\RepositoryArrayHelper;
class BookmarkGroupRepository implements BookmarkGroupRepositoryInterface
class BookmarkGroupRepository
{
use SortOrderTrait;
protected function sortOrderTableName(): string
{
return 'user_bookmark_groups';
}
private function unwrapList(mixed $rows): array
{
return RepositoryArrayHelper::unwrapList($rows, 'user_bookmark_groups');
@@ -125,66 +132,4 @@ class BookmarkGroupRepository implements BookmarkGroupRepositoryInterface
return $deleted !== false && (int) $deleted > 0;
}
public function updateSortOrders(int $userId, array $idOrderPairs): bool
{
if ($userId <= 0 || $idOrderPairs === []) {
return false;
}
$idList = [];
foreach ($idOrderPairs as $pair) {
$id = (int) $pair['id'];
if ($id <= 0) {
return false;
}
$idList[] = $id;
}
$idList = array_values(array_unique($idList));
$existingCount = DB::selectValue(
'select count(*) from user_bookmark_groups where user_id = ? and id in (???)',
(string) $userId,
array_map('strval', $idList)
);
if ((int) $existingCount !== count($idList)) {
return false;
}
$db = DB::handle();
try {
$db->begin_transaction();
foreach ($idOrderPairs as $pair) {
$id = (int) $pair['id'];
$sortOrder = (int) $pair['sort_order'];
if ($id <= 0 || $sortOrder <= 0) {
$db->rollback();
return false;
}
$updated = DB::update(
'update user_bookmark_groups set sort_order = ? where id = ? and user_id = ?',
(string) $sortOrder,
(string) $id,
(string) $userId
);
if ($updated === false) {
$db->rollback();
return false;
}
}
$db->commit();
return true;
} catch (\Throwable) {
try {
$db->rollback();
} catch (\Throwable) {
// no-op
}
return false;
}
}
}