Add Media Tags

This commit is contained in:
Daniel Supernault 2020-07-14 17:04:51 -06:00
parent 611c7b922a
commit 711fc020e7
No known key found for this signature in database
GPG key ID: 0DEF1C662C9033F7
3 changed files with 106 additions and 0 deletions

View file

@ -0,0 +1,55 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\MediaTag;
use App\Profile;
use App\UserFilter;
use App\User;
use Illuminate\Support\Str;
class MediaTagController extends Controller
{
public function usernameLookup(Request $request)
{
abort_if(!$request->user(), 403);
$this->validate($request, [
'q' => 'required|string|min:1|max:50'
]);
$q = $request->input('q');
if(Str::of($q)->startsWith('@')) {
if(strlen($q) < 3) {
return [];
}
$q = mb_substr($q, 1);
}
$blocked = UserFilter::whereFilterableType('App\Profile')
->whereFilterType('block')
->whereFilterableId($request->user()->profile_id)
->pluck('user_id');
$blocked->push($request->user()->profile_id);
$results = Profile::select('id','domain','username')
->whereNotIn('id', $blocked)
->whereNull('domain')
->where('username','like','%'.$q.'%')
->limit(15)
->get()
->map(function($r) {
return [
'id' => (string) $r->id,
'name' => $r->username,
'privacy' => true,
'avatar' => $r->avatarUrl()
];
});
return $results;
}
}

13
app/MediaTag.php Normal file
View file

@ -0,0 +1,13 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class MediaTag extends Model
{
public function status()
{
return $this->belongsTo(Status::class);
}
}

View file

@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMediaTagsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('media_tags', function (Blueprint $table) {
$table->id();
$table->bigInteger('status_id')->unsigned()->index()->nullable();
$table->bigInteger('media_id')->unsigned()->index();
$table->bigInteger('profile_id')->unsigned()->index();
$table->string('tagged_username')->nullable();
$table->boolean('is_public')->default(true)->index();
$table->json('metadata')->nullable();
$table->unique(['media_id', 'profile_id']);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('media_tags');
}
}