File manager - Edit - /home/webapp69.cm.in.th/u69319090028/Shop/app/Services/AddressService.php
Back
<?php /** * AddressService * Handles user shipping addresses and default address switching */ require_once __DIR__ . '/../Models/UserAddress.php'; require_once __DIR__ . '/../Models/ActivityLog.php'; require_once __DIR__ . '/../Helpers/Validator.php'; class AddressService { private UserAddress $addressModel; private ActivityLog $activityLog; public function __construct() { $this->addressModel = new UserAddress(); $this->activityLog = new ActivityLog(); } public function getAddresses(int $userId): array { return $this->addressModel->getByUserId($userId); } public function getAddress(int $addressId, int $userId): ?array { return $this->addressModel->findUserAddress($addressId, $userId); } public function createAddress(int $userId, array $data): array { $cleanPhone = preg_replace('/[^0-9]/', '', (string)($data['phone'] ?? '')); $validator = Validator::make(array_merge($data, ['phone' => $cleanPhone]), [ 'recipient_name' => 'required|max:100', 'phone' => 'required|phone', 'house_number' => 'required|max:50', 'sub_district' => 'required|max:100', 'district' => 'required|max:100', 'province' => 'required|max:100', 'postal_code' => 'required|postal_code', ]); if (!$validator->validate()) { return ['success' => false, 'errors' => $validator->errors()]; } $existingCount = $this->addressModel->countUserAddresses($userId); $isDefault = !empty($data['is_default']) || $existingCount === 0 ? 1 : 0; if ($isDefault) { $this->addressModel->clearDefault($userId); } $addressId = $this->addressModel->insert([ 'user_id' => $userId, 'recipient_name' => trim($data['recipient_name']), 'phone' => $cleanPhone, 'house_number' => trim($data['house_number']), 'village' => !empty($data['village']) ? trim($data['village']) : null, 'alley' => !empty($data['alley']) ? trim($data['alley']) : null, 'street' => !empty($data['street']) ? trim($data['street']) : null, 'sub_district' => trim($data['sub_district']), 'district' => trim($data['district']), 'province' => trim($data['province']), 'postal_code' => trim($data['postal_code']), 'note' => !empty($data['note']) ? trim($data['note']) : null, 'is_default' => $isDefault, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ]); $this->activityLog->record($userId, 'address_created', 'user_address', $addressId, 'Added new shipping address'); return ['success' => true, 'address_id' => $addressId, 'message' => __('address_added_success')]; } public function updateAddress(int $addressId, int $userId, array $data): array { $address = $this->addressModel->findUserAddress($addressId, $userId); if (!$address) { return ['success' => false, 'message' => __('error_occurred')]; } $cleanPhone = preg_replace('/[^0-9]/', '', (string)($data['phone'] ?? '')); $validator = Validator::make(array_merge($data, ['phone' => $cleanPhone]), [ 'recipient_name' => 'required|max:100', 'phone' => 'required|phone', 'house_number' => 'required|max:50', 'sub_district' => 'required|max:100', 'district' => 'required|max:100', 'province' => 'required|max:100', 'postal_code' => 'required|postal_code', ]); if (!$validator->validate()) { return ['success' => false, 'errors' => $validator->errors()]; } $isDefault = !empty($data['is_default']) ? 1 : 0; if ($isDefault) { $this->addressModel->clearDefault($userId); } $this->addressModel->update($addressId, [ 'recipient_name' => trim($data['recipient_name']), 'phone' => $cleanPhone, 'house_number' => trim($data['house_number']), 'village' => !empty($data['village']) ? trim($data['village']) : null, 'alley' => !empty($data['alley']) ? trim($data['alley']) : null, 'street' => !empty($data['street']) ? trim($data['street']) : null, 'sub_district' => trim($data['sub_district']), 'district' => trim($data['district']), 'province' => trim($data['province']), 'postal_code' => trim($data['postal_code']), 'note' => !empty($data['note']) ? trim($data['note']) : null, 'is_default' => $isDefault, 'updated_at' => date('Y-m-d H:i:s') ]); $this->activityLog->record($userId, 'address_updated', 'user_address', $addressId, 'Updated shipping address'); return ['success' => true, 'message' => __('address_updated_success')]; } public function deleteAddress(int $addressId, int $userId): array { $address = $this->addressModel->findUserAddress($addressId, $userId); if (!$address) { return ['success' => false, 'message' => __('error_occurred')]; } $wasDefault = (int)$address['is_default'] === 1; $this->addressModel->delete($addressId); // If default address was deleted, set another address as default if one exists if ($wasDefault) { $remaining = $this->addressModel->getByUserId($userId); if (!empty($remaining)) { $this->addressModel->setDefault((int)$remaining[0]['id'], $userId); } } $this->activityLog->record($userId, 'address_deleted', 'user_address', $addressId, 'Deleted shipping address'); return ['success' => true, 'message' => __('address_deleted_success')]; } public function setDefaultAddress(int $addressId, int $userId): array { $address = $this->addressModel->findUserAddress($addressId, $userId); if (!$address) { return ['success' => false, 'message' => __('error_occurred')]; } $this->addressModel->setDefault($addressId, $userId); $this->activityLog->record($userId, 'address_set_default', 'user_address', $addressId, 'Set default shipping address'); return ['success' => true, 'message' => __('address_set_default_success')]; } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings