|
4 | 4 |
|
5 | 5 | namespace Buddy\Repman\Query\User\PackageQuery;
|
6 | 6 |
|
7 |
| -use Buddy\Repman\Entity\Organization\Package\Link; |
8 | 7 | use Buddy\Repman\Entity\Organization\Package\Version as VersionEntity;
|
9 | 8 | use Buddy\Repman\Query\Filter as BaseFilter;
|
10 | 9 | use Buddy\Repman\Query\User\Model\Installs;
|
11 | 10 | use Buddy\Repman\Query\User\Model\Package;
|
| 11 | +use Buddy\Repman\Query\User\Model\Package\Link; |
12 | 12 | use Buddy\Repman\Query\User\Model\PackageDetails;
|
13 | 13 | use Buddy\Repman\Query\User\Model\PackageName;
|
14 | 14 | use Buddy\Repman\Query\User\Model\ScanResult;
|
|
17 | 17 | use Buddy\Repman\Query\User\PackageQuery;
|
18 | 18 | use Doctrine\DBAL\Connection;
|
19 | 19 | use Munus\Control\Option;
|
20 |
| -use Ramsey\Uuid\Uuid; |
21 | 20 |
|
22 | 21 | final class DbalPackageQuery implements PackageQuery
|
23 | 22 | {
|
@@ -219,44 +218,43 @@ public function versionCount(string $packageId): int
|
219 | 218 | public function getDependantCount(string $packageName, string $organizationId): int
|
220 | 219 | {
|
221 | 220 | return (int) $this->connection->fetchOne(
|
222 |
| - 'SELECT |
223 |
| - COUNT(DISTINCT package_id) |
224 |
| - FROM organization_package_link |
225 |
| - WHERE target = :package_name |
226 |
| - AND organization_id = :organization_id', [ |
| 221 | + 'SELECT COUNT (DISTINCT l.package_id) |
| 222 | + FROM organization_package_link l |
| 223 | + JOIN organization_package p ON p.id = l.package_id |
| 224 | + WHERE l.target = :package_name |
| 225 | + AND p.organization_id = :organization_id', [ |
227 | 226 | ':package_name' => $packageName,
|
228 | 227 | ':organization_id' => $organizationId,
|
229 | 228 | ]);
|
230 | 229 | }
|
231 | 230 |
|
232 | 231 | /**
|
233 |
| - * @return Link[] |
| 232 | + * @return array<string,Link[]> |
234 | 233 | */
|
235 | 234 | public function getLinks(string $packageId, string $organizationId): array
|
236 | 235 | {
|
237 |
| - return array_map(function (array $data): Link { |
238 |
| - return new Link( |
239 |
| - Uuid::fromString($data['id']), |
240 |
| - $data['type'], |
241 |
| - $data['target'], |
242 |
| - $data['constraint'], |
243 |
| - $data['package_id'], |
244 |
| - $data['target_package_id'] |
245 |
| - ); |
246 |
| - }, $this->connection->fetchAllAssociative( |
| 236 | + $links = []; |
| 237 | + foreach ($this->connection->fetchAllAssociative( |
247 | 238 | 'SELECT
|
248 |
| - l.id, |
249 | 239 | l.type,
|
250 | 240 | l.target,
|
251 | 241 | l.constraint,
|
252 |
| - l.package_id, |
253 | 242 | p.id as target_package_id
|
254 | 243 | FROM organization_package_link l
|
255 | 244 | LEFT JOIN organization_package p ON (p.name = l.target AND p.organization_id = :organization_id)
|
256 | 245 | WHERE package_id = :package_id', [
|
257 |
| - ':organization_id' => $organizationId, |
258 |
| - ':package_id' => $packageId, |
259 |
| - ])); |
| 246 | + ':organization_id' => $organizationId, |
| 247 | + ':package_id' => $packageId, |
| 248 | + ]) as $data) { |
| 249 | + $links[(string) $data['type']][] = new Link( |
| 250 | + $data['type'], |
| 251 | + $data['target'], |
| 252 | + $data['constraint'], |
| 253 | + $data['target_package_id'] |
| 254 | + ); |
| 255 | + } |
| 256 | + |
| 257 | + return $links; |
260 | 258 | }
|
261 | 259 |
|
262 | 260 | /**
|
|
0 commit comments