mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-23 19:37:23 +08:00
ptgen api point support parameter & default user
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Console\Command;
|
||||
use Laravel\Sanctum\PersonalAccessToken;
|
||||
|
||||
class DeleteExpiredToken extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'user:delete_expired_token {--uid=} {--days=}';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Delete user expired token, options: --uid, --days';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$uid = $this->option('uid');
|
||||
$days = $this->option('days');
|
||||
if (!is_numeric($days)) {
|
||||
$days = 60;
|
||||
}
|
||||
$query = PersonalAccessToken::query()->where('tokenable_type', User::class);
|
||||
if ($uid) {
|
||||
$query->where('tokenable_id', $uid);
|
||||
}
|
||||
$log = sprintf('uid: %s, days: %s', $uid, $days);
|
||||
$this->info($log);
|
||||
do_log($log);
|
||||
|
||||
$query->where('last_used_at', '<', Carbon::now()->subDays($days));
|
||||
$result = $query->delete();
|
||||
$log = sprintf('[%s], %s, result: %s, query: %s', REQUEST_ID, __METHOD__, var_export($result, true), last_query());
|
||||
$this->info($log);
|
||||
do_log($log);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -60,8 +60,7 @@ class Test extends Command
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$now = Carbon::today();
|
||||
dd($now->toDateTimeString());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ class Kernel extends ConsoleKernel
|
||||
$schedule->command('exam:checkout_cronjob')->everyMinute();
|
||||
$schedule->command('backup:cronjob')->everyMinute();
|
||||
$schedule->command('hr:update_status')->everyMinute();
|
||||
$schedule->command('user:delete_expired_token')->dailyAt('04:00');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Repositories\AttendanceRepository;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class AttendanceController extends Controller
|
||||
{
|
||||
private $repository;
|
||||
|
||||
public function __construct(AttendanceRepository $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
public function attend()
|
||||
{
|
||||
$uid = Auth::id();
|
||||
$attendance = $this->repository->attend($uid);
|
||||
return $this->success($attendance->toArray());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Resources\ExamResource;
|
||||
use App\Http\Resources\UserResource;
|
||||
use App\Models\Setting;
|
||||
use App\Repositories\AuthenticateRepository;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
@@ -25,6 +26,13 @@ class AuthenticateController extends Controller
|
||||
'password' => 'required',
|
||||
]);
|
||||
$result = $this->repository->login($request->username, $request->password);
|
||||
$includes = explode(',', $request->get('include', ''));
|
||||
if (in_array('site_info', $includes)) {
|
||||
$basic = Setting::get('basic');
|
||||
$result['site_info'] = [
|
||||
'site_name' => $basic['SITENAME'],
|
||||
];
|
||||
}
|
||||
return $this->success($result);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Resources\NewsResource;
|
||||
use App\Models\News;
|
||||
use App\Repositories\NewsRepository;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class NewsController extends Controller
|
||||
{
|
||||
private $repository;
|
||||
|
||||
public function __construct(NewsRepository $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
private function getRules(): array
|
||||
{
|
||||
return [
|
||||
'family_id' => 'required|numeric',
|
||||
'name' => 'required|string',
|
||||
'peer_id' => 'required|string',
|
||||
'agent' => 'required|string',
|
||||
'comment' => 'required|string',
|
||||
|
||||
];
|
||||
}
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$result = $this->repository->getList($request->all());
|
||||
$resource = NewsResource::collection($result);
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate($this->getRules());
|
||||
$result = $this->repository->store($request->all());
|
||||
$resource = new NewsResource($result);
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return array
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
$result = News::query()->findOrFail($id);
|
||||
$resource = new NewsResource($result);
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return array
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$request->validate($this->getRules());
|
||||
$result = $this->repository->update($request->all(), $id);
|
||||
$resource = new NewsResource($result);
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return array
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$result = $this->repository->delete($id);
|
||||
return $this->success($result);
|
||||
}
|
||||
}
|
||||
@@ -66,5 +66,6 @@ class Kernel extends HttpKernel
|
||||
'permission' => \App\Http\Middleware\Permission::class,
|
||||
'admin' => \App\Http\Middleware\Admin::class,
|
||||
'locale' => \App\Http\Middleware\Locale::class,
|
||||
'user' => \App\Http\Middleware\User::class,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -29,4 +29,5 @@ class Locale
|
||||
App::setLocale($locale);
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class User
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 在响应发送到浏览器后处理任务。
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Illuminate\Http\Response $response
|
||||
* @return void
|
||||
*/
|
||||
public function terminate($request, $response)
|
||||
{
|
||||
$user = $request->user();
|
||||
$update = [
|
||||
'last_access' => Carbon::now()
|
||||
];
|
||||
do_log("[ACTIVE] {$user->id}: " . nexus_json_encode($update));
|
||||
$user->update($update);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class NewsResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'title' => $this->title,
|
||||
'body' => $this->body,
|
||||
'added' => $this->added,
|
||||
'user' => new UserResource($this->whenLoaded('user'))
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -17,11 +17,11 @@ class Comment extends NexusModel
|
||||
|
||||
public function create_user()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'user');
|
||||
return $this->belongsTo(User::class, 'user')->withDefault(User::getDefaultUserAttributes());
|
||||
}
|
||||
|
||||
public function update_user()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'editedby');
|
||||
return $this->belongsTo(User::class, 'editedby')->withDefault(User::getDefaultUserAttributes());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
class News extends NexusModel
|
||||
{
|
||||
protected $table = 'news';
|
||||
|
||||
protected $fillable = [
|
||||
'userid', 'added', 'title', 'body', 'notify',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'added' => 'datetime',
|
||||
];
|
||||
|
||||
public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(User::class, 'userid');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -108,7 +108,7 @@ class Torrent extends NexusModel
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'owner');
|
||||
return $this->belongsTo(User::class, 'owner')->withDefault(User::getDefaultUserAttributes());
|
||||
}
|
||||
|
||||
public function thanks()
|
||||
|
||||
@@ -143,6 +143,31 @@ class User extends Authenticatable
|
||||
'invited_by', 'enabled', 'seed_points',
|
||||
];
|
||||
|
||||
public static function getDefaultUserAttributes(): array
|
||||
{
|
||||
return [
|
||||
'id' => 0,
|
||||
'username' => nexus_trans('user.deleted_username'),
|
||||
'class' => self::CLASS_PEASANT,
|
||||
'email' => '',
|
||||
'status' => self::STATUS_CONFIRMED,
|
||||
'added' => '1970-01-01 08:00:00',
|
||||
'avatar' => '',
|
||||
'uploaded' => 0,
|
||||
'downloaded' => 0,
|
||||
'seedbonus' => 0,
|
||||
'seedtime' => 0,
|
||||
'leechtime' => 0,
|
||||
'enabled' => self::ENABLED_NO,
|
||||
'seed_points' => 0
|
||||
];
|
||||
}
|
||||
|
||||
public static function defaultUser()
|
||||
{
|
||||
return new static(self::getDefaultUserAttributes());
|
||||
}
|
||||
|
||||
public function checkIsNormal(array $fields = ['status', 'enabled'])
|
||||
{
|
||||
if (in_array('status', $fields) && $this->getAttribute('status') != self::STATUS_CONFIRMED) {
|
||||
|
||||
@@ -57,6 +57,7 @@ class AttendanceRepository extends BaseRepository
|
||||
$attendance->update($update);
|
||||
}
|
||||
}
|
||||
$attendance->added_time = $now->toTimeString();
|
||||
$attendance->is_updated = $isUpdated;
|
||||
do_log("[FINAL_ATTENDANCE]: " . $attendance->toJson());
|
||||
return $attendance;
|
||||
|
||||
@@ -3,6 +3,7 @@ namespace App\Repositories;
|
||||
|
||||
use App\Http\Resources\UserResource;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\UnauthorizedException;
|
||||
|
||||
@@ -22,7 +23,7 @@ class AuthenticateRepository extends BaseRepository
|
||||
$user->checkIsNormal();
|
||||
$tokenName = __METHOD__ . __LINE__;
|
||||
$token = DB::transaction(function () use ($user, $tokenName) {
|
||||
$user->tokens()->delete();
|
||||
$user->update(['last_login' => Carbon::now()]);
|
||||
$tokenResult = $user->createToken($tokenName);
|
||||
return $tokenResult->plainTextToken;
|
||||
});
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
namespace App\Repositories;
|
||||
|
||||
use App\Models\News;
|
||||
|
||||
class NewsRepository extends BaseRepository
|
||||
{
|
||||
public function getList(array $params)
|
||||
{
|
||||
$query = News::query()->with(['user']);
|
||||
if (!empty($params['userid'])) {
|
||||
$query->where('userid', $params['userid']);
|
||||
}
|
||||
list($sortField, $sortType) = $this->getSortFieldAndType($params);
|
||||
$query->orderBy($sortField, $sortType);
|
||||
return $query->paginate();
|
||||
}
|
||||
|
||||
public function store(array $params)
|
||||
{
|
||||
$model = News::query()->create($params);
|
||||
return $model;
|
||||
}
|
||||
|
||||
public function update(array $params, $id)
|
||||
{
|
||||
$model = News::query()->findOrFail($id);
|
||||
$model->update($params);
|
||||
return $model;
|
||||
}
|
||||
|
||||
public function getDetail($id)
|
||||
{
|
||||
$model = News::query()->findOrFail($id);
|
||||
return $model;
|
||||
}
|
||||
|
||||
public function delete($id)
|
||||
{
|
||||
$model = News::query()->findOrFail($id);
|
||||
$result = $model->delete();
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -80,17 +80,23 @@ class TorrentRepository extends BaseRepository
|
||||
});
|
||||
}
|
||||
|
||||
list($sortField, $sortType) = $this->getSortFieldAndType($params);
|
||||
$query->orderBy($sortField, $sortType);
|
||||
$query = $this->handleGetListSort($query, $params);
|
||||
|
||||
$with = ['user'];
|
||||
$torrents = $query->with($with)
|
||||
->orderBy('pos_state', 'desc')
|
||||
->orderBy('id', 'desc')
|
||||
->paginate();
|
||||
$torrents = $query->with($with)->paginate();
|
||||
return $torrents;
|
||||
}
|
||||
|
||||
private function handleGetListSort(Builder $query, array $params)
|
||||
{
|
||||
if (empty($params['sort_field']) && empty($params['sort_type'])) {
|
||||
//the default torrent list sort
|
||||
return $query->orderBy('pos_state', 'desc')->orderBy('id', 'desc');
|
||||
}
|
||||
list($sortField, $sortType) = $this->getSortFieldAndType($params);
|
||||
return $query->orderBy($sortField, $sortType);
|
||||
}
|
||||
|
||||
public function getSearchBox($id = null)
|
||||
{
|
||||
if (is_null($id)) {
|
||||
|
||||
Reference in New Issue
Block a user