forked from mirror/pixelfed
Update InternalApiController
This commit is contained in:
parent
033dc7cc96
commit
3696745cbf
1 changed files with 90 additions and 1 deletions
|
@ -4,12 +4,16 @@ namespace App\Http\Controllers;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\{
|
use App\{
|
||||||
|
Hashtag,
|
||||||
Like,
|
Like,
|
||||||
Media,
|
Media,
|
||||||
|
Notification,
|
||||||
Profile,
|
Profile,
|
||||||
|
StatusHashtag,
|
||||||
Status,
|
Status,
|
||||||
};
|
};
|
||||||
use Auth,Cache;
|
use Auth,Cache;
|
||||||
|
use Carbon\Carbon;
|
||||||
use League\Fractal;
|
use League\Fractal;
|
||||||
use App\Transformer\Api\{
|
use App\Transformer\Api\{
|
||||||
AccountTransformer,
|
AccountTransformer,
|
||||||
|
@ -101,13 +105,15 @@ class InternalApiController extends Controller
|
||||||
$attachments = [];
|
$attachments = [];
|
||||||
$status = new Status;
|
$status = new Status;
|
||||||
|
|
||||||
foreach($medias as $media) {
|
foreach($medias as $k => $media) {
|
||||||
$m = Media::findOrFail($media['id']);
|
$m = Media::findOrFail($media['id']);
|
||||||
if($m->profile_id !== $profile->id || $m->status_id) {
|
if($m->profile_id !== $profile->id || $m->status_id) {
|
||||||
abort(403, 'Invalid media id');
|
abort(403, 'Invalid media id');
|
||||||
}
|
}
|
||||||
$m->filter_class = $media['filter'];
|
$m->filter_class = $media['filter'];
|
||||||
$m->license = $media['license'];
|
$m->license = $media['license'];
|
||||||
|
$m->caption = strip_tags($media['alt']);
|
||||||
|
$m->order = isset($media['cursor']) && is_int($media['cursor']) ? (int) $media['cursor'] : $k;
|
||||||
if($media['cw'] == true) {
|
if($media['cw'] == true) {
|
||||||
$m->is_nsfw = true;
|
$m->is_nsfw = true;
|
||||||
$status->is_nsfw = true;
|
$status->is_nsfw = true;
|
||||||
|
@ -135,4 +141,87 @@ class InternalApiController extends Controller
|
||||||
|
|
||||||
return $status->url();
|
return $status->url();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function notifications(Request $request)
|
||||||
|
{
|
||||||
|
$this->validate($request, [
|
||||||
|
'page' => 'nullable|min:1|max:3',
|
||||||
|
]);
|
||||||
|
$profile = Auth::user()->profile;
|
||||||
|
$timeago = Carbon::now()->subMonths(6);
|
||||||
|
$notifications = Notification::with('actor')
|
||||||
|
->whereProfileId($profile->id)
|
||||||
|
->whereDate('created_at', '>', $timeago)
|
||||||
|
->orderBy('id', 'desc')
|
||||||
|
->simplePaginate(30);
|
||||||
|
$notifications = $notifications->map(function($k, $v) {
|
||||||
|
return [
|
||||||
|
'id' => $k->id,
|
||||||
|
'action' => $k->action,
|
||||||
|
'message' => $k->message,
|
||||||
|
'rendered' => $k->rendered,
|
||||||
|
'actor' => [
|
||||||
|
'avatar' => $k->actor->avatarUrl(),
|
||||||
|
'username' => $k->actor->username,
|
||||||
|
'url' => $k->actor->url(),
|
||||||
|
],
|
||||||
|
// 'item' => [
|
||||||
|
// 'url' => $k->item->url(),
|
||||||
|
// 'thumb' => $k->item->thumb(),
|
||||||
|
// ],
|
||||||
|
'url' => $k->item->url()
|
||||||
|
];
|
||||||
|
});
|
||||||
|
return response()->json($notifications, 200, [], JSON_PRETTY_PRINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function discover(Request $request)
|
||||||
|
{
|
||||||
|
$profile = Auth::user()->profile;
|
||||||
|
|
||||||
|
$following = Cache::get('feature:discover:following:'.$profile->id, []);
|
||||||
|
$people = Profile::select('id', 'name', 'username')
|
||||||
|
->with('avatar')
|
||||||
|
->inRandomOrder()
|
||||||
|
->whereHas('statuses')
|
||||||
|
->whereNull('domain')
|
||||||
|
->whereNotIn('id', $following)
|
||||||
|
->whereIsPrivate(false)
|
||||||
|
->take(3)
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$posts = Status::select('id', 'caption', 'profile_id')
|
||||||
|
->whereHas('media')
|
||||||
|
->whereHas('profile', function($q) {
|
||||||
|
$q->where('is_private', false);
|
||||||
|
})
|
||||||
|
->whereIsNsfw(false)
|
||||||
|
->whereVisibility('public')
|
||||||
|
->where('profile_id', '<>', $profile->id)
|
||||||
|
->whereNotIn('profile_id', $following)
|
||||||
|
->withCount(['comments', 'likes'])
|
||||||
|
->orderBy('created_at', 'desc')
|
||||||
|
->take(21)
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$res = [
|
||||||
|
'people' => $people->map(function($profile) {
|
||||||
|
return [
|
||||||
|
'avatar' => $profile->avatarUrl(),
|
||||||
|
'name' => $profile->name,
|
||||||
|
'username' => $profile->username,
|
||||||
|
'url' => $profile->url(),
|
||||||
|
];
|
||||||
|
}),
|
||||||
|
'posts' => $posts->map(function($post) {
|
||||||
|
return [
|
||||||
|
'url' => $post->url(),
|
||||||
|
'thumb' => $post->thumb(),
|
||||||
|
'comments_count' => $post->comments_count,
|
||||||
|
'likes_count' => $post->likes_count,
|
||||||
|
];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
return response()->json($res, 200, [], JSON_PRETTY_PRINT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue