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 App\{
|
||||
Hashtag,
|
||||
Like,
|
||||
Media,
|
||||
Notification,
|
||||
Profile,
|
||||
StatusHashtag,
|
||||
Status,
|
||||
};
|
||||
use Auth,Cache;
|
||||
use Carbon\Carbon;
|
||||
use League\Fractal;
|
||||
use App\Transformer\Api\{
|
||||
AccountTransformer,
|
||||
|
@ -101,13 +105,15 @@ class InternalApiController extends Controller
|
|||
$attachments = [];
|
||||
$status = new Status;
|
||||
|
||||
foreach($medias as $media) {
|
||||
foreach($medias as $k => $media) {
|
||||
$m = Media::findOrFail($media['id']);
|
||||
if($m->profile_id !== $profile->id || $m->status_id) {
|
||||
abort(403, 'Invalid media id');
|
||||
}
|
||||
$m->filter_class = $media['filter'];
|
||||
$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) {
|
||||
$m->is_nsfw = true;
|
||||
$status->is_nsfw = true;
|
||||
|
@ -135,4 +141,87 @@ class InternalApiController extends Controller
|
|||
|
||||
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