diff --git a/.gitignore b/.gitignore
index 0da71a39..aff1e894 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,5 @@
/db/migrations/schema.php
/public/robots.txt
/public/sitemap.xml
+/public/h5
*KgTest*
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 95530986..af6041a4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+### [v1.2.0](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.0)(2020-11-25)
+- 增加客户端api
+- 代码优化以及问题修复
+
### [v1.1.0](https://gitee.com/koogua/course-tencent-cloud/releases/v1.1.0)(2020-10-08)
- 增加运营统计功能
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 1afa4e89..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,5 +0,0 @@
-使用协议
-
-1. 本系统属于强业务类型,非通用类库框架,不适合再次衍生发布。
-2. 在保留我们版权标识的前提下,用户可以修改以满足自己的需求,可以用于商业用途。
-3. 有限社区支持,用户对自己的行为负责。
\ No newline at end of file
diff --git a/README.md b/README.md
index abfadbd8..1d264fff 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,45 @@
## 酷瓜云课堂
+
+
#### 项目介绍
-酷瓜云课堂,依托腾讯云基础服务架构,采用 C 扩展框架 Phalcon 开发,致力网络教育软件。
+酷瓜云课堂,依托腾讯云基础服务架构,采用C扩展框架Phalcon开发,GPL-2.0开源协议,致力开源网课系统,开源网校系统,开源在线教育系统。
+
+
+
+
+
#### 系统功能
实现了点播、直播、专栏、会员、微聊等,是一个完整的产品,具体功能我也不想写一大堆,自己体验吧!
-- [前台演示](https://ctc.koogua.com)
-- [后台演示](https://ctc.koogua.com/admin)
-
-帐号:100015@163.com / 123456 (前后台通用)
-
友情提示:
- 系统配置低(1核 1G 1M 跑多个容器),切莫压测
- 课程数据来源于网络(无实质内容),切莫购买
- 管理后台已禁止数据提交,私密配置已过滤
+演示帐号:**13507083515 / 123456** (前后台通用)
+
+桌面端演示:
+
+- [前台演示](https://ctc.koogua.com)
+- [后台演示](https://ctc.koogua.com/admin)
+
+移动端演示:
+
+
+
+支付流程演示:
+
+- [MySQL提升课程全面讲解MySQL架构设计(0.01元)](https://ctc.koogua.com/order/confirm?item_id=1390&item_type=1)
+- [Nginx入门到实践Nginx中间件(0.01元)](https://ctc.koogua.com/order/confirm?item_id=1286&item_type=1)
+- [数据库与中间件的基础必修课(0.02元)](https://ctc.koogua.com/order/confirm?item_id=80&item_type=2)
+
+Tips: 测试支付请用手机号注册一个新账户,以便接收订单通知,以及避免课程无法购买
+
#### 项目组件
- 后台框架:[phalcon 3.4.5](https://phalcon.io)
@@ -27,14 +48,6 @@
- 即时通讯:[workerman 3.5.22](https://workerman.net)
- 基础依赖:[php7.3](https://php.net), [mysql5.7](https://mysql.com), [redis5.0](https://redis.io)
-#### 使用协议
-
-虽然尝试了解过开源协议,但是理解的模棱两可,干脆用自己的协议吧。
-
-1. 本系统属于强业务类型,非通用类库框架,不适合再次衍生发布。
-2. 在保留我们版权标识的前提下,用户可以修改以满足自己的需求,可以用于商业用途。
-3. 有限社区支持,用户对自己的行为负责。
-
#### 安装指南
- [运行环境搭建](https://gitee.com/koogua/course-tencent-cloud-docker)
@@ -43,20 +56,13 @@
#### 开发计划
- 桌面端:进行中
-- 移动端:待启动
+- 移动端:进行中
- 小程序:待启动
#### 意见反馈
- [在线反馈](https://gitee.com/koogua/course-tencent-cloud/issues)(推荐)
-- QQ邮箱: 76632555@qq.com
-- QQ群组: 787363898
-
-#### 加入我们
-
-这是一个创业项目,个人能力和精力有限,要兼顾产品规划以及开发,还要处理很多琐碎事情。目前在南山科技园某个众创空间,希望有 **深圳前端同学** 加入我们。
-
-联系邮箱:76632555@qq.com
+- QQ交流群: 787363898
#### 通过这个项目能学到什么?
diff --git a/app/Builders/CategoryTreeList.php b/app/Builders/CategoryTreeList.php
index dbc32de9..944b5236 100644
--- a/app/Builders/CategoryTreeList.php
+++ b/app/Builders/CategoryTreeList.php
@@ -11,7 +11,7 @@ class CategoryTreeList extends Builder
public function handle($type)
{
- $topCategories = $this->findChildCategories($type, 0);
+ $topCategories = $this->findTopCategories($type);
if ($topCategories->count() == 0) {
return [];
@@ -32,7 +32,7 @@ class CategoryTreeList extends Builder
protected function handleChildren(CategoryModel $category)
{
- $subCategories = $this->findChildCategories($category->type, $category->id);
+ $subCategories = $this->findChildCategories($category->id);
if ($subCategories->count() == 0) {
return [];
@@ -51,24 +51,31 @@ class CategoryTreeList extends Builder
}
/**
- * @param string $type
+ * @param int $type
+ * @return ResultsetInterface|Resultset|CategoryModel[]
+ */
+ protected function findTopCategories($type)
+ {
+ $query = CategoryModel::query();
+
+ $query->where('parent_id = 0');
+ $query->andWhere('published = 1');
+ $query->andWhere('type = :type:', ['type' => $type]);
+ $query->orderBy('priority ASC');
+
+ return $query->execute();
+ }
+
+ /**
* @param int $parentId
* @return ResultsetInterface|Resultset|CategoryModel[]
*/
- protected function findChildCategories($type = 'course', $parentId = 0)
+ protected function findChildCategories($parentId)
{
$query = CategoryModel::query();
$query->where('published = 1');
-
- if ($type) {
- $query->andWhere('type = :type:', ['type' => $type]);
- }
-
- if ($parentId) {
- $query->andWhere('parent_id = :parent_id:', ['parent_id' => $parentId]);
- }
-
+ $query->andWhere('parent_id = :parent_id:', ['parent_id' => $parentId]);
$query->orderBy('priority ASC');
return $query->execute();
diff --git a/app/Builders/ImGroupUserList.php b/app/Builders/ImGroupUserList.php
index 917eecd6..467db5a6 100644
--- a/app/Builders/ImGroupUserList.php
+++ b/app/Builders/ImGroupUserList.php
@@ -36,7 +36,7 @@ class ImGroupUserList extends Builder
$userRepo = new UserRepo();
- $columns = ['id', 'name', 'avatar', 'title', 'about', 'vip'];
+ $columns = ['id', 'name', 'avatar', 'title', 'about', 'vip', 'gender', 'area'];
$users = $userRepo->findByIds($ids, $columns);
diff --git a/app/Builders/LiveList.php b/app/Builders/LiveList.php
new file mode 100644
index 00000000..a331653e
--- /dev/null
+++ b/app/Builders/LiveList.php
@@ -0,0 +1,90 @@
+getCourses($lives);
+
+ foreach ($lives as $key => $live) {
+ $lives[$key]['course'] = $courses[$live['course_id']] ?? new \stdClass();
+ }
+
+ return $lives;
+ }
+
+ public function handleChapters(array $lives)
+ {
+ $chapters = $this->getChapters($lives);
+
+ foreach ($lives as $key => $live) {
+ $lives[$key]['chapter'] = $chapters[$live['chapter_id']] ?? new \stdClass();
+ }
+
+ return $lives;
+ }
+
+ public function getCourses(array $lives)
+ {
+ $courseIds = kg_array_column($lives, 'course_id');
+
+ $courseRepo = new CourseRepo();
+
+ $courses = $courseRepo->findByIds($courseIds, ['id', 'title', 'cover', 'teacher_id']);
+
+ $teacherIds = kg_array_column($courses->toArray(), 'teacher_id');
+
+ $userRepo = new UserRepo();
+
+ $users = $userRepo->findByIds($teacherIds, ['id', 'name', 'title', 'avatar', 'about']);
+
+ $baseUrl = kg_cos_url();
+
+ $teachers = [];
+
+ foreach ($users->toArray() as $user) {
+ $user['avatar'] = $baseUrl . $user['avatar'];
+ $teachers[$user['id']] = $user;
+ }
+
+ $result = [];
+
+ foreach ($courses->toArray() as $course) {
+ $course['cover'] = $baseUrl . $course['cover'];
+ $course['teacher'] = $teachers[$course['teacher_id']] ?? new \stdClass();
+ $result[$course['id']] = [
+ 'id' => $course['id'],
+ 'title' => $course['title'],
+ 'cover' => $course['cover'],
+ 'teacher' => $course['teacher'],
+ ];
+ }
+
+ return $result;
+ }
+
+ public function getChapters(array $lives)
+ {
+ $ids = kg_array_column($lives, 'chapter_id');
+
+ $chapterRepo = new ChapterRepo();
+
+ $chapters = $chapterRepo->findByIds($ids, ['id', 'title']);
+
+ $result = [];
+
+ foreach ($chapters->toArray() as $chapter) {
+ $result[$chapter['id']] = $chapter;
+ }
+
+ return $result;
+ }
+
+}
diff --git a/app/Caches/App.php b/app/Caches/App.php
new file mode 100644
index 00000000..479ca191
--- /dev/null
+++ b/app/Caches/App.php
@@ -0,0 +1,31 @@
+lifetime;
+ }
+
+ public function getKey($id = null)
+ {
+ return "app:{$id}";
+ }
+
+ public function getContent($id = null)
+ {
+ $appRepo = new AppRepo();
+
+ $result = $appRepo->findByAppKey($id);
+
+ return $result ?: null;
+ }
+
+}
diff --git a/app/Console/Tasks/MaintainTask.php b/app/Console/Tasks/MaintainTask.php
index f360db8f..9ac60365 100644
--- a/app/Console/Tasks/MaintainTask.php
+++ b/app/Console/Tasks/MaintainTask.php
@@ -4,6 +4,9 @@ namespace App\Console\Tasks;
use App\Caches\IndexFreeCourseList as IndexFreeCourseListCache;
use App\Caches\IndexNewCourseList as IndexNewCourseListCache;
+use App\Caches\IndexSimpleFreeCourseList as IndexSimpleFreeCourseListCache;
+use App\Caches\IndexSimpleNewCourseList as IndexSimpleNewCourseListCache;
+use App\Caches\IndexSimpleVipCourseList as IndexSimpleVipCourseListCache;
use App\Caches\IndexVipCourseList as IndexVipCourseListCache;
use App\Http\Admin\Services\Setting as SettingService;
use App\Library\Utils\Password as PasswordUtil;
@@ -22,20 +25,41 @@ class MaintainTask extends Task
{
$section = $params[0] ?? null;
+ $site = $this->getSettings('site');
+
+ $type = $site['index_tpl_type'] ?: 'full';
+
if (!$section || $section == 'new_course') {
- $cache = new IndexNewCourseListCache();
- $cache->rebuild();
+ if ($type == 'full') {
+ $cache = new IndexNewCourseListCache();
+ $cache->rebuild();
+ } else {
+ $cache = new IndexSimpleNewCourseListCache();
+ $cache->rebuild();
+ }
}
if (!$section || $section == 'free_course') {
- $cache = new IndexFreeCourseListCache();
- $cache->rebuild();
+ if ($type == 'full') {
+ $cache = new IndexFreeCourseListCache();
+ $cache->rebuild();
+ } else {
+ $cache = new IndexSimpleFreeCourseListCache();
+ $cache->rebuild();
+ }
}
if (!$section || $section == 'vip_course') {
- $cache = new IndexVipCourseListCache();
- $cache->rebuild();
+ if ($type == 'full') {
+ $cache = new IndexVipCourseListCache();
+ $cache->rebuild();
+ } else {
+ $cache = new IndexSimpleVipCourseListCache();
+ $cache->rebuild();
+ }
}
+
+ echo 'rebuild index course cache success' . PHP_EOL;
}
/**
diff --git a/app/Console/Tasks/Task.php b/app/Console/Tasks/Task.php
index 6478ed18..350cb5ec 100644
--- a/app/Console/Tasks/Task.php
+++ b/app/Console/Tasks/Task.php
@@ -41,7 +41,7 @@ class Task extends \Phalcon\Cli\Task
{
$appService = new AppService();
- return $appService->getLogger($section);
+ return $appService->getSettings($section);
}
}
diff --git a/app/Console/Tasks/UpgradeTask.php b/app/Console/Tasks/UpgradeTask.php
index 13bb53fb..8700703d 100644
--- a/app/Console/Tasks/UpgradeTask.php
+++ b/app/Console/Tasks/UpgradeTask.php
@@ -43,7 +43,6 @@ class UpgradeTask extends Task
public function resetAnnotationAction()
{
$config = $this->getConfig();
-
$redis = $this->getRedis();
$dbIndex = $config->path('annotation.db');
@@ -56,9 +55,7 @@ class UpgradeTask extends Task
echo "start reset annotation..." . PHP_EOL;
if (count($keys) > 0) {
-
$keys = $this->handlePhKeys($keys);
-
$redis->del(...$keys);
$redis->del($statsKey);
}
@@ -74,7 +71,6 @@ class UpgradeTask extends Task
public function resetMetadataAction()
{
$config = $this->getConfig();
-
$redis = $this->getRedis();
$dbIndex = $config->path('metadata.db');
@@ -87,9 +83,7 @@ class UpgradeTask extends Task
echo "start reset metadata..." . PHP_EOL;
if (count($keys) > 0) {
-
$keys = $this->handlePhKeys($keys);
-
$redis->del(...$keys);
$redis->del($statsKey);
}
diff --git a/app/Http/Admin/Controllers/UploadController.php b/app/Http/Admin/Controllers/UploadController.php
index d180c70a..878b784a 100644
--- a/app/Http/Admin/Controllers/UploadController.php
+++ b/app/Http/Admin/Controllers/UploadController.php
@@ -19,16 +19,16 @@ class UploadController extends Controller
$file = $service->uploadCoverImage();
- if ($file) {
- return $this->jsonSuccess([
- 'data' => [
- 'src' => $service->getImageUrl($file->path),
- 'title' => $file->name,
- ]
- ]);
- } else {
+ if (!$file) {
return $this->jsonError(['msg' => '上传文件失败']);
}
+
+ $data = [
+ 'src' => $service->getImageUrl($file->path),
+ 'title' => $file->name,
+ ];
+
+ return $this->jsonSuccess(['data' => $data]);
}
/**
@@ -40,16 +40,16 @@ class UploadController extends Controller
$file = $service->uploadAvatarImage();
- if ($file) {
- return $this->jsonSuccess([
- 'data' => [
- 'src' => $service->getImageUrl($file->path),
- 'title' => $file->name,
- ]
- ]);
- } else {
+ if (!$file) {
return $this->jsonError(['msg' => '上传文件失败']);
}
+
+ $data = [
+ 'src' => $service->getImageUrl($file->path),
+ 'title' => $file->name,
+ ];
+
+ return $this->jsonSuccess(['data' => $data]);
}
/**
@@ -61,16 +61,16 @@ class UploadController extends Controller
$file = $service->uploadContentImage();
- if ($file) {
- return $this->jsonSuccess([
- 'data' => [
- 'src' => $service->getImageUrl($file->path),
- 'title' => $file->name,
- ]
- ]);
- } else {
+ if (!$file) {
return $this->jsonError(['msg' => '上传文件失败']);
}
+
+ $data = [
+ 'src' => $service->getImageUrl($file->path),
+ 'title' => $file->name,
+ ];
+
+ return $this->jsonSuccess(['data' => $data]);
}
/**
diff --git a/app/Http/Admin/Services/AuthMenu.php b/app/Http/Admin/Services/AuthMenu.php
index 8abcfdc1..1d69cd21 100644
--- a/app/Http/Admin/Services/AuthMenu.php
+++ b/app/Http/Admin/Services/AuthMenu.php
@@ -77,7 +77,7 @@ class AuthMenu extends Component
foreach ($routeIdMapping as $key => $value) {
$ids = explode('-', $value);
- if (in_array($key, $this->authInfo['routes'])) {
+ if (is_array($this->authInfo['routes']) && in_array($key, $this->authInfo['routes'])) {
$owned1stLevelIds[] = $ids[0];
$owned2ndLevelIds[] = $ids[0] . '-' . $ids[1];
$owned3rdLevelIds[] = $value;
diff --git a/app/Http/Admin/Services/AuthNode.php b/app/Http/Admin/Services/AuthNode.php
index 86b54761..43fb64fd 100644
--- a/app/Http/Admin/Services/AuthNode.php
+++ b/app/Http/Admin/Services/AuthNode.php
@@ -671,7 +671,7 @@ class AuthNode extends Service
{
return [
'id' => '5',
- 'title' => '系统配置',
+ 'title' => '系统管理',
'children' => [
[
'id' => '5-1',
diff --git a/app/Http/Admin/Views/public/login.volt b/app/Http/Admin/Views/public/login.volt
index 9b51cbd7..adcbcbc1 100644
--- a/app/Http/Admin/Views/public/login.volt
+++ b/app/Http/Admin/Views/public/login.volt
@@ -29,7 +29,6 @@
{% endif %}
-
diff --git a/app/Http/Admin/Views/setting/storage.volt b/app/Http/Admin/Views/setting/storage.volt
index 34ab1e62..9b1d2d6e 100644
--- a/app/Http/Admin/Views/setting/storage.volt
+++ b/app/Http/Admin/Views/setting/storage.volt
@@ -55,6 +55,10 @@
cover_270 |
mageMogr2/thumbnail/270x/interlace/0 |
+
+ content_800 |
+ mageMogr2/thumbnail/800x/interlace/0 |
+
slide_1100 |
imageMogr2/thumbnail/1100x/interlace/0 |
diff --git a/app/Http/Api/Controllers/AccountController.php b/app/Http/Api/Controllers/AccountController.php
new file mode 100644
index 00000000..6ce03879
--- /dev/null
+++ b/app/Http/Api/Controllers/AccountController.php
@@ -0,0 +1,113 @@
+register();
+
+ return $this->jsonSuccess(['token' => $token]);
+ }
+
+ /**
+ * @Post("/password/login", name="api.account.register")
+ */
+ public function loginByPasswordAction()
+ {
+ $service = new AccountService();
+
+ $token = $service->loginByPassword();
+
+ return $this->jsonSuccess(['token' => $token]);
+ }
+
+ /**
+ * @Post("/verify/login", name="api.account.verify_login")
+ */
+ public function loginByVerifyAction()
+ {
+ $service = new AccountService();
+
+ $token = $service->loginByVerify();
+
+ return $this->jsonSuccess(['token' => $token]);
+ }
+
+ /**
+ * @Get("/logout", name="api.account.logout")
+ */
+ public function logoutAction()
+ {
+ $service = new AccountService();
+
+ $service->logout();
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/password/reset", name="api.account.reset_pwd")
+ */
+ public function resetPasswordAction()
+ {
+ $service = new PasswordResetService();
+
+ $service->handle();
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/phone/update", name="api.account.update_phone")
+ */
+ public function updatePhoneAction()
+ {
+ $service = new PhoneUpdateService();
+
+ $service->handle();
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/email/update", name="api.account.update_email")
+ */
+ public function updateEmailAction()
+ {
+ $service = new EmailUpdateService();
+
+ $service->handle();
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/password/update", name="api.account.update_pwd")
+ */
+ public function updatePasswordAction()
+ {
+ $service = new PasswordUpdateService();
+
+ $service->handle();
+
+ return $this->jsonSuccess();
+ }
+
+}
diff --git a/app/Http/Api/Controllers/ChapterController.php b/app/Http/Api/Controllers/ChapterController.php
new file mode 100644
index 00000000..d990ac62
--- /dev/null
+++ b/app/Http/Api/Controllers/ChapterController.php
@@ -0,0 +1,83 @@
+handle($id);
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/resources", name="api.chapter.resourses")
+ */
+ public function resourcesAction($id)
+ {
+ $service = new ChapterResourceListService();
+
+ $resources = $service->handle($id);
+
+ return $this->jsonSuccess(['resources' => $resources]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/info", name="api.chapter.info")
+ */
+ public function infoAction($id)
+ {
+ $service = new ChapterInfoService();
+
+ $chapter = $service->handle($id);
+
+ $owned = $chapter['me']['owned'] ?? false;
+
+ if (!$owned) {
+ return $this->jsonError(['msg' => '没有访问章节权限']);
+ }
+
+ return $this->jsonSuccess(['chapter' => $chapter]);
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/like", name="api.chapter.like")
+ */
+ public function likeAction($id)
+ {
+ $service = new ChapterLikeService();
+
+ $service->handle($id);
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/learning", name="api.chapter.learning")
+ */
+ public function learningAction($id)
+ {
+ $service = new ChapterLearningService();
+
+ $service->handle($id);
+
+ return $this->jsonSuccess();
+ }
+
+}
diff --git a/app/Http/Api/Controllers/ConsultController.php b/app/Http/Api/Controllers/ConsultController.php
new file mode 100644
index 00000000..79f3e03c
--- /dev/null
+++ b/app/Http/Api/Controllers/ConsultController.php
@@ -0,0 +1,97 @@
+handle($id);
+
+ return $this->jsonSuccess(['consult' => $consult]);
+ }
+
+ /**
+ * @Post("/create", name="api.consult.create")
+ */
+ public function createAction()
+ {
+ $service = new ConsultCreateService();
+
+ $consult = $service->handle();
+
+ $service = new ConsultInfoService();
+
+ $consult = $service->handle($consult->id);
+
+ return $this->jsonSuccess(['consult' => $consult]);
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/update", name="api.consult.update")
+ */
+ public function updateAction($id)
+ {
+ $service = new ConsultUpdateService();
+
+ $consult = $service->handle($id);
+
+ $service = new ConsultInfoService();
+
+ $consult = $service->handle($consult->id);
+
+ return $this->jsonSuccess(['consult' => $consult]);
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/delete", name="api.consult.delete")
+ */
+ public function deleteAction($id)
+ {
+ $service = new ConsultDeleteService();
+
+ $service->handle($id);
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/like", name="api.consult.like")
+ */
+ public function likeAction($id)
+ {
+ $service = new ConsultLikeService();
+
+ $service->handle($id);
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/unlike", name="api.consult.unlike")
+ */
+ public function unlikeAction($id)
+ {
+ $service = new ConsultLikeService();
+
+ $service->handle($id);
+
+ return $this->jsonSuccess();
+ }
+
+}
diff --git a/app/Http/Api/Controllers/Controller.php b/app/Http/Api/Controllers/Controller.php
index 24ae2d03..d33b4eeb 100644
--- a/app/Http/Api/Controllers/Controller.php
+++ b/app/Http/Api/Controllers/Controller.php
@@ -2,6 +2,7 @@
namespace App\Http\Api\Controllers;
+use App\Services\Auth\Api as AppAuth;
use App\Traits\Response as ResponseTrait;
use App\Traits\Security as SecurityTrait;
use Phalcon\Mvc\Dispatcher;
@@ -14,7 +15,25 @@ class Controller extends \Phalcon\Mvc\Controller
public function beforeExecuteRoute(Dispatcher $dispatcher)
{
- $this->checkRateLimit();
+ if ($this->request->getHeader('Origin')) {
+ $this->setCors();
+ }
+
+ if (!$this->request->isOptions()) {
+ $this->checkRateLimit();
+ }
+
+ return true;
+ }
+
+ protected function getAuthUser()
+ {
+ /**
+ * @var AppAuth $auth
+ */
+ $auth = $this->getDI()->get('auth');
+
+ return $auth->getCurrentUser();
}
}
diff --git a/app/Http/Api/Controllers/CourseController.php b/app/Http/Api/Controllers/CourseController.php
new file mode 100644
index 00000000..a130533b
--- /dev/null
+++ b/app/Http/Api/Controllers/CourseController.php
@@ -0,0 +1,128 @@
+handle();
+
+ return $this->jsonSuccess(['categories' => $categories]);
+ }
+
+ /**
+ * @Get("/list", name="api.course.list")
+ */
+ public function listAction()
+ {
+ $service = new CourseListService();
+
+ $pager = $service->handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/info", name="api.course.info")
+ */
+ public function infoAction($id)
+ {
+ $service = new CourseInfoService();
+
+ $course = $service->handle($id);
+
+ return $this->jsonSuccess(['course' => $course]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/chapters", name="api.course.chapters")
+ */
+ public function chaptersAction($id)
+ {
+ $service = new CourseChapterListService();
+
+ $chapters = $service->handle($id);
+
+ return $this->jsonSuccess(['chapters' => $chapters]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/packages", name="api.course.packages")
+ */
+ public function packagesAction($id)
+ {
+ $service = new CoursePackageListService();
+
+ $packages = $service->handle($id);
+
+ return $this->jsonSuccess(['packages' => $packages]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/consults", name="api.course.consults")
+ */
+ public function consultsAction($id)
+ {
+ $service = new CourseConsultListService();
+
+ $pager = $service->handle($id);
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/reviews", name="api.course.reviews")
+ */
+ public function reviewsAction($id)
+ {
+ $service = new CourseReviewListService();
+
+ $pager = $service->handle($id);
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/favorite", name="api.course.favorite")
+ */
+ public function favoriteAction($id)
+ {
+ $service = new CourseFavoriteService();
+
+ $service->handle($id);
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/unfavorite", name="api.course.unfavorite")
+ */
+ public function unfavoriteAction($id)
+ {
+ $service = new CourseFavoriteService();
+
+ $service->handle($id);
+
+ return $this->jsonSuccess();
+ }
+
+}
diff --git a/app/Http/Api/Controllers/HelpController.php b/app/Http/Api/Controllers/HelpController.php
new file mode 100644
index 00000000..c64e78da
--- /dev/null
+++ b/app/Http/Api/Controllers/HelpController.php
@@ -0,0 +1,38 @@
+handle();
+
+ return $this->jsonSuccess(['helps' => $helps]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/info", name="api.help.info")
+ */
+ public function infoAction($id)
+ {
+ $service = new HelpInfoService();
+
+ $help = $service->handle($id);
+
+ return $this->jsonSuccess(['help' => $help]);
+ }
+
+}
diff --git a/app/Http/Api/Controllers/ImGroupController.php b/app/Http/Api/Controllers/ImGroupController.php
new file mode 100644
index 00000000..330d7c31
--- /dev/null
+++ b/app/Http/Api/Controllers/ImGroupController.php
@@ -0,0 +1,51 @@
+handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/info", name="api.im_group.info")
+ */
+ public function infoAction($id)
+ {
+ $service = new GroupInfoService();
+
+ $group = $service->handle($id);
+
+ return $this->jsonSuccess(['group' => $group]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/users", name="api.im_group.users")
+ */
+ public function usersAction($id)
+ {
+ $service = new GroupUserListService();
+
+ $pager = $service->handle($id);
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+}
diff --git a/app/Http/Api/Controllers/IndexController.php b/app/Http/Api/Controllers/IndexController.php
index b7c9f968..1aba3a64 100644
--- a/app/Http/Api/Controllers/IndexController.php
+++ b/app/Http/Api/Controllers/IndexController.php
@@ -2,39 +2,63 @@
namespace App\Http\Api\Controllers;
+use App\Caches\IndexSimpleFreeCourseList;
+use App\Caches\IndexSimpleNewCourseList;
+use App\Caches\IndexSimpleVipCourseList;
+use App\Caches\IndexSlideList;
+
/**
- * @RoutePrefix("/api")
+ * @RoutePrefix("/api/index")
*/
class IndexController extends Controller
{
/**
- * @Get("/", name="api.index")
+ * @Get("/slides", name="api.index.slides")
*/
- public function indexAction()
+ public function slidesAction()
{
- return $this->jsonSuccess(['data' => 'ok']);
+ $cache = new IndexSlideList();
+
+ $slides = $cache->get();
+
+ return $this->jsonSuccess(['slides' => $slides]);
}
/**
- * @Get("/routes", name="api.routes")
+ * @Get("/courses/new", name="api.index.new_courses")
*/
- public function routesAction()
+ public function newCoursesAction()
{
- $definitions = [];
+ $cache = new IndexSimpleNewCourseList();
- $routes = $this->router->getRoutes();
+ $courses = $cache->get();
- foreach ($routes as $route) {
- if (strpos($route->getPattern(), '/api') !== false) {
- $definitions[] = [
- 'pattern' => $route->getPattern(),
- 'methods' => $route->getHttpMethods(),
- ];
- }
- }
+ return $this->jsonSuccess(['courses' => $courses]);
+ }
- return $this->jsonSuccess(['routes' => $definitions]);
+ /**
+ * @Get("/courses/free", name="api.index.free_courses")
+ */
+ public function freeCoursesAction()
+ {
+ $cache = new IndexSimpleFreeCourseList();
+
+ $courses = $cache->get();
+
+ return $this->jsonSuccess(['courses' => $courses]);
+ }
+
+ /**
+ * @Get("/courses/vip", name="api.index.vip_courses")
+ */
+ public function vipCoursesAction()
+ {
+ $cache = new IndexSimpleVipCourseList();
+
+ $courses = $cache->get();
+
+ return $this->jsonSuccess(['courses' => $courses]);
}
}
diff --git a/app/Http/Api/Controllers/LiveController.php b/app/Http/Api/Controllers/LiveController.php
new file mode 100644
index 00000000..520fb26b
--- /dev/null
+++ b/app/Http/Api/Controllers/LiveController.php
@@ -0,0 +1,86 @@
+handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/chats", name="api.live.chats")
+ */
+ public function chatsAction($id)
+ {
+ $service = new LiveChapterService();
+
+ $chats = $service->getRecentChats($id);
+
+ return $this->jsonSuccess(['chats' => $chats]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/stats", name="api.live.stats")
+ */
+ public function statsAction($id)
+ {
+ $service = new LiveChapterService();
+
+ $stats = $service->getStats($id);
+
+ return $this->jsonSuccess(['stats' => $stats]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/status", name="api.live.status")
+ */
+ public function statusAction($id)
+ {
+ $service = new LiveChapterService();
+
+ $status = $service->getStatus($id);
+
+ return $this->jsonSuccess(['status' => $status]);
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/user/bind", name="api.live.bind_user")
+ */
+ public function bindUserAction($id)
+ {
+ $service = new LiveChapterService();
+
+ $service->bindUser($id);
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/msg/send", name="api.live.send_msg")
+ */
+ public function sendMessageAction($id)
+ {
+ $service = new LiveChapterService();
+
+ $message = $service->sendMessage($id);
+
+ return $this->jsonSuccess(['message' => $message]);
+ }
+
+}
diff --git a/app/Http/Api/Controllers/OrderController.php b/app/Http/Api/Controllers/OrderController.php
new file mode 100644
index 00000000..5aeb68fe
--- /dev/null
+++ b/app/Http/Api/Controllers/OrderController.php
@@ -0,0 +1,76 @@
+request->getQuery('sn', 'string');
+
+ $service = new OrderInfoService();
+
+ $order = $service->handle($sn);
+
+ return $this->jsonSuccess(['order' => $order]);
+ }
+
+ /**
+ * @Get("/confirm", name="api.order.confirm")
+ */
+ public function confirmAction()
+ {
+ $itemId = $this->request->getQuery('item_id', 'int');
+ $itemType = $this->request->getQuery('item_type', 'int');
+
+ $service = new OrderConfirmService();
+
+ $confirm = $service->handle($itemId, $itemType);
+
+ return $this->jsonSuccess(['confirm' => $confirm]);
+
+ }
+
+ /**
+ * @Post("/create", name="api.order.create")
+ */
+ public function createAction()
+ {
+ $service = new OrderCreateService();
+
+ $order = $service->handle();
+
+ $service = new OrderInfoService();
+
+ $order = $service->handle($order->sn);
+
+ return $this->jsonSuccess(['order' => $order]);
+ }
+
+ /**
+ * @Post("/cancel", name="api.order.cancel")
+ */
+ public function cancelAction()
+ {
+ $sn = $this->request->getPost('sn', 'string');
+
+ $service = new OrderCancelService();
+
+ $order = $service->handle($sn);
+
+ return $this->jsonSuccess(['order' => $order]);
+ }
+
+}
diff --git a/app/Http/Api/Controllers/PageController.php b/app/Http/Api/Controllers/PageController.php
new file mode 100644
index 00000000..255e82f4
--- /dev/null
+++ b/app/Http/Api/Controllers/PageController.php
@@ -0,0 +1,25 @@
+handle($id);
+
+ return $this->jsonSuccess(['page' => $page]);
+ }
+
+}
diff --git a/app/Http/Api/Controllers/PublicController.php b/app/Http/Api/Controllers/PublicController.php
index f2f0a85c..31cd3577 100644
--- a/app/Http/Api/Controllers/PublicController.php
+++ b/app/Http/Api/Controllers/PublicController.php
@@ -2,14 +2,107 @@
namespace App\Http\Api\Controllers;
+use App\Services\Logic\Reward\OptionList as RewardOptionList;
+use App\Services\Logic\Vip\OptionList as VipOptionList;
+use App\Services\Service as AppService;
use App\Traits\Response as ResponseTrait;
/**
* @RoutePrefix("/api")
*/
-class PublicController extends \Phalcon\Mvc\Controller
+class PublicController extends Controller
{
use ResponseTrait;
+ /**
+ * @Options("/{match:(.*)}", name="api.match_options")
+ */
+ public function corsAction()
+ {
+ $this->response->setStatusCode(204);
+
+ return $this->response;
+ }
+
+ /**
+ * @Get("/now", name="api.public.now")
+ */
+ public function nowAction()
+ {
+ return $this->jsonSuccess(['now' => time()]);
+ }
+
+ /**
+ * @Get("/socket/info", name="api.public.socket_info")
+ */
+ public function socketInfoAction()
+ {
+ $service = new AppService();
+
+ $websocket = $service->getConfig()->get('websocket');
+
+ $content = [];
+
+ if ($this->request->isSecure()) {
+ $content['connect_url'] = sprintf('wss://%s/wss', $this->request->getHttpHost());
+ } else {
+ $content['connect_url'] = sprintf('ws://%s', $websocket->connect_address);
+ }
+
+ $content['ping_interval'] = $websocket->ping_interval;
+
+ return $this->jsonSuccess(['socket' => $content]);
+ }
+
+ /**
+ * @Get("/site/info", name="api.public.site_info")
+ */
+ public function siteInfoAction()
+ {
+ $service = new AppService();
+
+ $site = $service->getSettings('site');
+
+ return $this->jsonSuccess(['site' => $site]);
+ }
+
+ /**
+ * @Get("/captcha/info", name="api.public.captcha_info")
+ */
+ public function captchaInfoAction()
+ {
+ $service = new AppService();
+
+ $captcha = $service->getSettings('captcha');
+
+ unset($captcha['secret_key']);
+
+ return $this->jsonSuccess(['captcha' => $captcha]);
+ }
+
+ /**
+ * @Get("/reward/options", name="api.public.reward_options")
+ */
+ public function rewardOptionsAction()
+ {
+ $service = new RewardOptionList();
+
+ $options = $service->handle();
+
+ return $this->jsonSuccess(['options' => $options]);
+ }
+
+ /**
+ * @Get("/vip/options", name="api.public.vip_options")
+ */
+ public function vipOptionsAction()
+ {
+ $service = new VipOptionList();
+
+ $options = $service->handle();
+
+ return $this->jsonSuccess(['options' => $options]);
+ }
+
}
diff --git a/app/Http/Api/Controllers/RefundController.php b/app/Http/Api/Controllers/RefundController.php
new file mode 100644
index 00000000..018cf1cf
--- /dev/null
+++ b/app/Http/Api/Controllers/RefundController.php
@@ -0,0 +1,78 @@
+request->getQuery('sn', 'string');
+
+ $service = new RefundConfirmService();
+
+ $confirm = $service->handle($sn);
+
+ return $this->jsonSuccess(['confirm' => $confirm]);
+ }
+
+ /**
+ * @Get("/info", name="api.refund.info")
+ */
+ public function infoAction()
+ {
+ $sn = $this->request->getQuery('sn', 'string');
+
+ $service = new RefundInfoService();
+
+ $refund = $service->handle($sn);
+
+ return $this->jsonSuccess(['refund' => $refund]);
+ }
+
+ /**
+ * @Post("/create", name="api.refund.create")
+ */
+ public function createAction()
+ {
+ $service = new RefundCreateService();
+
+ $refund = $service->handle();
+
+ $service = new RefundInfoService();
+
+ $refund = $service->handle($refund->sn);
+
+ return $this->jsonSuccess(['refund' => $refund]);
+ }
+
+ /**
+ * @Post("/cancel", name="api.refund.cancel")
+ */
+ public function cancelAction()
+ {
+ $sn = $this->request->getPost('sn', 'string');
+
+ $service = new RefundCancelService();
+
+ $service->handle($sn);
+
+ $service = new RefundInfoService();
+
+ $refund = $service->handle($sn);
+
+ return $this->jsonSuccess(['refund' => $refund]);
+ }
+
+}
diff --git a/app/Http/Api/Controllers/ReviewController.php b/app/Http/Api/Controllers/ReviewController.php
new file mode 100644
index 00000000..7030ccbf
--- /dev/null
+++ b/app/Http/Api/Controllers/ReviewController.php
@@ -0,0 +1,97 @@
+handle($id);
+
+ return $this->jsonSuccess(['review' => $review]);
+ }
+
+ /**
+ * @Post("/create", name="api.order.create")
+ */
+ public function createAction()
+ {
+ $service = new ReviewCreateService();
+
+ $review = $service->handle();
+
+ $service = new ReviewInfoService();
+
+ $review = $service->handle($review->id);
+
+ return $this->jsonSuccess(['review' => $review]);
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/update", name="api.review.update")
+ */
+ public function updateAction($id)
+ {
+ $service = new ReviewUpdateService();
+
+ $service->handle($id);
+
+ $service = new ReviewInfoService();
+
+ $review = $service->handle($id);
+
+ return $this->jsonSuccess(['review' => $review]);
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/delete", name="api.review.delete")
+ */
+ public function deleteAction($id)
+ {
+ $service = new ReviewDeleteService();
+
+ $service->handle($id);
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/like", name="api.review.like")
+ */
+ public function likeAction($id)
+ {
+ $service = new ReviewLikeService();
+
+ $service->handle($id);
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/{id:[0-9]+}/unlike", name="api.review.unlike")
+ */
+ public function unlikeAction($id)
+ {
+ $service = new ReviewLikeService();
+
+ $service->handle($id);
+
+ return $this->jsonSuccess();
+ }
+
+}
diff --git a/app/Http/Api/Controllers/SearchController.php b/app/Http/Api/Controllers/SearchController.php
new file mode 100644
index 00000000..3f25c42a
--- /dev/null
+++ b/app/Http/Api/Controllers/SearchController.php
@@ -0,0 +1,61 @@
+request->get('query', ['trim', 'string']);
+ $type = $this->request->get('type', ['trim', 'string'], 'course');
+
+ $pager = [
+ 'total_pages' => 0,
+ 'total_items' => 0,
+ 'items' => [],
+ ];
+
+ if (empty($query)) {
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ $service = $this->getSearchService($type);
+
+ $pager = $service->search();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @param string $type
+ * @return CourseSearchService|GroupSearchService|UserSearchService
+ */
+ protected function getSearchService($type)
+ {
+ switch ($type) {
+ case 'group':
+ $service = new GroupSearchService();
+ break;
+ case 'user':
+ $service = new UserSearchService();
+ break;
+ default:
+ $service = new CourseSearchService();
+ break;
+ }
+
+ return $service;
+ }
+
+}
diff --git a/app/Http/Api/Controllers/TeacherController.php b/app/Http/Api/Controllers/TeacherController.php
new file mode 100644
index 00000000..f9c000a7
--- /dev/null
+++ b/app/Http/Api/Controllers/TeacherController.php
@@ -0,0 +1,51 @@
+handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/info", name="api.teacher.info")
+ */
+ public function infoAction($id)
+ {
+ $service = new TeacherInfoService();
+
+ $teacher = $service->handle($id);
+
+ return $this->jsonSuccess(['teacher' => $teacher]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/courses", name="api.teacher.courses")
+ */
+ public function coursesAction($id)
+ {
+ $service = new CourseListService();
+
+ $pager = $service->handle($id);
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+}
diff --git a/app/Http/Api/Controllers/TradeController.php b/app/Http/Api/Controllers/TradeController.php
new file mode 100644
index 00000000..f9252452
--- /dev/null
+++ b/app/Http/Api/Controllers/TradeController.php
@@ -0,0 +1,88 @@
+request->getQuery('sn', 'string');
+
+ $service = new TradeInfoService();
+
+ $trade = $service->handle($sn);
+
+ return $this->jsonSuccess(['trade' => $trade]);
+ }
+
+ /**
+ * @Get("/h5/pay", name="api.trade.h5_pay")
+ */
+ public function h5PayAction()
+ {
+ $sn = $this->request->getQuery('sn', 'string');
+
+ $service = new TradeService();
+
+ $response = $service->h5Pay($sn);
+
+ if (!$response) {
+ echo "H5支付跳转失败,请回退重试";
+ }
+
+ $response->send();
+
+ exit();
+ }
+
+ /**
+ * @Post("/h5/create", name="api.trade.h5_create")
+ */
+ public function createH5TradeAction()
+ {
+ $service = new TradeService();
+
+ $trade = $service->createH5Trade();
+
+ $service = new TradeInfoService();
+
+ $trade = $service->handle($trade->sn);
+
+ return $this->jsonSuccess(['trade' => $trade]);
+ }
+
+ /**
+ * @Post("/mp/create", name="api.trade.mp_create")
+ */
+ public function createMpTradeAction()
+ {
+ $service = new TradeService();
+
+ $content = $service->createMpTrade();
+
+ return $this->jsonSuccess($content);
+ }
+
+ /**
+ * @Post("/app/create", name="api.trade.app_create")
+ */
+ public function createAppTradeAction()
+ {
+ $service = new TradeService();
+
+ $content = $service->createMpTrade();
+
+ return $this->jsonSuccess($content);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Http/Api/Controllers/UploadController.php b/app/Http/Api/Controllers/UploadController.php
new file mode 100644
index 00000000..40cf7a61
--- /dev/null
+++ b/app/Http/Api/Controllers/UploadController.php
@@ -0,0 +1,50 @@
+uploadAvatarImage();
+
+ if (!$file) {
+ return $this->jsonError(['msg' => '上传文件失败']);
+ }
+
+ $data = [
+ 'src' => $service->getImageUrl($file->path),
+ 'title' => $file->name,
+ ];
+
+ return $this->jsonSuccess(['data' => $data]);
+ }
+
+ /**
+ * @Post("/im/img", name="api.upload.im_img")
+ */
+ public function uploadImImageAction()
+ {
+ }
+
+ /**
+ * @Post("/im/file", name="api.upload.im_file")
+ */
+ public function uploadImFileAction()
+ {
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/Http/Api/Controllers/UserConsoleController.php b/app/Http/Api/Controllers/UserConsoleController.php
new file mode 100644
index 00000000..671ff955
--- /dev/null
+++ b/app/Http/Api/Controllers/UserConsoleController.php
@@ -0,0 +1,155 @@
+handle();
+
+ return $this->jsonSuccess(['profile' => $profile]);
+ }
+
+ /**
+ * @Get("/account", name="api.uc.account")
+ */
+ public function accountAction()
+ {
+ $service = new AccountInfoService();
+
+ $account = $service->handle();
+
+ return $this->jsonSuccess(['account' => $account]);
+ }
+
+ /**
+ * @Get("/courses", name="api.uc.courses")
+ */
+ public function coursesAction()
+ {
+ $service = new CourseListService();
+
+ $pager = $service->handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/favorites", name="api.uc.favorites")
+ */
+ public function favoritesAction()
+ {
+ $service = new FavoriteListService();
+
+ $pager = $service->handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/consults", name="api.uc.consults")
+ */
+ public function consultsAction()
+ {
+ $service = new ConsultListService();
+
+ $pager = $service->handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/reviews", name="api.uc.reviews")
+ */
+ public function reviewsAction()
+ {
+ $service = new ReviewListService();
+
+ $pager = $service->handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/orders", name="api.uc.orders")
+ */
+ public function ordersAction()
+ {
+ $service = new OrderListService();
+
+ $pager = $service->handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/refunds", name="api.uc.refunds")
+ */
+ public function refundsAction()
+ {
+ $service = new RefundListService();
+
+ $pager = $service->handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/friends", name="api.uc.friends")
+ */
+ public function friendsAction()
+ {
+ $service = new FriendListService();
+
+ $pager = $service->handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/groups", name="api.uc.groups")
+ */
+ public function groupsAction()
+ {
+ $service = new GroupListService();
+
+ $pager = $service->handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Post("/profile/update", name="api.uc.update_profile")
+ */
+ public function updateProfileAction()
+ {
+ $service = new ProfileUpdateService();
+
+ $service->handle();
+
+ return $this->jsonSuccess();
+ }
+
+}
diff --git a/app/Http/Api/Controllers/UserController.php b/app/Http/Api/Controllers/UserController.php
new file mode 100644
index 00000000..8bd37126
--- /dev/null
+++ b/app/Http/Api/Controllers/UserController.php
@@ -0,0 +1,77 @@
+handle($id);
+
+ return $this->jsonSuccess(['user' => $user]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/courses", name="api.user.courses")
+ */
+ public function coursesAction($id)
+ {
+ $service = new UserCourseListService();
+
+ $pager = $service->handle($id);
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/favorites", name="api.user.favorites")
+ */
+ public function favoritesAction($id)
+ {
+ $service = new UserFavoriteListService();
+
+ $pager = $service->handle($id);
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/friends", name="api.user.friends")
+ */
+ public function friendsAction($id)
+ {
+ $service = new UserFriendListService();
+
+ $pager = $service->handle($id);
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/groups", name="api.user.groups")
+ */
+ public function groupsAction($id)
+ {
+ $service = new UserGroupListService();
+
+ $pager = $service->handle($id);
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+}
diff --git a/app/Http/Api/Controllers/VerifyController.php b/app/Http/Api/Controllers/VerifyController.php
new file mode 100644
index 00000000..5594e7ab
--- /dev/null
+++ b/app/Http/Api/Controllers/VerifyController.php
@@ -0,0 +1,38 @@
+handle();
+
+ return $this->jsonSuccess();
+ }
+
+ /**
+ * @Post("/email/code", name="api.verify.email_code")
+ */
+ public function emailCodeAction()
+ {
+ $service = new EmailCodeService();
+
+ $service->handle();
+
+ return $this->jsonSuccess();
+ }
+
+}
diff --git a/app/Http/Api/Controllers/VipController.php b/app/Http/Api/Controllers/VipController.php
new file mode 100644
index 00000000..a9854b11
--- /dev/null
+++ b/app/Http/Api/Controllers/VipController.php
@@ -0,0 +1,40 @@
+request->getQuery('type', 'string', 'discount');
+
+ $service = new VipCourseListService();
+
+ $pager = $service->handle($type);
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+ /**
+ * @Get("/users", name="api.vip.users")
+ */
+ public function usersAction()
+ {
+ $service = new VipUserListService();
+
+ $pager = $service->handle();
+
+ return $this->jsonSuccess(['pager' => $pager]);
+ }
+
+}
diff --git a/app/Http/Api/Module.php b/app/Http/Api/Module.php
index 3ea77f24..684e10e6 100644
--- a/app/Http/Api/Module.php
+++ b/app/Http/Api/Module.php
@@ -2,7 +2,7 @@
namespace App\Http\Api;
-use App\Services\Auth\Api as ApiAuth;
+use App\Services\Auth\Api as AppAuth;
use Phalcon\DiInterface;
use Phalcon\Mvc\ModuleDefinitionInterface;
use Phalcon\Mvc\View;
@@ -24,7 +24,7 @@ class Module implements ModuleDefinitionInterface
});
$di->setShared('auth', function () {
- return new ApiAuth();
+ return new AppAuth();
});
}
diff --git a/app/Http/Api/Services/Account.php b/app/Http/Api/Services/Account.php
new file mode 100644
index 00000000..baf537f8
--- /dev/null
+++ b/app/Http/Api/Services/Account.php
@@ -0,0 +1,81 @@
+auth = $this->getDI()->get('auth');
+ }
+
+ public function register()
+ {
+ $service = new RegisterService();
+
+ $account = $service->handle();
+
+ $userRepo = new UserRepo();
+
+ $user = $userRepo->findById($account->id);
+
+ return $this->auth->saveAuthInfo($user);
+ }
+
+ public function loginByPassword()
+ {
+ $post = $this->request->getPost();
+
+ /**
+ * 使用[account|phone|email]做账户名字段兼容
+ */
+ if (isset($post['phone'])) {
+ $post['account'] = $post['phone'];
+ } elseif (isset($post['email'])) {
+ $post['account'] = $post['email'];
+ }
+
+ $validator = new AccountValidator();
+
+ $user = $validator->checkUserLogin($post['account'], $post['password']);
+
+ return $this->auth->saveAuthInfo($user);
+ }
+
+ public function loginByVerify()
+ {
+ $post = $this->request->getPost();
+
+ /**
+ * 使用[account|phone|email]做账户名字段兼容
+ */
+ if (isset($post['phone'])) {
+ $post['account'] = $post['phone'];
+ } elseif (isset($post['email'])) {
+ $post['account'] = $post['email'];
+ }
+
+ $validator = new AccountValidator();
+
+ $user = $validator->checkVerifyLogin($post['account'], $post['verify_code']);
+
+ return $this->auth->saveAuthInfo($user);
+ }
+
+ public function logout()
+ {
+ $this->auth->clearAuthInfo();
+ }
+
+}
diff --git a/app/Http/Api/Services/Login.php b/app/Http/Api/Services/Login.php
deleted file mode 100644
index 7ffc50fe..00000000
--- a/app/Http/Api/Services/Login.php
+++ /dev/null
@@ -1,33 +0,0 @@
-checkUserLogin($name, $password);
-
- $auth = new ApiAuth();
-
- return $auth->saveAuthInfo($user);
- }
-
- public function loginByVerify($name, $code)
- {
- $validator = new AccountValidator();
-
- $user = $validator->checkVerifyLogin($name, $code);
-
- $auth = new ApiAuth();
-
- return $auth->saveAuthInfo($user);
- }
-
-}
diff --git a/app/Http/Api/Services/Logout.php b/app/Http/Api/Services/Logout.php
deleted file mode 100644
index 76877ce8..00000000
--- a/app/Http/Api/Services/Logout.php
+++ /dev/null
@@ -1,17 +0,0 @@
-clearAuthInfo();
- }
-
-}
diff --git a/app/Http/Api/Services/Trade.php b/app/Http/Api/Services/Trade.php
new file mode 100644
index 00000000..74b3f7ae
--- /dev/null
+++ b/app/Http/Api/Services/Trade.php
@@ -0,0 +1,125 @@
+checkTradeBySn($sn);
+
+ $response = null;
+
+ if ($trade->channel == TradeModel::CHANNEL_ALIPAY) {
+ $alipay = new Alipay();
+ $response = $alipay->wap($trade);
+ } elseif ($trade->channel == TradeModel::CHANNEL_WXPAY) {
+ $wxpay = new Wxpay();
+ $response = $wxpay->wap($trade);
+ }
+
+ return $response;
+ }
+
+ public function createH5Trade()
+ {
+ $post = $this->request->getPost();
+
+ $validator = new ClientValidator();
+
+ $platform = $this->getPlatform();
+
+ $validator->checkH5Platform($platform);
+
+ $order = $this->checkOrderBySn($post['order_sn']);
+
+ $user = $this->getLoginUser();
+
+ $validator = new TradeValidator();
+
+ $channel = $validator->checkChannel($post['channel']);
+
+ $trade = new TradeModel();
+
+ $trade->subject = $order->subject;
+ $trade->amount = $order->amount;
+ $trade->channel = $channel;
+ $trade->order_id = $order->id;
+ $trade->owner_id = $user->id;
+
+ $trade->create();
+
+ return $trade;
+ }
+
+ public function createMpTrade()
+ {
+ $post = $this->request->getPost();
+
+ $validator = new ClientValidator();
+
+ $platform = $this->getPlatform();
+
+ $platform = $validator->checkMpPlatform($platform);
+
+ $order = $this->checkOrderBySn($post['order_sn']);
+
+ $user = $this->getLoginUser();
+
+ $channel = TradeModel::CHANNEL_WXPAY;
+
+ if ($platform == ClientModel::TYPE_MP_ALIPAY) {
+ $channel = TradeModel::CHANNEL_ALIPAY;
+ } elseif ($platform == ClientModel::TYPE_MP_WEIXIN) {
+ $channel = TradeModel::CHANNEL_WXPAY;
+ }
+
+ $trade = new TradeModel();
+
+ $trade->subject = $order->subject;
+ $trade->amount = $order->amount;
+ $trade->channel = $channel;
+ $trade->order_id = $order->id;
+ $trade->owner_id = $user->id;
+
+ $trade->create();
+
+ $response = null;
+
+ if ($post['channel'] == TradeModel::CHANNEL_ALIPAY) {
+ $alipay = new Alipay();
+ $buyerId = '';
+ $response = $alipay->mini($trade, $buyerId);
+ } elseif ($post['channel'] == TradeModel::CHANNEL_WXPAY) {
+ $wxpay = new Wxpay();
+ $openId = '';
+ $response = $wxpay->mini($trade, $openId);
+ }
+
+ return $response;
+ }
+
+ public function createAppTrade()
+ {
+
+ }
+
+ protected function getPlatform()
+ {
+ return $this->request->getHeader('X-Platform');
+ }
+
+}
diff --git a/app/Http/Home/Controllers/AccountController.php b/app/Http/Home/Controllers/AccountController.php
index 4e2fc3d0..8dc2d285 100644
--- a/app/Http/Home/Controllers/AccountController.php
+++ b/app/Http/Home/Controllers/AccountController.php
@@ -81,9 +81,7 @@ class AccountController extends Controller
$location = $returnUrl ?: $this->url->get(['for' => 'home.index']);
- $content = ['location' => $location];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['location' => $location]);
}
/**
@@ -99,9 +97,7 @@ class AccountController extends Controller
$location = $returnUrl ?: $this->url->get(['for' => 'home.index']);
- $content = ['location' => $location];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['location' => $location]);
}
/**
diff --git a/app/Http/Home/Controllers/ChapterController.php b/app/Http/Home/Controllers/ChapterController.php
index dace273d..4cc0cc3c 100644
--- a/app/Http/Home/Controllers/ChapterController.php
+++ b/app/Http/Home/Controllers/ChapterController.php
@@ -29,6 +29,18 @@ class ChapterController extends Controller
$this->view->setVar('items', $items);
}
+ /**
+ * @Get("/{id:[0-9]+}/danmus", name="home.chapter.danmus")
+ */
+ public function danmusAction($id)
+ {
+ $service = new ChapterDanmuListService();
+
+ $items = $service->handle($id);
+
+ return $this->jsonSuccess(['items' => $items]);
+ }
+
/**
* @Get("/{id:[0-9]+}", name="home.chapter.show")
*/
@@ -75,18 +87,6 @@ class ChapterController extends Controller
$this->view->setVar('catalog', $catalog);
}
- /**
- * @Get("/{id:[0-9]+}/danmu", name="home.chapter.danmu")
- */
- public function danmuAction($id)
- {
- $service = new ChapterDanmuListService();
-
- $items = $service->handle($id);
-
- return $this->jsonSuccess(['items' => $items]);
- }
-
/**
* @Post("/{id:[0-9]+}/like", name="home.chapter.like")
*/
@@ -98,9 +98,7 @@ class ChapterController extends Controller
$msg = $like->deleted == 0 ? '点赞成功' : '取消点赞成功';
- $content = ['msg' => $msg];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => $msg]);
}
/**
diff --git a/app/Http/Home/Controllers/ConsultController.php b/app/Http/Home/Controllers/ConsultController.php
index e31c1f32..93779f46 100644
--- a/app/Http/Home/Controllers/ConsultController.php
+++ b/app/Http/Home/Controllers/ConsultController.php
@@ -58,9 +58,12 @@ class ConsultController extends Controller
$service = new ConsultInfoService();
- $service->handle($consult->id);
+ $consult = $service->handle($consult->id);
- $content = ['msg' => '提交咨询成功'];
+ $content = [
+ 'consult' => $consult,
+ 'msg' => '提交咨询成功',
+ ];
return $this->jsonSuccess($content);
}
@@ -72,9 +75,16 @@ class ConsultController extends Controller
{
$service = new ConsultUpdateService();
- $service->handle($id);
+ $consult = $service->handle($id);
- $content = ['msg' => '更新咨询成功'];
+ $service = new ConsultInfoService();
+
+ $consult = $service->handle($consult->id);
+
+ $content = [
+ 'consult' => $consult,
+ 'msg' => '更新咨询成功',
+ ];
return $this->jsonSuccess($content);
}
@@ -88,9 +98,7 @@ class ConsultController extends Controller
$service->handle($id);
- $content = ['msg' => '删除咨询成功'];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => '删除咨询成功']);
}
/**
@@ -102,9 +110,16 @@ class ConsultController extends Controller
$service = new ConsultReplyService();
- $service->handle($id);
+ $consult = $service->handle($id);
- $content = ['msg' => '回复咨询成功'];
+ $service = new ConsultInfoService();
+
+ $consult = $service->handle($consult->id);
+
+ $content = [
+ 'consult' => $consult,
+ 'msg' => '回复咨询成功',
+ ];
return $this->jsonSuccess($content);
@@ -129,9 +144,7 @@ class ConsultController extends Controller
$msg = $like->deleted == 0 ? '点赞成功' : '取消点赞成功';
- $content = ['msg' => $msg];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => $msg]);
}
}
diff --git a/app/Http/Home/Controllers/Controller.php b/app/Http/Home/Controllers/Controller.php
index 30819779..df84d9d2 100644
--- a/app/Http/Home/Controllers/Controller.php
+++ b/app/Http/Home/Controllers/Controller.php
@@ -58,6 +58,7 @@ class Controller extends \Phalcon\Mvc\Controller
'controller' => 'error',
'action' => 'maintain',
]);
+ return false;
}
if ($this->isNotSafeRequest()) {
diff --git a/app/Http/Home/Controllers/ImController.php b/app/Http/Home/Controllers/ImController.php
index f768edb4..7461363e 100644
--- a/app/Http/Home/Controllers/ImController.php
+++ b/app/Http/Home/Controllers/ImController.php
@@ -3,7 +3,6 @@
namespace App\Http\Home\Controllers;
use App\Http\Home\Services\Im as ImService;
-use App\Traits\Response as ResponseTrait;
use Phalcon\Mvc\View;
/**
@@ -12,8 +11,6 @@ use Phalcon\Mvc\View;
class ImController extends Controller
{
- use ResponseTrait;
-
public function initialize()
{
parent::initialize();
@@ -265,9 +262,7 @@ class ImController extends Controller
$service->applyFriend();
- $content = ['msg' => '发送申请成功,请等待对方通过'];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => '发送申请成功']);
}
/**
@@ -303,9 +298,7 @@ class ImController extends Controller
$service->applyGroup();
- $content = ['msg' => '发送申请成功,请等待管理员通过'];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => '发送申请成功']);
}
/**
@@ -341,9 +334,7 @@ class ImController extends Controller
$service->quitFriend($id);
- $content = ['msg' => '解除好友成功'];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => '解除好友成功']);
}
/**
@@ -355,9 +346,7 @@ class ImController extends Controller
$service->quitGroup($id);
- $content = ['msg' => '退出群组成功'];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => '退出群组成功']);
}
}
diff --git a/app/Http/Home/Controllers/ImGroupManageController.php b/app/Http/Home/Controllers/ImGroupManageController.php
index 3b76dcfc..f62bf1b1 100644
--- a/app/Http/Home/Controllers/ImGroupManageController.php
+++ b/app/Http/Home/Controllers/ImGroupManageController.php
@@ -48,9 +48,7 @@ class ImGroupManageController extends Controller
$service->updateGroup($id);
- $content = ['msg' => '更新群组成功'];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => '更新群组成功']);
}
/**
@@ -62,8 +60,10 @@ class ImGroupManageController extends Controller
$service->deleteGroupUser($gid, $uid);
+ $location = $this->request->getHTTPReferer();
+
$content = [
- 'location' => $this->request->getHTTPReferer(),
+ 'location' => $location,
'msg' => '移除用户成功',
];
diff --git a/app/Http/Home/Controllers/IndexController.php b/app/Http/Home/Controllers/IndexController.php
index bdee64b7..ea099b71 100644
--- a/app/Http/Home/Controllers/IndexController.php
+++ b/app/Http/Home/Controllers/IndexController.php
@@ -3,10 +3,26 @@
namespace App\Http\Home\Controllers;
use App\Http\Home\Services\Index as IndexService;
+use App\Traits\Client as ClientTrait;
+use Phalcon\Mvc\Dispatcher;
class IndexController extends Controller
{
+ use ClientTrait;
+
+ public function beforeExecuteRoute(Dispatcher $dispatcher)
+ {
+ if ($this->isMobileBrowser()) {
+
+ $this->response->redirect('/h5', true);
+
+ return false;
+ }
+
+ return parent::beforeExecuteRoute($dispatcher);
+ }
+
/**
* @Get("/", name="home.index")
*/
diff --git a/app/Http/Home/Controllers/ChapterLiveController.php b/app/Http/Home/Controllers/LiveController.php
similarity index 76%
rename from app/Http/Home/Controllers/ChapterLiveController.php
rename to app/Http/Home/Controllers/LiveController.php
index 9261f92b..b3388255 100644
--- a/app/Http/Home/Controllers/ChapterLiveController.php
+++ b/app/Http/Home/Controllers/LiveController.php
@@ -2,24 +2,21 @@
namespace App\Http\Home\Controllers;
-use App\Http\Home\Services\ChapterLive as ChapterLiveService;
-use App\Traits\Response as ResponseTrait;
+use App\Services\Logic\Live\LiveChapter as LiveChapterService;
use Phalcon\Mvc\View;
/**
* @RoutePrefix("/live")
*/
-class ChapterLiveController extends Controller
+class LiveController extends Controller
{
- use ResponseTrait;
-
/**
* @Get("/{id:[0-9]+}/chats", name="home.live.chats")
*/
public function chatsAction($id)
{
- $service = new ChapterLiveService();
+ $service = new LiveChapterService();
$chats = $service->getRecentChats($id);
@@ -33,7 +30,7 @@ class ChapterLiveController extends Controller
*/
public function statsAction($id)
{
- $service = new ChapterLiveService();
+ $service = new LiveChapterService();
$stats = $service->getStats($id);
@@ -45,7 +42,7 @@ class ChapterLiveController extends Controller
*/
public function statusAction($id)
{
- $service = new ChapterLiveService();
+ $service = new LiveChapterService();
$status = $service->getStatus($id);
@@ -57,7 +54,7 @@ class ChapterLiveController extends Controller
*/
public function bindUserAction($id)
{
- $service = new ChapterLiveService();
+ $service = new LiveChapterService();
$service->bindUser($id);
@@ -69,7 +66,7 @@ class ChapterLiveController extends Controller
*/
public function sendMessageAction($id)
{
- $service = new ChapterLiveService();
+ $service = new LiveChapterService();
$response = $service->sendMessage($id);
diff --git a/app/Http/Home/Controllers/OrderController.php b/app/Http/Home/Controllers/OrderController.php
index 591c8187..acf797a8 100644
--- a/app/Http/Home/Controllers/OrderController.php
+++ b/app/Http/Home/Controllers/OrderController.php
@@ -48,8 +48,8 @@ class OrderController extends Controller
*/
public function confirmAction()
{
- $itemId = $this->request->getQuery('item_id', 'int');
- $itemType = $this->request->getQuery('item_type', 'int');
+ $itemId = $this->request->getQuery('item_id', 'string');
+ $itemType = $this->request->getQuery('item_type', 'string');
$service = new OrderConfirmService();
@@ -87,7 +87,7 @@ class OrderController extends Controller
$order = $service->handle($sn);
if ($order['status'] != OrderModel::STATUS_PENDING) {
- $this->response->redirect(['for' => 'home.my.orders']);
+ $this->response->redirect(['for' => 'home.uc.orders']);
}
$this->view->setVar('order', $order);
diff --git a/app/Http/Home/Controllers/PublicController.php b/app/Http/Home/Controllers/PublicController.php
index 63eb1e37..21e28b1e 100644
--- a/app/Http/Home/Controllers/PublicController.php
+++ b/app/Http/Home/Controllers/PublicController.php
@@ -10,7 +10,6 @@ use App\Services\Pay\Wxpay as WxpayService;
use App\Services\Storage as StorageService;
use App\Traits\Response as ResponseTrait;
use App\Traits\Security as SecurityTrait;
-use Phalcon\Text;
use PHPQRCode\QRcode;
class PublicController extends \Phalcon\Mvc\Controller
@@ -44,31 +43,6 @@ class PublicController extends \Phalcon\Mvc\Controller
}
}
- /**
- * @Get("/img/{id:[0-9]+}", name="home.img")
- */
- public function imageAction($id)
- {
- $repo = new UploadRepo();
-
- $file = $repo->findById($id);
-
- if ($file && Text::startsWith($file->mime, 'image')) {
-
- $service = new StorageService();
-
- $location = $service->getImageUrl($file->path);
-
- $this->response->redirect($location);
-
- } else {
-
- $this->response->setStatusCode(404);
-
- return $this->response;
- }
- }
-
/**
* @Get("/qrcode", name="home.qrcode")
*/
diff --git a/app/Http/Home/Controllers/RefundController.php b/app/Http/Home/Controllers/RefundController.php
index 327cc361..1aaf813a 100644
--- a/app/Http/Home/Controllers/RefundController.php
+++ b/app/Http/Home/Controllers/RefundController.php
@@ -44,12 +44,7 @@ class RefundController extends Controller
$service->handle();
- $content = [
- 'location' => $this->url->get(['for' => 'home.my.refunds']),
- 'msg' => '申请退款成功',
- ];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => '申请退款成功']);
}
/**
@@ -78,12 +73,7 @@ class RefundController extends Controller
$service->handle($sn);
- $content = [
- 'location' => $this->url->get(['for' => 'home.my.refunds']),
- 'msg' => '取消退款成功',
- ];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => '取消退款成功']);
}
}
diff --git a/app/Http/Home/Controllers/ReviewController.php b/app/Http/Home/Controllers/ReviewController.php
index 48b09a67..e353bf9d 100644
--- a/app/Http/Home/Controllers/ReviewController.php
+++ b/app/Http/Home/Controllers/ReviewController.php
@@ -99,9 +99,7 @@ class ReviewController extends Controller
$service->handle($id);
- $content = ['msg' => '删除评价成功'];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => '删除评价成功']);
}
/**
@@ -115,9 +113,7 @@ class ReviewController extends Controller
$msg = $like->deleted == 0 ? '点赞成功' : '取消点赞成功';
- $content = ['msg' => $msg];
-
- return $this->jsonSuccess($content);
+ return $this->jsonSuccess(['msg' => $msg]);
}
}
diff --git a/app/Http/Home/Controllers/SearchController.php b/app/Http/Home/Controllers/SearchController.php
index 66c249fa..279300c3 100644
--- a/app/Http/Home/Controllers/SearchController.php
+++ b/app/Http/Home/Controllers/SearchController.php
@@ -5,7 +5,6 @@ namespace App\Http\Home\Controllers;
use App\Services\Logic\Search\Course as CourseSearchService;
use App\Services\Logic\Search\Group as GroupSearchService;
use App\Services\Logic\Search\User as UserSearchService;
-use App\Traits\Response as ResponseTrait;
/**
* @RoutePrefix("/search")
@@ -13,8 +12,6 @@ use App\Traits\Response as ResponseTrait;
class SearchController extends Controller
{
- use ResponseTrait;
-
/**
* @Get("/", name="home.search.index")
*/
@@ -42,14 +39,6 @@ class SearchController extends Controller
$this->view->setVar('pager', $pager);
}
- /**
- * @Get("/form", name="home.search.form")
- */
- public function formAction()
- {
-
- }
-
/**
* @param string $type
* @return CourseSearchService|GroupSearchService|UserSearchService
@@ -58,7 +47,7 @@ class SearchController extends Controller
{
switch ($type) {
case 'group':
- $service = new GroupSearchService;
+ $service = new GroupSearchService();
break;
case 'user':
$service = new UserSearchService();
diff --git a/app/Http/Home/Controllers/UploadController.php b/app/Http/Home/Controllers/UploadController.php
index 73da70f8..351f25cb 100644
--- a/app/Http/Home/Controllers/UploadController.php
+++ b/app/Http/Home/Controllers/UploadController.php
@@ -1,9 +1,9 @@
getAuthUser();
+
+ $validator = new AppValidator();
+
+ $validator->checkAuthUser($authUser->id);
+ }
+
/**
* @Post("/avatar/img", name="home.upload.avatar_img")
*/
@@ -20,16 +29,16 @@ class UploadController extends Controller
$file = $service->uploadAvatarImage();
- if ($file) {
- return $this->jsonSuccess([
- 'data' => [
- 'src' => $service->getImageUrl($file->path),
- 'title' => $file->name,
- ]
- ]);
- } else {
+ if (!$file) {
return $this->jsonError(['msg' => '上传文件失败']);
}
+
+ $data = [
+ 'src' => $service->getImageUrl($file->path),
+ 'title' => $file->name,
+ ];
+
+ return $this->jsonSuccess(['data' => $data]);
}
/**
diff --git a/app/Http/Home/Controllers/VerifyController.php b/app/Http/Home/Controllers/VerifyController.php
index d89245bb..1e1666a5 100644
--- a/app/Http/Home/Controllers/VerifyController.php
+++ b/app/Http/Home/Controllers/VerifyController.php
@@ -4,7 +4,6 @@ namespace App\Http\Home\Controllers;
use App\Services\Logic\Verify\EmailCode as EmailCodeService;
use App\Services\Logic\Verify\SmsCode as SmsCodeService;
-use App\Services\Logic\Verify\VerifyCode as VerifyCodeService;
use App\Traits\Response as ResponseTrait;
/**
@@ -15,18 +14,6 @@ class VerifyController extends \Phalcon\Mvc\Controller
use ResponseTrait;
- /**
- * @Post("/code", name="verify.code")
- */
- public function verifyCodeAction()
- {
- $service = new VerifyCodeService();
-
- $service->handle();
-
- return $this->jsonSuccess();
- }
-
/**
* @Post("/sms/code", name="verify.sms_code")
*/
diff --git a/app/Http/Home/Services/Account.php b/app/Http/Home/Services/Account.php
index 4858213d..38efb3b2 100644
--- a/app/Http/Home/Services/Account.php
+++ b/app/Http/Home/Services/Account.php
@@ -3,7 +3,7 @@
namespace App\Http\Home\Services;
use App\Repos\User as UserRepo;
-use App\Services\Auth as AuthService;
+use App\Services\Auth\Home as AuthService;
use App\Services\Logic\Account\Register as RegisterService;
use App\Validators\Account as AccountValidator;
use App\Validators\Captcha as CaptchaValidator;
@@ -40,13 +40,13 @@ class Account extends Service
{
$post = $this->request->getPost();
- $accountValidator = new AccountValidator();
+ $validator = new AccountValidator();
- $user = $accountValidator->checkUserLogin($post['account'], $post['password']);
+ $user = $validator->checkUserLogin($post['account'], $post['password']);
- $captchaValidator = new CaptchaValidator();
+ $validator = new CaptchaValidator();
- $captchaValidator->checkCode($post['ticket'], $post['rand']);
+ $validator->checkCode($post['ticket'], $post['rand']);
$this->auth->saveAuthInfo($user);
}
@@ -55,9 +55,9 @@ class Account extends Service
{
$post = $this->request->getPost();
- $accountValidator = new AccountValidator();
+ $validator = new AccountValidator();
- $user = $accountValidator->checkVerifyLogin($post['account'], $post['verify_code']);
+ $user = $validator->checkVerifyLogin($post['account'], $post['verify_code']);
$this->auth->saveAuthInfo($user);
}
diff --git a/app/Http/Home/Views/chapter/catalog.volt b/app/Http/Home/Views/chapter/catalog.volt
index 71105da9..9625d784 100644
--- a/app/Http/Home/Views/chapter/catalog.volt
+++ b/app/Http/Home/Views/chapter/catalog.volt
@@ -7,11 +7,10 @@