mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
add User /favorites, /statistics, /about endpoints
This commit is contained in:
parent
2fd93e1a2b
commit
a69ca6ff90
@ -103,6 +103,229 @@ class UserController extends Controller
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/users/{username}/statistics",
|
||||
* operationId="getUserStatistics",
|
||||
* tags={"users"},
|
||||
*
|
||||
* @OA\Response(
|
||||
* response="200",
|
||||
* description="Returns user statistics",
|
||||
* @OA\JsonContent()
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response="400",
|
||||
* description="Error: Bad request. When required parameters were not supplied.",
|
||||
* ),
|
||||
* ),
|
||||
*/
|
||||
public function statistics(Request $request, string $username)
|
||||
{
|
||||
|
||||
$username = strtolower($username);
|
||||
|
||||
$results = Profile::query()
|
||||
->where('username', $username)
|
||||
->get();
|
||||
|
||||
if (
|
||||
$results->isEmpty()
|
||||
|| $this->isExpired($request, $results)
|
||||
) {
|
||||
$response = Profile::scrape($username);
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
$meta = [
|
||||
'createdAt' => new UTCDateTime(),
|
||||
'modifiedAt' => new UTCDateTime(),
|
||||
'request_hash' => $this->fingerprint
|
||||
];
|
||||
}
|
||||
$meta['modifiedAt'] = new UTCDateTime();
|
||||
|
||||
$response = $meta + $response;
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
Profile::query()
|
||||
->insert($response);
|
||||
}
|
||||
|
||||
if ($this->isExpired($request, $results)) {
|
||||
Profile::query()
|
||||
->where('username', $username)
|
||||
->update($response);
|
||||
}
|
||||
|
||||
$results = Profile::query()
|
||||
->where('username', $username)
|
||||
->get();
|
||||
}
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
return HttpResponse::notFound($request);
|
||||
}
|
||||
|
||||
$response = (new \App\Http\Resources\V4\ProfileStatisticsResource(
|
||||
$results->first()
|
||||
))->response();
|
||||
|
||||
return $this->prepareResponse(
|
||||
$response,
|
||||
$results,
|
||||
$request
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/users/{username}/favorites",
|
||||
* operationId="getUserFavorites",
|
||||
* tags={"users"},
|
||||
*
|
||||
* @OA\Response(
|
||||
* response="200",
|
||||
* description="Returns user favorites",
|
||||
* @OA\JsonContent()
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response="400",
|
||||
* description="Error: Bad request. When required parameters were not supplied.",
|
||||
* ),
|
||||
* ),
|
||||
*/
|
||||
public function favorites(Request $request, string $username)
|
||||
{
|
||||
|
||||
$username = strtolower($username);
|
||||
|
||||
$results = Profile::query()
|
||||
->where('username', $username)
|
||||
->get();
|
||||
|
||||
if (
|
||||
$results->isEmpty()
|
||||
|| $this->isExpired($request, $results)
|
||||
) {
|
||||
$response = Profile::scrape($username);
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
$meta = [
|
||||
'createdAt' => new UTCDateTime(),
|
||||
'modifiedAt' => new UTCDateTime(),
|
||||
'request_hash' => $this->fingerprint
|
||||
];
|
||||
}
|
||||
$meta['modifiedAt'] = new UTCDateTime();
|
||||
|
||||
$response = $meta + $response;
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
Profile::query()
|
||||
->insert($response);
|
||||
}
|
||||
|
||||
if ($this->isExpired($request, $results)) {
|
||||
Profile::query()
|
||||
->where('username', $username)
|
||||
->update($response);
|
||||
}
|
||||
|
||||
$results = Profile::query()
|
||||
->where('username', $username)
|
||||
->get();
|
||||
}
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
return HttpResponse::notFound($request);
|
||||
}
|
||||
|
||||
$response = (new \App\Http\Resources\V4\ProfileFavoritesResource(
|
||||
$results->first()
|
||||
))->response();
|
||||
|
||||
return $this->prepareResponse(
|
||||
$response,
|
||||
$results,
|
||||
$request
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/users/{username}/about",
|
||||
* operationId="getUserAbout",
|
||||
* tags={"users"},
|
||||
*
|
||||
* @OA\Response(
|
||||
* response="200",
|
||||
* description="Returns user about (HTML)",
|
||||
* @OA\JsonContent()
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response="400",
|
||||
* description="Error: Bad request. When required parameters were not supplied.",
|
||||
* ),
|
||||
* ),
|
||||
*/
|
||||
public function about(Request $request, string $username)
|
||||
{
|
||||
|
||||
$username = strtolower($username);
|
||||
|
||||
$results = Profile::query()
|
||||
->where('username', $username)
|
||||
->get();
|
||||
|
||||
if (
|
||||
$results->isEmpty()
|
||||
|| $this->isExpired($request, $results)
|
||||
) {
|
||||
$response = Profile::scrape($username);
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
$meta = [
|
||||
'createdAt' => new UTCDateTime(),
|
||||
'modifiedAt' => new UTCDateTime(),
|
||||
'request_hash' => $this->fingerprint
|
||||
];
|
||||
}
|
||||
$meta['modifiedAt'] = new UTCDateTime();
|
||||
|
||||
$response = $meta + $response;
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
Profile::query()
|
||||
->insert($response);
|
||||
}
|
||||
|
||||
if ($this->isExpired($request, $results)) {
|
||||
Profile::query()
|
||||
->where('username', $username)
|
||||
->update($response);
|
||||
}
|
||||
|
||||
$results = Profile::query()
|
||||
->where('username', $username)
|
||||
->get();
|
||||
}
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
return HttpResponse::notFound($request);
|
||||
}
|
||||
|
||||
$response = (new \App\Http\Resources\V4\ProfileAboutResource(
|
||||
$results->first()
|
||||
))->response();
|
||||
|
||||
return $this->prepareResponse(
|
||||
$response,
|
||||
$results,
|
||||
$request
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/users/{username}/history/{type}",
|
||||
|
16
app/Http/Resources/V4/ProfileAboutResource.php
Normal file
16
app/Http/Resources/V4/ProfileAboutResource.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V4;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ProfileAboutResource extends JsonResource
|
||||
{
|
||||
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'about' => $this->about
|
||||
];
|
||||
}
|
||||
}
|
14
app/Http/Resources/V4/ProfileFavoritesResource.php
Normal file
14
app/Http/Resources/V4/ProfileFavoritesResource.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V4;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ProfileFavoritesResource extends JsonResource
|
||||
{
|
||||
|
||||
public function toArray($request)
|
||||
{
|
||||
return $this->favorites;
|
||||
}
|
||||
}
|
@ -268,12 +268,6 @@ class ProfileResource extends JsonResource
|
||||
'birthday' => $this->birthday,
|
||||
'location' => $this->location,
|
||||
'joined' => $this->joined,
|
||||
'statistics' => [
|
||||
'anime' => $this->anime_stats,
|
||||
'manga' => $this->manga_stats,
|
||||
],
|
||||
'favorites' => $this->favorites,
|
||||
'about' => $this->about,
|
||||
];
|
||||
}
|
||||
}
|
17
app/Http/Resources/V4/ProfileStatisticsResource.php
Normal file
17
app/Http/Resources/V4/ProfileStatisticsResource.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V4;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ProfileStatisticsResource extends JsonResource
|
||||
{
|
||||
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'anime' => $this->anime_stats,
|
||||
'manga' => $this->manga_stats,
|
||||
];
|
||||
}
|
||||
}
|
@ -280,6 +280,18 @@ $router->group(
|
||||
'uses' => 'UserController@profile'
|
||||
]);
|
||||
|
||||
$router->get('/statistics', [
|
||||
'uses' => 'UserController@statistics'
|
||||
]);
|
||||
|
||||
$router->get('/favorites', [
|
||||
'uses' => 'UserController@favorites'
|
||||
]);
|
||||
|
||||
$router->get('/about', [
|
||||
'uses' => 'UserController@about'
|
||||
]);
|
||||
|
||||
$router->get('/history[/{type:[A-Za-z]+}]', [
|
||||
'uses' => 'UserController@history'
|
||||
]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user