| Total Complexity | 23 | 
| Total Lines | 374 | 
| Duplicated Lines | 0 % | 
| Coverage | 0% | 
| Changes | 0 | ||
| 1 | <?php  | 
            ||
| 22 | final class PlanetFieldRepository extends EntityRepository implements PlanetFieldRepositoryInterface  | 
            ||
| 23 | { | 
            ||
| 24 | public function prototype(): PlanetFieldInterface  | 
            ||
| 25 |     { | 
            ||
| 26 | return new PlanetField();  | 
            ||
| 27 | }  | 
            ||
| 28 | |||
| 29 | public function save(PlanetFieldInterface $planetField): void  | 
            ||
| 34 | }  | 
            ||
| 35 | |||
| 36 | public function delete(PlanetFieldInterface $planetField): void  | 
            ||
| 42 | }  | 
            ||
| 43 | |||
| 44 | public function getByColonyAndFieldId(int $colonyId, int $fieldId): ?PlanetFieldInterface  | 
            ||
| 49 | ]);  | 
            ||
| 50 | }  | 
            ||
| 51 | |||
| 52 | public function getByColonyAndFieldIndex(int $colonyId, int $fieldIndex): ?PlanetFieldInterface  | 
            ||
| 53 |     { | 
            ||
| 54 | return $this->findOneBy([  | 
            ||
| 55 | 'colonies_id' => $colonyId,  | 
            ||
| 56 | 'field_id' => $fieldIndex  | 
            ||
| 57 | ]);  | 
            ||
| 58 | }  | 
            ||
| 59 | |||
| 60 | public function getByColonyAndType(int $colonyId, int $planetFieldTypeId): array  | 
            ||
| 61 |     { | 
            ||
| 62 | return $this->findBy([  | 
            ||
| 63 | 'colonies_id' => $colonyId,  | 
            ||
| 64 | 'type_id' => $planetFieldTypeId,  | 
            ||
| 65 | ]);  | 
            ||
| 66 | }  | 
            ||
| 67 | |||
| 68 | public function getEnergyConsumingByHost(  | 
            ||
| 69 | PlanetFieldHostInterface $host,  | 
            ||
| 70 | array $state = [0, 1],  | 
            ||
| 71 | ?int $limit = null,  | 
            ||
| 72 | array $excludedFields = [-1]  | 
            ||
| 73 |     ): array { | 
            ||
| 74 | return $this->getEntityManager()->createQuery(  | 
            ||
| 
                                                                                                    
                         1 ignored issue 
                            –
                            show
                         | 
                |||
| 75 | sprintf(  | 
            ||
| 76 | 'SELECT f FROM %s f  | 
            ||
| 77 | WHERE f.%s = :hostId  | 
            ||
| 78 | AND f.aktiv IN (:state)  | 
            ||
| 79 | AND f.field_id NOT IN (:excluded)  | 
            ||
| 80 | AND f.buildings_id IN (  | 
            ||
| 81 | SELECT b.id FROM %s b WHERE b.eps_proc < 0  | 
            ||
| 82 | )',  | 
            ||
| 83 | PlanetField::class,  | 
            ||
| 84 | $host->getPlanetFieldHostColumnIdentifier(),  | 
            ||
| 85 | Building::class  | 
            ||
| 86 | )  | 
            ||
| 87 | )->setParameters([  | 
            ||
| 88 | 'hostId' => $host->getId(),  | 
            ||
| 89 | 'state' => $state,  | 
            ||
| 90 | 'excluded' => $excludedFields  | 
            ||
| 91 | ])  | 
            ||
| 92 | ->setMaxResults($limit)  | 
            ||
| 93 | ->getResult();  | 
            ||
| 94 | }  | 
            ||
| 95 | |||
| 96 | public function getEnergyProducingByHost(PlanetFieldHostInterface $host): array  | 
            ||
| 111 | }  | 
            ||
| 112 | |||
| 113 | public function getHousingProvidingByHost(PlanetFieldHostInterface $host): array  | 
            ||
| 114 |     { | 
            ||
| 115 | return $this->getEntityManager()->createQuery(  | 
            ||
| 
                                                                                                    
                         1 ignored issue 
                            –
                            show
                         | 
                |||
| 116 | sprintf(  | 
            ||
| 117 | 'SELECT f FROM %s f  | 
            ||
| 118 | WHERE f.%s = :hostId AND f.buildings_id IN (  | 
            ||
| 119 | SELECT b.id FROM %s b WHERE b.bev_pro > 0  | 
            ||
| 120 | )',  | 
            ||
| 121 | PlanetField::class,  | 
            ||
| 122 | $host->getPlanetFieldHostColumnIdentifier(),  | 
            ||
| 123 | Building::class  | 
            ||
| 124 | )  | 
            ||
| 125 | )->setParameters([  | 
            ||
| 126 | 'hostId' => $host->getId()  | 
            ||
| 127 | ])->getResult();  | 
            ||
| 128 | }  | 
            ||
| 129 | |||
| 130 | public function getWorkerConsumingByHost(PlanetFieldHostInterface $host): array  | 
            ||
| 131 |     { | 
            ||
| 132 | return $this->getEntityManager()->createQuery(  | 
            ||
| 
                                                                                                    
                         1 ignored issue 
                            –
                            show
                         | 
                |||
| 133 | sprintf(  | 
            ||
| 134 | 'SELECT f FROM %s f  | 
            ||
| 135 | WHERE f.%s = :hostId AND f.buildings_id IN (  | 
            ||
| 136 | SELECT b.id FROM %s b WHERE b.bev_use > 0  | 
            ||
| 137 | )',  | 
            ||
| 138 | PlanetField::class,  | 
            ||
| 139 | $host->getPlanetFieldHostColumnIdentifier(),  | 
            ||
| 140 | Building::class  | 
            ||
| 141 | )  | 
            ||
| 142 | )->setParameters([  | 
            ||
| 143 | 'hostId' => $host->getId(),  | 
            ||
| 144 | ])->getResult();  | 
            ||
| 145 | }  | 
            ||
| 146 | |||
| 147 | public function getWorkerConsumingByColonyAndState(  | 
            ||
| 148 | int $colonyId,  | 
            ||
| 149 | array $state = [0, 1],  | 
            ||
| 150 | ?int $limit = null,  | 
            ||
| 151 | array $excludedFields = [-1]  | 
            ||
| 152 |     ): array { | 
            ||
| 153 | return $this->getEntityManager()->createQuery(  | 
            ||
| 
                                                                                                    
                         1 ignored issue 
                            –
                            show
                         | 
                |||
| 154 | sprintf(  | 
            ||
| 155 | 'SELECT f FROM %s f  | 
            ||
| 156 | WHERE f.colonies_id = :colonyId  | 
            ||
| 157 | AND f.aktiv IN (:state)  | 
            ||
| 158 | AND f.field_id NOT IN (:excluded)  | 
            ||
| 159 | AND f.buildings_id IN (  | 
            ||
| 160 | SELECT b.id FROM %s b WHERE b.bev_use > 0  | 
            ||
| 161 | )',  | 
            ||
| 162 | PlanetField::class,  | 
            ||
| 163 | Building::class  | 
            ||
| 164 | )  | 
            ||
| 165 | )->setParameters([  | 
            ||
| 166 | 'colonyId' => $colonyId,  | 
            ||
| 167 | 'state' => $state,  | 
            ||
| 168 | 'excluded' => $excludedFields  | 
            ||
| 169 | ])  | 
            ||
| 170 | ->setMaxResults($limit)  | 
            ||
| 171 | ->getResult();  | 
            ||
| 172 | }  | 
            ||
| 173 | |||
| 174 | public function getCommodityConsumingByHostAndCommodity(  | 
            ||
| 175 | PlanetFieldHostInterface $host,  | 
            ||
| 176 | int $commodityId,  | 
            ||
| 177 | array $state = [0, 1],  | 
            ||
| 178 | ?int $limit = null,  | 
            ||
| 179 | array $excludedFields = [-1]  | 
            ||
| 180 |     ): array { | 
            ||
| 181 | return $this->getEntityManager()->createQuery(  | 
            ||
| 
                                                                                                    
                         1 ignored issue 
                            –
                            show
                         | 
                |||
| 182 | sprintf(  | 
            ||
| 183 | 'SELECT f FROM %s f  | 
            ||
| 184 | WHERE f.%s = :hostId  | 
            ||
| 185 | AND f.field_id NOT IN (:excluded)  | 
            ||
| 186 | AND f.buildings_id IN (  | 
            ||
| 187 | SELECT bg.buildings_id FROM %s bg WHERE bg.commodity_id = :commodityId AND bg.count < 0  | 
            ||
| 188 | ) AND f.aktiv IN (:state)',  | 
            ||
| 189 | PlanetField::class,  | 
            ||
| 190 | $host->getPlanetFieldHostColumnIdentifier(),  | 
            ||
| 191 | BuildingCommodity::class  | 
            ||
| 192 | )  | 
            ||
| 193 | )->setParameters([  | 
            ||
| 194 | 'hostId' => $host->getId(),  | 
            ||
| 195 | 'commodityId' => $commodityId,  | 
            ||
| 196 | 'state' => $state,  | 
            ||
| 197 | 'excluded' => $excludedFields  | 
            ||
| 198 | ])  | 
            ||
| 199 | ->setMaxResults($limit)  | 
            ||
| 200 | ->getResult();  | 
            ||
| 201 | }  | 
            ||
| 202 | |||
| 203 | public function getCommodityProducingByHostAndCommodity(PlanetFieldHostInterface $host, int $commodityId): array  | 
            ||
| 204 |     { | 
            ||
| 205 | return $this->getEntityManager()->createQuery(  | 
            ||
| 
                                                                                                    
                         1 ignored issue 
                            –
                            show
                         | 
                |||
| 206 | sprintf(  | 
            ||
| 207 | 'SELECT f FROM %s f  | 
            ||
| 208 | WHERE f.%s = :hostId AND f.buildings_id IN (  | 
            ||
| 209 | SELECT bg.buildings_id FROM %s bg WHERE bg.commodity_id = :commodityId AND bg.count > 0  | 
            ||
| 210 | )',  | 
            ||
| 211 | PlanetField::class,  | 
            ||
| 212 | $host->getPlanetFieldHostColumnIdentifier(),  | 
            ||
| 213 | BuildingCommodity::class  | 
            ||
| 214 | )  | 
            ||
| 215 | )->setParameters([  | 
            ||
| 216 | 'hostId' => $host->getId(),  | 
            ||
| 217 | 'commodityId' => $commodityId,  | 
            ||
| 218 | ])->getResult();  | 
            ||
| 219 | }  | 
            ||
| 220 | |||
| 221 | public function getCountByHostAndBuilding(PlanetFieldHostInterface $host, int $buildingId): int  | 
            ||
| 222 |     { | 
            ||
| 223 | return $this->count([  | 
            ||
| 224 | $host->getPlanetFieldHostColumnIdentifier() => $host->getId(),  | 
            ||
| 225 | 'buildings_id' => $buildingId,  | 
            ||
| 226 | ]);  | 
            ||
| 227 | }  | 
            ||
| 228 | |||
| 229 | public function getCountByBuildingAndUser(int $buildingId, int $userId): int  | 
            ||
| 230 |     { | 
            ||
| 231 | return (int) $this->getEntityManager()->createQuery(  | 
            ||
| 232 | sprintf(  | 
            ||
| 233 | 'SELECT COUNT(f) FROM %s f WHERE f.buildings_id = :buildingId AND f.colonies_id IN (  | 
            ||
| 234 | SELECT c.id FROM %s c WHERE c.user_id = :userId  | 
            ||
| 235 | )',  | 
            ||
| 236 | PlanetField::class,  | 
            ||
| 237 | Colony::class  | 
            ||
| 238 | )  | 
            ||
| 239 | )->setParameters([  | 
            ||
| 240 | 'buildingId' => $buildingId,  | 
            ||
| 241 | 'userId' => $userId,  | 
            ||
| 242 | ])->getSingleScalarResult();  | 
            ||
| 243 | }  | 
            ||
| 244 | |||
| 245 | public function getCountByColonyAndBuildingFunctionAndState(  | 
            ||
| 246 | PlanetFieldHostInterface $host,  | 
            ||
| 247 | array $buildingFunctionIds,  | 
            ||
| 248 | array $state  | 
            ||
| 249 |     ): int { | 
            ||
| 250 | return (int) $this->getEntityManager()->createQuery(  | 
            ||
| 251 | sprintf(  | 
            ||
| 252 | 'SELECT COUNT(f) FROM %s f  | 
            ||
| 253 | WHERE f.%s = :host AND f.aktiv IN(:state) AND f.buildings_id IN (  | 
            ||
| 254 | SELECT bf.buildings_id FROM %s bf WHERE bf.function IN (:buildingFunctionIds)  | 
            ||
| 255 | )',  | 
            ||
| 256 | PlanetField::class,  | 
            ||
| 257 | $host->getPlanetFieldHostIdentifier(),  | 
            ||
| 258 | BuildingFunction::class  | 
            ||
| 259 | )  | 
            ||
| 260 | )->setParameters([  | 
            ||
| 261 | 'host' => $host,  | 
            ||
| 262 | 'buildingFunctionIds' => $buildingFunctionIds,  | 
            ||
| 263 | 'state' => $state,  | 
            ||
| 264 | ])->getSingleScalarResult();  | 
            ||
| 265 | }  | 
            ||
| 266 | |||
| 267 | public function getByColonyAndBuildingFunction(  | 
            ||
| 268 | int $colonyId,  | 
            ||
| 269 | array $buildingFunctionIds  | 
            ||
| 270 |     ): array { | 
            ||
| 271 | return $this->getEntityManager()  | 
            ||
| 
                                                                                                    
                         1 ignored issue 
                            –
                            show
                         | 
                |||
| 272 | ->createQuery(  | 
            ||
| 273 | sprintf(  | 
            ||
| 274 | 'SELECT f FROM %s f WHERE f.colonies_id = :colonyId AND f.buildings_id IN (  | 
            ||
| 275 | SELECT bf.buildings_id FROM %s bf WHERE bf.function IN (:buildingFunctionId)  | 
            ||
| 276 | )',  | 
            ||
| 277 | PlanetField::class,  | 
            ||
| 278 | BuildingFunction::class  | 
            ||
| 279 | )  | 
            ||
| 280 | )  | 
            ||
| 281 | ->setParameters([  | 
            ||
| 282 | 'colonyId' => $colonyId,  | 
            ||
| 283 | 'buildingFunctionId' => $buildingFunctionIds  | 
            ||
| 284 | ])  | 
            ||
| 285 | ->getResult();  | 
            ||
| 286 | }  | 
            ||
| 287 | |||
| 288 | public function getMaxShieldsOfColony(PlanetFieldHostInterface $host): int  | 
            ||
| 289 |     { | 
            ||
| 290 | $rsm = new ResultSetMapping();  | 
            ||
| 291 |         $rsm->addScalarResult('capacity', 'capacity'); | 
            ||
| 292 | |||
| 293 | return (int) $this->getEntityManager()->createNativeQuery(  | 
            ||
| 294 | sprintf(  | 
            ||
| 295 | 'SELECT COUNT(distinct f1.id) * :generatorCapacity + COUNT(distinct f2.id) * :batteryCapacity as capacity  | 
            ||
| 296 | FROM stu_colonies_fielddata f1  | 
            ||
| 297 | LEFT JOIN stu_colonies_fielddata f2  | 
            ||
| 298 | ON f1.colonies_id = f2.colonies_id  | 
            ||
| 299 | AND f2.aktiv = 1 AND f2.buildings_id IN (  | 
            ||
| 300 | SELECT bf2.buildings_id FROM stu_buildings_functions bf2 WHERE bf2.function = :shieldBattery  | 
            ||
| 301 | )  | 
            ||
| 302 | WHERE f1.%s = :hostId AND f1.aktiv = 1 AND f1.buildings_id IN (  | 
            ||
| 303 | SELECT bf1.buildings_id FROM stu_buildings_functions bf1 WHERE bf1.function = :shieldGenerator  | 
            ||
| 304 | )',  | 
            ||
| 305 | $host->getPlanetFieldHostColumnIdentifier()  | 
            ||
| 306 | ),  | 
            ||
| 307 | $rsm  | 
            ||
| 308 | )->setParameters([  | 
            ||
| 309 | 'hostId' => $host->getId(),  | 
            ||
| 310 | 'shieldGenerator' => BuildingEnum::BUILDING_FUNCTION_SHIELD_GENERATOR,  | 
            ||
| 311 | 'shieldBattery' => BuildingEnum::BUILDING_FUNCTION_SHIELD_BATTERY,  | 
            ||
| 312 | 'generatorCapacity' => BuildingEnum::SHIELD_GENERATOR_CAPACITY,  | 
            ||
| 313 | 'batteryCapacity' => BuildingEnum::SHIELD_BATTERY_CAPACITY  | 
            ||
| 314 | ])->getSingleScalarResult();  | 
            ||
| 315 | }  | 
            ||
| 316 | |||
| 317 | public function getInConstructionByUser(int $userId): array  | 
            ||
| 330 | }  | 
            ||
| 331 | |||
| 332 | public function getByConstructionFinish(int $finishTime): array  | 
            ||
| 342 | }  | 
            ||
| 343 | |||
| 344 | public function getByColonyWithBuilding(PlanetFieldHostInterface $host): array  | 
            ||
| 345 |     { | 
            ||
| 346 | return $this->getEntityManager()->createQuery(  | 
            ||
| 
                                                                                                    
                         1 ignored issue 
                            –
                            show
                         | 
                |||
| 347 | sprintf(  | 
            ||
| 348 | 'SELECT f FROM %s f  | 
            ||
| 349 | JOIN %s b  | 
            ||
| 350 | WITH f.buildings_id = b.id  | 
            ||
| 351 | WHERE f.%s = :hostId  | 
            ||
| 352 | AND f.buildings_id > 0  | 
            ||
| 353 | ORDER BY b.name ASC',  | 
            ||
| 354 | PlanetField::class,  | 
            ||
| 355 | Building::class,  | 
            ||
| 356 | $host->getPlanetFieldHostColumnIdentifier(),  | 
            ||
| 357 | )  | 
            ||
| 358 | )->setParameters([  | 
            ||
| 359 | 'hostId' => $host->getId(),  | 
            ||
| 360 | ])->getResult();  | 
            ||
| 361 | }  | 
            ||
| 362 | |||
| 363 | public function getEnergyProductionByColony(  | 
            ||
| 384 | }  | 
            ||
| 385 | |||
| 386 | public function truncateByColony(ColonyInterface $colony): void  | 
            ||
| 396 | }  | 
            ||
| 397 | }  | 
            ||
| 398 |