From e219d26731ee4740d57a2fff3867791fae4ac38f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0?= Date: Tue, 1 Aug 2023 15:16:22 +0900 Subject: [PATCH] shoppingmallv2 init... --- app/Config/Routes.php | 2 +- app/Controllers/Admin/OrderController.php | 44 ++++++++++++++++++++--- app/Controllers/AuthController.php | 10 +++--- app/Controllers/BaseController.php | 29 ++++++++------- app/Database/shoppingmall.sql | 3 +- app/Entities/BaseEntity.php | 4 +-- app/Entities/BoardConfigEntity.php | 4 +-- app/Entities/BoardEntity.php | 4 +-- app/Entities/CategoryEntity.php | 4 +-- app/Entities/OrderEntity.php | 4 +-- app/Entities/ProductEntity.php | 4 +-- app/Entities/UserEntity.php | 4 +-- app/Entities/UserSNSEntity.php | 4 +-- app/Models/BaseModel.php | 16 ++++----- app/Models/BoardModel.php | 2 +- app/Models/CategoryModel.php | 2 +- app/Models/OrderModel.php | 38 ++++++++++---------- app/Models/ProductModel.php | 9 +++-- app/Models/UserModel.php | 2 +- app/Views/admin/product/orderform.php | 22 +++++++++--- 20 files changed, 129 insertions(+), 82 deletions(-) diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 52e74cb..eb697be 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -122,7 +122,7 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au }); $routes->group('order', static function ($routes) { $routes->get('', 'OrderController::index'); - $routes->post('insert/(:uuid)', 'OrderController::insert/$1'); + $routes->post('insert', 'OrderController::insert'); $routes->get('view/(:uuid)', 'OrderController::view/$1'); $routes->post('batchjob', 'OrderController::batchjob`'); $routes->get('delete/(:uuid)', 'OrderController::delete/$1', ['filter' => 'authFilter:master']); diff --git a/app/Controllers/Admin/OrderController.php b/app/Controllers/Admin/OrderController.php index 3470b1f..450bdcd 100644 --- a/app/Controllers/Admin/OrderController.php +++ b/app/Controllers/Admin/OrderController.php @@ -2,22 +2,56 @@ namespace App\Controllers\Admin; +use App\Entities\OrderEntity; use App\Models\OrderModel; +use App\Models\ProductModel; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; class OrderController extends AdminController { - + private $_cart_name = "order_uids"; + private $_cart_delimeter = "||"; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { $this->_model = new OrderModel(); parent::initController($request, $response, $logger); $this->_viewPath .= strtolower($this->_model->getClassName()); + helper("cookie"); + } + + //쿠키에 장바구니에 담긴 Order UID를 추가해준다. + private function setOrderCookie(OrderEntity $entity) + { + $order_uids = array(); + if (has_cookie($this->_cart_name)) { + $order_uids = explode($this->_cart_delimeter, get_cookie($this->_cart_name)); + } + delete_cookie($this->_cart_name); + //24시간 저장 + set_cookie([ + 'name' => $this->_cart_name, + 'value' => implode($this->_cart_delimeter, [...$order_uids, $entity->getPrimaryKey()]), + 'expire' => '36400', + ]); } //장바구니에 담기 + protected function insert_process() + { + //fieldData Rule 검사및 fieldData 적용 + parent::insert_process(); + //상품재고 줄이기 + $productModel = new ProductModel(); + $product = $productModel->getEntity([$this->_model->getPrimaryKey() => $this->_viewDatas['fieldDatas']['product_uid']]); + //구매 금액 비교 + $price = ($product->getPrice() - $product->getSale()) * $this->_viewDatas['fieldDatas']['quantity']; + if ($price != $this->_viewDatas['fieldDatas']['price']) { + throw new \Exception("실 상품금액{$price} 와 구매금액{$this->_viewDatas['fieldDatas']['price']}이 서로 다릅니다."); + } + $productModel->decreaseStock($product, $this->_viewDatas['fieldDatas']['quantity']); + } public function insert() { $msg = ""; @@ -25,11 +59,12 @@ class OrderController extends AdminController $this->_viewDatas['fields'] = $this->_model->getFields(__FUNCTION__); $this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], __FUNCTION__); //Transaction 시작 - $this->_model->transStart(); $this->insert_process(); - $this->_model->addCart($this->_viewDatas['fieldDatas']); + $this->_model->transStart(); + $entity = $this->_model->create($this->_viewDatas['fieldDatas']); + $this->setOrderCookie($entity); //Transaction Commit - $this->_model->transCommit(); + $this->_model->transComplete(); $msg = sprintf( "%s에서 해당 상품 %s개를 장바구니에 담았습니다.", $this->_viewDatas['title'], @@ -40,7 +75,6 @@ class OrderController extends AdminController //Transaction Rollback $this->_model->transRollback(); log_message("error", $e->getMessage()); - log_message("error", var_export($this->_viewDatas['fieldDatas'], true)); $msg = sprintf( "%s에서 다음 오류로 인해 장바구니에 담기를 실패하였습니다.\n%s", $this->_viewDatas['title'], diff --git a/app/Controllers/AuthController.php b/app/Controllers/AuthController.php index dbbf307..31fc0c2 100644 --- a/app/Controllers/AuthController.php +++ b/app/Controllers/AuthController.php @@ -12,9 +12,8 @@ class AuthController extends BaseController private $_adapters = array(); public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { - $this->_backend = service('user'); parent::initController($request, $response, $logger); - $this->_viewPath .= strtolower($this->_backend->getClassName()); + $this->_viewPath .= 'auth'; $this->initAdapters(); } @@ -36,13 +35,14 @@ class AuthController extends BaseController public function login() { + $viewDatas = array(); foreach ($this->_adapters as $key => $adapter) { - $this->_viewDatas['login_buttons'][$key] = $adapter->getAuthButton(); + $viewDatas['login_buttons'][$key] = $adapter->getAuthButton(); } - $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; + $viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; helper(['form']); $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']); - return view('auth/login', $this->_viewDatas); + return view('auth/login', $viewDatas); } public function signup(string $site) diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index 3ccda6e..bef7136 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -161,7 +161,7 @@ abstract class BaseController extends Controller try { $this->_viewDatas = $this->init(__FUNCTION__); $this->insert_process(); - $entity = $this->_model->insert($this->_viewDatas['fieldDatas']); + $entity = $this->_model->create($this->_viewDatas['fieldDatas']); $msg = "{$this->_viewDatas['title']}에서 {$entity->getTitle()}의 " . __FUNCTION__ . " 완료하였습니다."; return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL'])); } catch (\Exception $e) { @@ -181,7 +181,7 @@ abstract class BaseController extends Controller $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; helper(['form']); $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']); - $this->_viewDatas['entity'] = $this->_model->getEntity($uid); + $this->_viewDatas['entity'] = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); return view($this->_viewPath . '/update', $this->_viewDatas); } catch (\Exception $e) { log_message("error", $e->getMessage()); @@ -209,9 +209,9 @@ abstract class BaseController extends Controller $msg = ""; try { $this->_viewDatas = $this->init(__FUNCTION__); - $entity = $this->_viewDatas['entity'] = $this->_model->getEntity($uid); + $entity = $this->_viewDatas['entity'] = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $this->update_process(); - $entity = $this->_model->update($entity, $this->_viewDatas['fieldDatas']); + $entity = $this->_model->modify($entity, $this->_viewDatas['fieldDatas']); $msg = "{$this->_viewDatas['title']}에서 {$entity->getTitle()}의 " . __FUNCTION__ . " 완료하였습니다."; return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL'])); } catch (\Exception $e) { @@ -231,7 +231,7 @@ abstract class BaseController extends Controller $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; helper(['form']); $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']); - $entity = $this->_model->getEntity($uid); + $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $titleField = $this->_model->getTitleField(); $entity->$titleField = "RE: " . $entity->$titleField; $contentField = $this->_model->getContentField(); @@ -252,7 +252,7 @@ abstract class BaseController extends Controller $msg = ""; try { $this->_viewDatas = $this->init(__FUNCTION__); - $entity = $this->_viewDatas['entity'] = $this->_model->getEntity($uid); + $entity = $this->_viewDatas['entity'] = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $this->reply_process(); $entity = $this->_model->reply($entity, $this->_viewDatas['fieldDatas']); $msg = "{$this->_viewDatas['title']}에서 {$entity->getTitle()}의 " . __FUNCTION__ . " 완료하였습니다."; @@ -276,9 +276,9 @@ abstract class BaseController extends Controller $msg = ""; try { $this->_viewDatas = $this->init(__FUNCTION__, [$field]); - $entity = $this->_viewDatas['entity'] = $this->_model->getEntity($uid); + $entity = $this->_viewDatas['entity'] = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $this->toggle_process(); - $entity = $this->_model->update($entity, $this->_viewDatas['fieldDatas']); + $entity = $this->_model->modify($entity, $this->_viewDatas['fieldDatas']); $msg = "{$this->_viewDatas['title']}에서 {$entity->getTitle()}의 " . __FUNCTION__ . " 완료하였습니다."; return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL'])); } catch (\Exception $e) { @@ -318,9 +318,9 @@ abstract class BaseController extends Controller $this->_model->transStart(); foreach ($uids as $uid) { try { - $entity = $this->_viewDatas['entity'] = $this->_model->getEntity($uid); + $entity = $this->_viewDatas['entity'] = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $this->batchjob_process(); - array_push($entitys, $this->_model->update($entity, $this->_viewDatas['fieldDatas'])); + array_push($entitys, $this->_model->modify($entity, $this->_viewDatas['fieldDatas'])); array_push($batchjobs, "{$cnt}. {$uid}->{$entity->getTitle()}는 완료."); } catch (\Exception $e) { array_push($batchjobs, "{$cnt}. {$uid}는 실패."); @@ -328,7 +328,7 @@ abstract class BaseController extends Controller $cnt++; } //Transaction Commit - $this->_model->transCommit(); + $this->_model->transComplete(); $msg = sprintf( "%s에서 총:%s개의 %s 완료하였습니다.", $this->_viewDatas['title'], @@ -359,7 +359,7 @@ abstract class BaseController extends Controller { $msg = ""; try { - $entity = $this->_model->delete($this->_model->getEntity($uid)); + $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); if (!$this->_model->delete($entity->getPrimaryKey())) { log_message("error", __FUNCTION__ . "에서 호출:" . $this->_model->getLastQuery()); log_message("error", implode("\n", $this->_model->errors())); @@ -387,8 +387,7 @@ abstract class BaseController extends Controller $this->_viewDatas = $this->init(__FUNCTION__); helper(['form']); $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; - $entity = $this->_viewDatas['entity'] = $this->_model->getEntity($uid); - $this->_viewDatas['entity'] = $this->_model->view($entity); + $entity = $this->_viewDatas['entity'] = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']); return view($this->_viewPath . '/view', $this->_viewDatas); } catch (\Exception $e) { @@ -525,7 +524,7 @@ abstract class BaseController extends Controller final public function download(string $field, $uid) { try { - $entity = $this->_model->getEntity($uid); + $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); if (!$entity->$field) { throw new \Exception("첨부파일이 확인되지 않습니다."); } diff --git a/app/Database/shoppingmall.sql b/app/Database/shoppingmall.sql index a074e1b..87c6641 100644 --- a/app/Database/shoppingmall.sql +++ b/app/Database/shoppingmall.sql @@ -45,7 +45,6 @@ DROP TABLE IF EXISTS shoppingmall.tw_order; CREATE TABLE shoppingmall.tw_order ( uid varchar(36) NOT NULL, product_uid varchar(36) NULL COMMENT '상품 정보', - sess_id varchar(50) NOT NULL COMMENT '세션 정보', user_uid varchar(36) NULL COMMENT '사용자 정보', quantity varchar(255) NOT NULL COMMENT '수량', price int(10) UNSIGNED NOT NULL COMMENT '구매가', @@ -56,7 +55,7 @@ CREATE TABLE shoppingmall.tw_order ( PRIMARY KEY (uid), CONSTRAINT FOREIGN KEY (product_uid) REFERENCES tw_product (uid), CONSTRAINT FOREIGN KEY (user_uid) REFERENCES tw_user (uid) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT ='Cart 정보'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT ='Order 정보'; DROP TABLE IF EXISTS shoppingmall.tw_order_history; diff --git a/app/Entities/BaseEntity.php b/app/Entities/BaseEntity.php index 6354677..deab2a9 100644 --- a/app/Entities/BaseEntity.php +++ b/app/Entities/BaseEntity.php @@ -7,6 +7,6 @@ use CodeIgniter\Entity\Entity; abstract class BaseEntity extends Entity { abstract public function getPrimaryKey(); - abstract public function getTitle(); - abstract public function getStatus(); + abstract public function getTitle(): string; + abstract public function getStatus(): string; } diff --git a/app/Entities/BoardConfigEntity.php b/app/Entities/BoardConfigEntity.php index 3459fe1..318a3ef 100644 --- a/app/Entities/BoardConfigEntity.php +++ b/app/Entities/BoardConfigEntity.php @@ -13,11 +13,11 @@ class BoardConfigEntity extends BaseEntity { return $this->attributes['uid']; } - public function getTitle() + public function getTitle(): string { return $this->attributes['name']; } - public function getStatus() + public function getStatus(): string { return $this->attributes['status']; } diff --git a/app/Entities/BoardEntity.php b/app/Entities/BoardEntity.php index 7dfcbd5..5ab886d 100644 --- a/app/Entities/BoardEntity.php +++ b/app/Entities/BoardEntity.php @@ -13,11 +13,11 @@ class BoardEntity extends BaseHierarchyEntity { return $this->attributes['uid']; } - public function getTitle() + public function getTitle(): string { return $this->attributes['title']; } - public function getStatus() + public function getStatus(): string { return $this->attributes['status']; } diff --git a/app/Entities/CategoryEntity.php b/app/Entities/CategoryEntity.php index fe3a12d..4e90eb5 100644 --- a/app/Entities/CategoryEntity.php +++ b/app/Entities/CategoryEntity.php @@ -13,11 +13,11 @@ class CategoryEntity extends BaseHierarchyEntity { return $this->attributes['uid']; } - public function getTitle() + public function getTitle(): string { return $this->attributes['name']; } - public function getStatus() + public function getStatus(): string { return $this->attributes['status']; } diff --git a/app/Entities/OrderEntity.php b/app/Entities/OrderEntity.php index 516b8cb..9b419e9 100644 --- a/app/Entities/OrderEntity.php +++ b/app/Entities/OrderEntity.php @@ -14,11 +14,11 @@ class OrderEntity extends BaseEntity { return $this->attributes['uid']; } - final public function getTitle() + final public function getTitle(): string { return $this->attributes['product_uid']; } - final public function getStatus() + final public function getStatus(): string { return $this->attributes['status']; } diff --git a/app/Entities/ProductEntity.php b/app/Entities/ProductEntity.php index 910c141..c493fd6 100644 --- a/app/Entities/ProductEntity.php +++ b/app/Entities/ProductEntity.php @@ -13,11 +13,11 @@ class ProductEntity extends BaseEntity { return $this->attributes['uid']; } - public function getTitle() + public function getTitle(): string { return $this->attributes['name']; } - public function getStatus() + public function getStatus(): string { return $this->attributes['status']; } diff --git a/app/Entities/UserEntity.php b/app/Entities/UserEntity.php index 0705302..9344533 100644 --- a/app/Entities/UserEntity.php +++ b/app/Entities/UserEntity.php @@ -13,11 +13,11 @@ class UserEntity extends BaseEntity { return $this->attributes['uid']; } - public function getTitle() + public function getTitle(): string { return $this->attributes['name']; } - public function getStatus() + public function getStatus(): string { return $this->attributes['status']; } diff --git a/app/Entities/UserSNSEntity.php b/app/Entities/UserSNSEntity.php index 2c5298c..d1e02ec 100644 --- a/app/Entities/UserSNSEntity.php +++ b/app/Entities/UserSNSEntity.php @@ -13,11 +13,11 @@ class UserSNSEntity extends BaseEntity { return $this->attributes['uid']; } - public function getTitle() + public function getTitle(): string { return $this->attributes['name']; } - public function getStatus() + public function getStatus(): string { return $this->attributes['status']; } diff --git a/app/Models/BaseModel.php b/app/Models/BaseModel.php index 2fb1492..d35cc11 100644 --- a/app/Models/BaseModel.php +++ b/app/Models/BaseModel.php @@ -63,12 +63,12 @@ abstract class BaseModel extends Model return $this->primaryKey; } abstract public function getTitleField(): string; - abstract public function getEntity($uid): BaseEntity; + abstract public function getEntity($conditions): BaseEntity; abstract public function getFieldFilters(): array; abstract public function getFields(string $action): array; - final public function getEntitys($conditions = false): array + final public function getEntitys(array $conditions = array()): array { - return $conditions ? $this->where($conditions)->findAll() : $this->findAll(); + return $this->where($conditions)->findAll(); } protected function getFieldRule(string $field, array $rules, string $action = ""): array { @@ -119,9 +119,9 @@ abstract class BaseModel extends Model } //Field별 Form Option용 - public function getFormOptions($conditions, $options = array()): array + public function getFormOptions(array $conditions = array(), $options = array()): array { - foreach ($this->getEntitys(['status' => 'use']) as $entity) { + foreach ($this->getEntitys($conditions) as $entity) { $options[$entity->getPrimaryKey()] = $entity->getTitle(); } return $options; @@ -175,9 +175,9 @@ abstract class BaseModel extends Model final public function increaseViewCount($uid, string $field = "view_cnt", int $cnt = 1) { //escape -> false옵션 반드시 있어야함 - $this->builder()->set($field, "{$field}+{$cnt}", false); - $this->builder()->where($this->primaryKey, $uid); - $this->builder()->update(); + $this->set($field, "{$field}+{$cnt}", false); + $this->where($this->primaryKey, $uid); + $this->update(); } //create , modify 직전 작업용 작업 diff --git a/app/Models/BoardModel.php b/app/Models/BoardModel.php index cabbc81..e7516cf 100644 --- a/app/Models/BoardModel.php +++ b/app/Models/BoardModel.php @@ -76,7 +76,7 @@ class BoardModel extends BaseHierarchyModel case 'board_config_uid': if (is_null($this->_boardconfig_options)) { $boardConfigModel = new BoardConfigModel(); - $this->_boardconfig_options = $boardConfigModel->getFormOptions(['status' => 'use']); + $this->_boardconfig_options = $boardConfigModel->getFormOptions(); } $options = $this->_boardconfig_options; break; diff --git a/app/Models/CategoryModel.php b/app/Models/CategoryModel.php index cf0609c..29ab188 100644 --- a/app/Models/CategoryModel.php +++ b/app/Models/CategoryModel.php @@ -69,7 +69,7 @@ class CategoryModel extends BaseHierarchyModel return $this->where($conditions)->first() ?: throw new \Exception("해당 데이터가 없습니다.\n" . var_export($conditions, true)); } - public function getFormOptions($conditions, $options = array()): array + public function getFormOptions(array $conditions = array(), $options = array()): array { $old_title = ""; foreach ($this->where($conditions)->orderby("grpno DESC, grporder ASC")->findAll() as $entity) { diff --git a/app/Models/OrderModel.php b/app/Models/OrderModel.php index 4fe6a00..481a157 100644 --- a/app/Models/OrderModel.php +++ b/app/Models/OrderModel.php @@ -7,14 +7,15 @@ use App\Entities\ProductEntity; class OrderModel extends BaseModel { + private $_product_options = null; protected $table = "tw_order"; protected $useAutoIncrement = false; protected $returnType = OrderEntity::class; - protected $useSoftDeletes = false; + protected $useSoftDeletes = true; public function __construct() { parent::__construct('Order'); - $this->allowedFields = ["uid", "user_uid", "sess_id", ...$this->allowedFields, ...$this->getFields(),]; + $this->allowedFields = ["uid", "user_uid", ...$this->allowedFields, ...$this->getFields(),]; $this->validationRules = [...$this->validationRules, ...$this->getFieldRules($this->allowedFields),]; } final public function getTitleField(): string @@ -28,7 +29,7 @@ class OrderModel extends BaseModel case "index": case "excel": case "view": - return [$this->getTitleField(), "user_uid", "sess_id", "quantity", "price", "status", "updated_at", "created_at"]; + return [$this->getTitleField(), "user_uid", "quantity", "price", "status", "updated_at", "created_at"]; break; default: return $fields; @@ -50,9 +51,6 @@ class OrderModel extends BaseModel case "user_uid": $rules[$field] = "required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]"; break; - case "sess_id": - $rules[$field] = "required|string"; - break; case 'quantity': case 'price': $rules[$field] = "required|numeric"; @@ -64,28 +62,35 @@ class OrderModel extends BaseModel return $rules; } - protected function changeFormData(string $action, string $field, array $formDatas, $entity) + //Field별 Form Option용 + public function getFieldFormOption(string $field): array { switch ($field) { - case "sess_id": //장바구니에 입력의 경우에만 자동으로 추가 - if ($action == 'create') { - $entity->$field = $this->_session->session_id; + case 'product_uid': + if (is_null($this->_product_options)) { + $productModel = new productModel(); + $this->_product_options = $productModel->getFormOptions(); } + $options = $this->_product_options; break; default: - $entity = parent::changeFormData($action, $field, $formDatas, $entity); + return parent::getFieldFormOption($field); break; } - return $entity; + if (!is_array($options)) { + throw new \Exception(__FUNCTION__ . "에서 {$this->getClassName()}의 Field:{$field}의 FormOptionData가 array가 아닙니다.\n" . var_export($options, true)); + } + return $options; } public function getEntity($conditions): OrderEntity { return $this->where($conditions)->first() ?: throw new \Exception("해당 데이터가 없습니다.\n" . var_export($conditions, true)); } + //장바구니에 넣기 public function create(array $formDatas): OrderEntity { - return $this->create_process(new OrderEntity(), $formDatas); + return $this->create_process(new OrderEntity(), $formDatas); } public function modify(OrderEntity $entity, array $formDatas): OrderEntity { @@ -97,11 +102,4 @@ class OrderModel extends BaseModel parent::setIndexWordFilter($word); $this->orLike($this->getTitleField(), $word, "both"); } - - //Ecommerce Action - //장바구니에 넣기 - final public function addCart(ProductEntity $product, int $quantity, int $price): OrderEntity - { - return $this->create(['product_uid' => $product->getPrimaryKey(), 'quantity' => $quantity, 'price' => $price]); - } } diff --git a/app/Models/ProductModel.php b/app/Models/ProductModel.php index b840354..15b24cd 100644 --- a/app/Models/ProductModel.php +++ b/app/Models/ProductModel.php @@ -10,7 +10,7 @@ class ProductModel extends BaseModel protected $table = "tw_product"; protected $useAutoIncrement = false; protected $returnType = ProductEntity::class; - protected $useSoftDeletes = false; + protected $useSoftDeletes = true; public function __construct() { parent::__construct('Product'); @@ -85,7 +85,7 @@ class ProductModel extends BaseModel case 'category_uid': if (is_null($this->_category_options)) { $categoryModel = new CategoryModel(); - $this->_category_options = $categoryModel->getFormOptions(['status' => 'use']); + $this->_category_options = $categoryModel->getFormOptions(); } $options = $this->_category_options; break; @@ -122,8 +122,11 @@ class ProductModel extends BaseModel //Ecommerce Action //장바구니에 넣기 - final public function addCart(ProductEntity $entity, int $quantity): ProductEntity + final public function decreaseStock(ProductEntity $entity, int $quantity): ProductEntity { + if ($entity->getStock() < $quantity) { + throw new \Exception("구매수량이 너무 많습니다.\n구매수량:{$quantity}개, 남은 재고수량:{$entity->getStock()}개"); + } if ($entity->getStock() == $quantity) { $entity->status = "outofstock"; } diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php index 35be081..237ed71 100644 --- a/app/Models/UserModel.php +++ b/app/Models/UserModel.php @@ -9,7 +9,7 @@ class UserModel extends BaseModel protected $table = "tw_user"; protected $useAutoIncrement = false; protected $returnType = UserEntity::class; - protected $useSoftDeletes = false; + protected $useSoftDeletes = true; public function __construct() { parent::__construct('User'); diff --git a/app/Views/admin/product/orderform.php b/app/Views/admin/product/orderform.php index 98b2386..ce3dbf7 100644 --- a/app/Views/admin/product/orderform.php +++ b/app/Views/admin/product/orderform.php @@ -1,7 +1,21 @@ 'post']) ?> getPrimaryKey()) ?> -getPrice() - $entity->getSale()) ?> -구매 수량 : -구매 금액 : getPrice() - $entity->getSale()) * 1) ?> + + "구매수량 선택"]; +for ($i = 1; $i <= $entity->getStock(); $i++) { + $quantityOptions[$i] = $i . "개"; +} +?> +구매 수량 : "cal_price(this.options[this.selectedIndex].value)"]); ?> +구매 금액 : getPrice() - $entity->getSale()) * 1) ?>getStock(), array("class" => "btn btn-outline btn-primary")); ?> - \ No newline at end of file + + \ No newline at end of file