Skip to content

Commit

Permalink
Merge pull request #117 from Qsnh/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
Qsnh authored May 25, 2020
2 parents 32929e1 + e829d0b commit 140efed
Show file tree
Hide file tree
Showing 67 changed files with 722 additions and 2,013 deletions.
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,6 @@

随着知识付费领域的兴起,尤其是知识付费领域的龙头“得到”的成功,知识付费领域俨然成为了新的风口。经过这几年的发展,知识付费领域的基础建设有了很大的进步,市场上面很多知识付费的平台可以在短短几分钟之内搭建一套属于自己的知识付费应用。但是,这并不是我想要的!可能是处于程序员的角度出发,我更在乎的是这套应用是我自己可以完全控制的!所以 *MeEdu* 诞生了。*MeEdu* 寄托了我对当前知识付费领域的期望。我相信未来的每位身负技能的人都可以通过 *MeEdu* 来构建自己的知识付费应用,通过 *MeEdu* 将自己的知识进行变现。

## 在线装服务

如果您想使用MeEdu但是却不会安装MeEdu,那么您可以考虑MeEduCloud平台提供的在线装服务(这是一项收费服务),它可以自动的帮您将MeEdu安装到您的服务器上。[点击查看详情](https://meedu.vip/hostPackages)

## 傻瓜安装

傻瓜安装包请到我们的QQ群文件下载。加QQ群请扫描文末的QQ群二维码。
Expand Down
8 changes: 4 additions & 4 deletions app/Businesses/BusinessState.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public function canSeeVideo(array $user, array $course, array $video): bool
*/
$userService = app()->make(UserServiceInterface::class);
// 如果video的价格为0那么可以直接观看
if ($video['charge'] == 0) {
if ($video['charge'] === 0) {
return true;
}
// 如果用户买了课程可以直接观看
Expand All @@ -67,7 +67,7 @@ public function canSeeVideo(array $user, array $course, array $video): bool
*/
public function orderIsPaid(array $order): bool
{
return $order['status'] == FrontendConstant::ORDER_PAID;
return $order['status'] === FrontendConstant::ORDER_PAID;
}

/**
Expand Down Expand Up @@ -118,7 +118,7 @@ public function canGenerateInviteCode(array $user): bool
$promoCodeService = app()->make(PromoCodeServiceInterface::class);
$inviteConfig = $configService->getMemberInviteConfig();
$isRole = $this->isRole($user);
if ($inviteConfig['free_user_enabled'] == false && !$isRole) {
if ((bool)$inviteConfig['free_user_enabled'] === false && !$isRole) {
// 开启了非会员无法生成优惠码
return false;
}
Expand Down Expand Up @@ -163,7 +163,7 @@ public function promoCodeCanUse(array $promoCode): bool
*/
$userService = app()->make(UserServiceInterface::class);
$user = $userService->find(Auth::id());
if ($user['invite_user_id']) {
if ($user['is_used_promo_code'] === FrontendConstant::YES) {
// 用户邀请优惠码只能使用一次
return false;
}
Expand Down
53 changes: 53 additions & 0 deletions app/Console/Commands/InstallLockCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php

/*
* This file is part of the Qsnh/meedu.
*
* (c) XiaoTeng <[email protected]>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/

namespace App\Console\Commands;

use Illuminate\Console\Command;

class InstallLockCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'install:lock';

/**
* The console command description.
*
* @var string
*/
protected $description = '生成安装锁🔐';

/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}

/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
if (!file_exists(storage_path('install.lock'))) {
file_put_contents(storage_path('install.lock'), time());
}
}
}
3 changes: 2 additions & 1 deletion app/Events/UserRegisterEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@

use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;

class UserRegisterEvent
class UserRegisterEvent implements ShouldQueue
{
use Dispatchable, InteractsWithSockets, SerializesModels;

Expand Down
11 changes: 10 additions & 1 deletion app/Http/Controllers/Api/V2/CaptchaController.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

use Mews\Captcha\Captcha;
use App\Constant\ApiV2Constant;
use Illuminate\Support\Facades\Log;
use App\Http\Requests\ApiV2\SmsRequest;
use App\Services\Other\Services\SmsService;
use App\Services\Base\Services\CacheService;
Expand Down Expand Up @@ -108,7 +109,15 @@ public function sentSms(SmsRequest $request)
$this->checkImageCaptcha();
['mobile' => $mobile, 'scene' => $scene] = $request->filldata();
$code = str_pad(random_int(0, 999999), 6, 0, STR_PAD_LEFT);
$this->smsService->sendCode($mobile, $code, $scene);

if (!is_dev()) {
// 正式环境才发送验证码
$this->smsService->sendCode($mobile, $code, $scene);
} else {
// 测试环境将验证码记录在log
Log::info(__METHOD__, compact('code'));
}

$this->cacheService->put(sprintf(ApiV2Constant::MOBILE_CODE_CACHE_KEY, $mobile), $code, ApiV2Constant::SMS_CODE_EXPIRE);
return $this->success();
}
Expand Down
3 changes: 3 additions & 0 deletions app/Http/Controllers/Api/V2/SliderController.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ class SliderController extends BaseController
*/
public function all(SliderServiceInterface $sliderService)
{
/**
* @var SliderService $sliderService
*/
$sliders = $sliderService->all();
$sliders = arr2_clear($sliders, ApiV2Constant::MODEL_SLIDER_FIELD);
return $this->data($sliders);
Expand Down
2 changes: 1 addition & 1 deletion app/Http/Controllers/Backend/Api/V1/AdFromController.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
namespace App\Http\Controllers\Backend\Api\V1;

use Carbon\Carbon;
use App\Models\AdFrom;
use Illuminate\Http\Request;
use App\Services\Other\Models\AdFrom;
use App\Http\Requests\Backend\AdFromRequest;

class AdFromController extends BaseController
Expand Down
16 changes: 14 additions & 2 deletions app/Http/Controllers/Backend/Api/V1/CourseCommentController.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,38 @@
namespace App\Http\Controllers\Backend\Api\V1;

use Illuminate\Http\Request;
use App\Models\CourseComment;
use App\Services\Member\Models\User;
use App\Services\Course\Models\Course;
use App\Services\Course\Models\CourseComment;

class CourseCommentController extends BaseController
{
public function index(Request $request)
{
$courseId = $request->input('course_id');
$comments = CourseComment::with(['user', 'course'])
$comments = CourseComment::with(['course'])
->when($courseId, function ($query) use ($courseId) {
$query->where('course_id', $courseId);
})
->orderByDesc('id')
->paginate($request->input('size', 12));

$userIds = [];
foreach ($comments->items() as $item) {
$userIds[] = $item->user_id;
}
$users = User::query()
->whereIn('id', array_flip(array_flip($userIds)))
->select(['id', 'nick_name', 'mobile', 'avatar'])
->get()
->keyBy('id');

$courses = Course::query()->select(['id', 'title'])->get();

return $this->successData([
'data' => $comments,
'courses' => $courses,
'users' => $users,
]);
}

Expand Down
18 changes: 15 additions & 3 deletions app/Http/Controllers/Backend/Api/V1/DashboardController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@

namespace App\Http\Controllers\Backend\Api\V1;

use App\User;
use Carbon\Carbon;
use App\Meedu\MeEdu;
use App\Models\Order;
use App\Services\Member\Models\User;
use App\Services\Order\Models\Order;

class DashboardController extends BaseController
{
public function index()
{
$todayRegisterUserCount = User::todayRegisterCount();
$todayRegisterUserCount = User::query()->where('created_at', '>=', Carbon::now()->subDays(1)->format('Y-m-d'))->count();
$todayPaidNum = Order::todayPaidNum();
$todayPaidSum = Order::todayPaidSum();

Expand All @@ -30,6 +31,17 @@ public function index()
]);
}

public function check()
{
if (!file_exists(storage_path('install.lock'))) {
return $this->error('请运行php artisan install:lock命令生成安装锁文件。');
}
if (file_exists(base_path('public/install.php'))) {
return $this->error('请删除傻瓜安装脚本public/install.php文件。');
}
return $this->success();
}

public function systemInfo()
{
$info = [
Expand Down
99 changes: 99 additions & 0 deletions app/Http/Controllers/Backend/Api/V1/MemberController.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,16 @@
use Illuminate\Http\Request;
use App\Services\Member\Models\Role;
use App\Services\Member\Models\User;
use App\Services\Order\Models\Order;
use Illuminate\Support\Facades\Hash;
use App\Services\Course\Models\Video;
use App\Services\Course\Models\Course;
use App\Services\Member\Models\UserVideo;
use App\Services\Member\Models\UserCourse;
use App\Http\Requests\Backend\MemberRequest;
use App\Services\Member\Models\UserLikeCourse;
use App\Services\Course\Models\CourseUserRecord;
use App\Services\Member\Models\UserJoinRoleRecord;
use App\Events\UserInviteBalanceWithdrawHandledEvent;
use App\Services\Member\Models\UserInviteBalanceWithdrawOrder;

Expand Down Expand Up @@ -104,4 +112,95 @@ public function update(Request $request, $id)
$user->fill($data)->save();
return $this->success();
}

public function detail($id)
{
$user = User::query()->with(['role', 'invitor'])->where('id', $id)->firstOrFail();

return $this->successData([
'data' => $user,
]);
}

public function userCourses(Request $request, $id)
{
$data = UserCourse::query()->where('user_id', $id)->orderByDesc('created_at')->paginate($request->input('size', 20));
$courseIds = get_array_ids($data->items(), 'course_id');
$courses = Course::query()->whereIn('id', $courseIds)->select(['id', 'title', 'thumb', 'charge'])->get()->keyBy('id');
return $this->successData([
'data' => $data,
'courses' => $courses,
]);
}

public function userVideos(Request $request, $id)
{
$data = UserVideo::query()->where('user_id', $id)->orderByDesc('created_at')->paginate($request->input('size', 20));
$videoIds = get_array_ids($data->items(), 'video_id');
$videos = Video::query()->whereIn('id', $videoIds)->select(['id', 'title', 'charge'])->get()->keyBy('id');
return $this->successData([
'data' => $data,
'videos' => $videos,
]);
}

public function userRoles(Request $request, $id)
{
$data = UserJoinRoleRecord::query()
->with(['role'])
->where('user_id', $id)
->orderByDesc('created_at')
->paginate($request->input('size', 20));

return $this->successData([
'data' => $data,
]);
}

public function userCollect(Request $request, $id)
{
$data = UserLikeCourse::query()->where('user_id', $id)->orderByDesc('created_at')->paginate($request->input('size', 20));
$courseIds = get_array_ids($data->items(), 'course_id');
$courses = Course::query()->whereIn('id', $courseIds)->select(['id', 'title', 'thumb', 'charge'])->get()->keyBy('id');
return $this->successData([
'data' => $data,
'courses' => $courses,
]);
}

public function userHistory(Request $request, $id)
{
$data = CourseUserRecord::query()->where('user_id', $id)->orderByDesc('created_at')->paginate($request->input('size', 20));
$courseIds = get_array_ids($data->items(), 'course_id');
$courses = Course::query()->whereIn('id', $courseIds)->select(['id', 'title', 'thumb', 'charge'])->get()->keyBy('id');
return $this->successData([
'data' => $data,
'courses' => $courses,
]);
}

public function userOrders(Request $request, $id)
{
$data = Order::query()
->with(['goods', 'paidRecords'])
->where('user_id', $id)
->orderByDesc('created_at')
->paginate($request->input('size', 20));

return $this->successData([
'data' => $data,
]);
}

public function userInvite(Request $request, $id)
{
$data = User::query()
->select(['id', 'nick_name', 'avatar', 'mobile', 'created_at', 'invite_user_expired_at'])
->where('invite_user_id', $id)
->paginate($request->input('size', 20));

return $this->successData([
'data' => $data,
]);
}
}
2 changes: 1 addition & 1 deletion app/Http/Controllers/Backend/Api/V1/NavController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

namespace App\Http\Controllers\Backend\Api\V1;

use App\Models\Nav;
use App\Services\Other\Models\Nav;
use App\Http\Requests\Backend\NavRequest;

class NavController extends BaseController
Expand Down
6 changes: 4 additions & 2 deletions app/Http/Controllers/Backend/Api/V1/PromoCodeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

namespace App\Http\Controllers\Backend\Api\V1;

use Illuminate\Http\Request;
use App\Services\Order\Models\PromoCode;
use App\Http\Requests\Backend\PromoCodeRequest;

Expand Down Expand Up @@ -45,9 +46,10 @@ public function update(PromoCodeRequest $request, $id)
return $this->success();
}

public function destroy($id)
public function destroy(Request $request)
{
PromoCode::destroy($id);
$ids = $request->input('ids', []);
$ids && PromoCode::destroy($ids);

return $this->success();
}
Expand Down
Loading

0 comments on commit 140efed

Please sign in to comment.