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.

71 lines
1.8 KiB

<?php
namespace App\Http\Controllers\Miniapp;
use App\Http\Controllers\Admin\WeeklyBriefController as AdminWeeklyBriefController;
use App\Models\MiniappUser;
use App\Support\ApiResponse;
use App\Support\Miniapp\MiniappPresenter;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\StreamedResponse;
class WeeklyBriefController extends BaseController
{
use ApiResponse;
public function __construct(
protected AdminWeeklyBriefController $adminController,
) {}
public function index(Request $request): JsonResponse
{
$this->assertStaff($request);
return $this->adminController->index($request);
}
public function show(Request $request, int $weeklyBrief): JsonResponse
{
$this->assertStaff($request);
return $this->adminController->show($weeklyBrief);
}
public function generate(Request $request): JsonResponse
{
$this->assertStaff($request);
return $this->adminController->generate($request);
}
public function weekOptions(Request $request): JsonResponse
{
$this->assertStaff($request);
return $this->adminController->weekOptions();
}
public function download(Request $request, int $weeklyBrief): StreamedResponse|JsonResponse
{
$this->assertStaff($request);
return $this->adminController->download($weeklyBrief);
}
protected function assertStaff(Request $request): MiniappUser
{
$user = $request->user();
if (! $user instanceof MiniappUser) {
abort(401, '请先登录');
}
$payload = MiniappPresenter::userPayload($user);
if (! ($payload['can_use_crawler'] ?? false)) {
abort(403, '无权使用论文周报');
}
return $user;
}
}