'Created Billing Address', 'message' => 'You have successfully created a new Billing Address' ]; } /** @var CanCreateAddress */ private $canCreateAddress; /** @var FetchesCompanyModule */ private $fetchesCompanyModule; /** @var CreatesAddress */ private $createsAddress; /** @var FetchesAddress */ private $fetchesAddress; /** * CreateAddressLogic constructor. * @param CanCreateAddress $canCreateAddress * @param FetchesCompanyModule $fetchesCompanyModule * @param CreatesAddress $createsAddress * @param FetchesAddress $fetchesAddress */ public function __construct(CanCreateAddress $canCreateAddress, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress, FetchesAddress $fetchesAddress) { $this->canCreateAddress = $canCreateAddress; $this->fetchesCompanyModule = $fetchesCompanyModule; $this->createsAddress = $createsAddress; $this->fetchesAddress = $fetchesAddress; } /** * @param Request $request * @return JsonResponse * @throws AccessForbiddenException * @throws MalformedRequestException * @throws RequestValidationException */ public function logic(Request $request): JsonResponse { $companyModule = $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]); $billingAddressInputed = $this->fetchesAddress->execute(['id' => $request->input('billing_address_id')]); if ($billingAddressInputed->type !== AddressType::BILLING || $billingAddressInputed->id !== $companyModule->addresses->where('type', AddressType::BILLING)->first()->id) { // delete all current billing address Address::where('owner_type', CompanyModule::class)->where('owner_id', $request->input('company_module_id'))->where('type', AddressType::BILLING)->delete(); // create new billing addrress $billingAddress = new AddressObject($billingAddressInputed->street_one, $billingAddressInputed->street_two, $billingAddressInputed->country_id, $billingAddressInputed->state_id, $billingAddressInputed->district_id, $billingAddressInputed->postcode, AddressType::BILLING, ApprovalStatus::APPROVED, $billingAddressInputed->reference); $this->canCreateAddress->passes($billingAddress); $this->createsAddress->execute($companyModule, $billingAddress); } //load address with only owner address /* return fractal() ->item($billingAddressInputed, new AddressTransformer()) ->parseIncludes('Owner_address') ->respond(200, [], JSON_PRETTY_PRINT);*/ return $this->resourceResponse(new AddressResource($billingAddressInputed)); } }