File manager - Edit - /home/webapp69.cm.in.th/u69319090028/Shop/app/Services/StoreService.php
Back
<?php /** * StoreService * Handles store onboarding, store branding, updates, and metrics */ require_once __DIR__ . '/../Models/Store.php'; require_once __DIR__ . '/../Models/User.php'; require_once __DIR__ . '/../Models/ActivityLog.php'; require_once __DIR__ . '/../Helpers/Upload.php'; class StoreService { private Store $storeModel; private User $userModel; private ActivityLog $activityLog; public function __construct() { $this->storeModel = new Store(); $this->userModel = new User(); $this->activityLog = new ActivityLog(); } public function getStoreByUserId(int $userId): ?array { return $this->storeModel->findByUserId($userId); } public function registerStore(int $userId, array $data, ?array $logoFile = null, ?array $coverFile = null): array { // Check if user already owns a store $existing = $this->storeModel->findByUserId($userId); if ($existing) { return ['success' => false, 'message' => 'คุณมีร้านค้าในระบบอยู่แล้ว']; } $storeName = trim($data['store_name'] ?? ''); $slug = trim($data['store_slug'] ?? ''); $phone = trim($data['phone'] ?? ''); $address = trim($data['address'] ?? ''); $description = trim($data['description'] ?? ''); if (empty($storeName) || mb_strlen($storeName) < 3) { return ['success' => false, 'message' => 'ชื่อร้านค้าต้องมีความยาวอย่างน้อย 3 ตัวอักษร']; } if (empty($slug)) { $slug = strtolower(preg_replace('/[^a-zA-Z0-9\x{0E00}-\x{0E7F}]+/u', '-', $storeName)); $slug = trim($slug, '-'); if (empty($slug)) { $slug = 'store-' . time(); } } if ($this->storeModel->slugExists($slug)) { $slug .= '-' . time(); } $logoFilename = null; $coverFilename = null; $storeId = $this->storeModel->insert([ 'user_id' => $userId, 'store_name' => $storeName, 'store_slug' => $slug, 'phone' => $phone, 'address' => $address, 'description' => $description, 'status' => 'active', // Auto-active for immediate testing / marketplace usability 'commission_rate' => 5.00, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ]); // Process Logo & Cover if provided if ($logoFile && !empty($logoFile['tmp_name'])) { [$upSuccess, $logoResult] = Upload::processStoreImage($logoFile, $storeId, 'logo'); if ($upSuccess) { $logoFilename = $logoResult; $this->storeModel->update($storeId, ['logo' => $logoFilename]); } } if ($coverFile && !empty($coverFile['tmp_name'])) { [$upSuccess, $coverResult] = Upload::processStoreImage($coverFile, $storeId, 'cover'); if ($upSuccess) { $coverFilename = $coverResult; $this->storeModel->update($storeId, ['cover_image' => $coverFilename]); } } // Assign Seller Role $this->userModel->assignRole($userId, 'seller'); // Record Seller Agreement Acceptance require_once __DIR__ . '/../Models/UserAgreement.php'; $agreementModel = new UserAgreement(); $sellerAgreement = $agreementModel->getLatestActive('seller'); if ($sellerAgreement) { $agreementModel->recordAcceptance($userId, (int)$sellerAgreement['id'], 'seller', $sellerAgreement['version']); } $this->activityLog->record($userId, 'store_created', 'store', $storeId, "Created store {$storeName}"); return [ 'success' => true, 'message' => 'เปิดร้านค้าสำเร็จ ยินดีต้อนรับสู่ศูนย์ผู้ขาย CARGOO', 'store_id' => $storeId ]; } public function updateStoreBranding(int $userId, array $data, ?array $logoFile = null, ?array $coverFile = null): array { $store = $this->storeModel->findByUserId($userId); if (!$store) { return ['success' => false, 'message' => 'ไม่พบข้อมูลร้านค้าของคุณ']; } $storeId = (int)$store['id']; $storeName = trim($data['store_name'] ?? $store['store_name']); $phone = trim($data['phone'] ?? $store['phone']); $address = trim($data['address'] ?? $store['address']); $description = trim($data['description'] ?? $store['description']); $updateData = [ 'store_name' => $storeName, 'phone' => $phone, 'address' => $address, 'description' => $description, 'updated_at' => date('Y-m-d H:i:s') ]; // Process Logo if ($logoFile && !empty($logoFile['tmp_name'])) { [$upSuccess, $logoResult] = Upload::processStoreImage($logoFile, $storeId, 'logo'); if ($upSuccess) { Upload::deleteStoreImage($store['logo']); $updateData['logo'] = $logoResult; } else { return ['success' => false, 'message' => $logoResult]; } } // Process Cover Image if ($coverFile && !empty($coverFile['tmp_name'])) { [$upSuccess, $coverResult] = Upload::processStoreImage($coverFile, $storeId, 'cover'); if ($upSuccess) { Upload::deleteStoreImage($store['cover_image']); $updateData['cover_image'] = $coverResult; } else { return ['success' => false, 'message' => $coverResult]; } } $this->storeModel->update($storeId, $updateData); $this->activityLog->record($userId, 'store_updated', 'store', $storeId, "Updated store branding & details"); return [ 'success' => true, 'message' => 'บันทึกข้อมูลและภาพลักษณ์ร้านค้าเรียบร้อยแล้ว' ]; } public function getStoreStats(int $userId): ?array { $store = $this->storeModel->findByUserId($userId); if (!$store) { return null; } return $this->storeModel->getStoreStats((int)$store['id']); } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings