You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.3 KiB
122 lines
3.3 KiB
<?php
|
|
|
|
namespace api\logic;
|
|
|
|
|
|
use backend\modules\goods\models\ars\Goods;
|
|
use backend\modules\shop\models\ars\Collection;
|
|
use Yii;
|
|
use Throwable;
|
|
use yii\base\Component;
|
|
use yii\web\BadRequestHttpException;
|
|
use yii\web\NotFoundHttpException;
|
|
use yii\web\ServerErrorHttpException;
|
|
|
|
/**
|
|
* @author iron
|
|
* @email weiriron@gmail.com
|
|
* Class CartLogic
|
|
* @package api\logic
|
|
*/
|
|
class CollectionLogic extends Component
|
|
{
|
|
/**
|
|
* @throws BadRequestHttpException
|
|
* @throws NotFoundHttpException
|
|
* @throws ServerErrorHttpException
|
|
* @throws Throwable
|
|
* @throws yii\db\StaleObjectException
|
|
*/
|
|
public function delete()
|
|
{
|
|
$ids = Yii::$app->request->getBodyParam('ids');
|
|
if (empty($ids) || !is_array($ids)) {
|
|
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
|
|
}
|
|
foreach ($ids as $id) {
|
|
$collection = $this->findCollection($id);
|
|
if (!$collection) {
|
|
throw new NotFoundHttpException("未找到该收藏");
|
|
}
|
|
if (!$collection->delete()) {
|
|
throw new ServerErrorHttpException('服务器取消收藏失败');
|
|
}
|
|
}
|
|
Yii::$app->getResponse()->setStatusCode(204);
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
* @throws ServerErrorHttpException
|
|
* @throws Throwable
|
|
* @throws yii\db\StaleObjectException
|
|
*/
|
|
public function update()
|
|
{
|
|
$collection = $this->findCollectionByGoods();
|
|
if (!$collection) {
|
|
return $this->create();
|
|
}
|
|
if (!$collection->delete()) {
|
|
throw new ServerErrorHttpException('服务器取消收藏失败');
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------------------*/
|
|
/**
|
|
* @throws NotFoundHttpException
|
|
* @throws ServerErrorHttpException
|
|
*/
|
|
private function create()
|
|
{
|
|
$goods = $this->findGoods();
|
|
$collection = new Collection();
|
|
$collection->goods_id = $goods->id;
|
|
$collection->goods_name = $goods->name;
|
|
$collection->goods_img = $goods->image;
|
|
$collection->goods_price = $goods->price;
|
|
$collection->user_id = Yii::$app->user->getId();
|
|
if (!$collection->save()) {
|
|
throw new ServerErrorHttpException('服务器新建收藏失败');
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @param integer $id
|
|
* @return array|Collection|null
|
|
*/
|
|
private function findCollection($id)
|
|
{
|
|
return Collection::find()
|
|
->where(['id' => $id])
|
|
->andWhere(['user_id' => Yii::$app->user->getId()])
|
|
->one();
|
|
}
|
|
|
|
|
|
private function findCollectionByGoods()
|
|
{
|
|
$goodsId = Yii::$app->request->getQueryParam('id');
|
|
return Collection::find()
|
|
->where(['goods_id' => $goodsId])
|
|
->andWhere(['user_id' => Yii::$app->user->getId()])
|
|
->one();
|
|
}
|
|
|
|
|
|
/**
|
|
* @return Goods|null
|
|
* @throws NotFoundHttpException
|
|
*/
|
|
private function findGoods()
|
|
{
|
|
$goodsId = Yii::$app->request->getQueryParam('id');
|
|
$goods = Goods::findOne(['id' => $goodsId, 'is_delete' => Goods::IS_DELETE_NO, 'is_sale' => Goods::IS_SALE_YES]);
|
|
if (!$goods) {
|
|
throw new NotFoundHttpException('商品未找到');
|
|
}
|
|
return $goods;
|
|
}
|
|
}
|