mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-28 19:10:40 +00:00
create/get upload request backend
This commit is contained in:
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Factories;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||||
|
use Domain\UploadRequest\Models\UploadRequest;
|
||||||
|
|
||||||
|
class UploadRequestFactory extends Factory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name of the factory's corresponding model.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $model = UploadRequest::class;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the model's default state.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function definition()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->faker->uuid,
|
||||||
|
'user_id' => $this->faker->uuid,
|
||||||
|
'folder_id' => $this->faker->uuid,
|
||||||
|
'email' => $this->faker->email,
|
||||||
|
'notes' => $this->faker->realText(80),
|
||||||
|
'status' => $this->faker->randomElement(
|
||||||
|
['active', 'filled', 'expired']
|
||||||
|
),
|
||||||
|
'created_at' => $this->faker->dateTimeBetween('-1 months'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,8 @@ class CreateUserLimitationsTable extends Migration
|
|||||||
$table->uuid('user_id');
|
$table->uuid('user_id');
|
||||||
$table->text('max_storage_amount');
|
$table->text('max_storage_amount');
|
||||||
$table->text('max_team_members');
|
$table->text('max_team_members');
|
||||||
|
$table->charset = 'utf8mb4';
|
||||||
|
$table->collation = 'utf8mb4_unicode_ci';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateUploadRequestsTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('upload_requests', function (Blueprint $table) {
|
||||||
|
$table->uuid('id');
|
||||||
|
$table->uuid('user_id');
|
||||||
|
$table->uuid('folder_id');
|
||||||
|
$table->enum('status', ['active', 'filled', 'expired'])->default('active');
|
||||||
|
$table->string('email');
|
||||||
|
$table->longText('notes');
|
||||||
|
$table->timestamps();
|
||||||
|
$table->charset = 'utf8mb4';
|
||||||
|
$table->collation = 'utf8mb4_unicode_ci';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('upload_requests');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,14 +27,10 @@ use Domain\Browsing\Controllers\BrowseTrashContentController;
|
|||||||
use Domain\Homepage\Controllers\SendContactMessageController;
|
use Domain\Homepage\Controllers\SendContactMessageController;
|
||||||
use Domain\Sharing\Controllers\GetShareLinkViaQrCodeController;
|
use Domain\Sharing\Controllers\GetShareLinkViaQrCodeController;
|
||||||
use App\Users\Controllers\Authentication\RegisterUserController;
|
use App\Users\Controllers\Authentication\RegisterUserController;
|
||||||
use Domain\UploadRequest\Controllers\GetUploadRequestController;
|
|
||||||
|
|
||||||
// Ping Pong
|
// Ping Pong
|
||||||
Route::get('/ping', PingAPIController::class);
|
Route::get('/ping', PingAPIController::class);
|
||||||
|
|
||||||
// Upload Request
|
|
||||||
Route::get('/request', GetUploadRequestController::class);
|
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
Route::apiResource('/page', PagesController::class);
|
Route::apiResource('/page', PagesController::class);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Domain\UploadRequest\Controllers\CreateUploadRequestController;
|
||||||
|
use Domain\UploadRequest\Controllers\GetUploadRequestController;
|
||||||
|
|
||||||
|
Route::get('/{uploadRequest}', GetUploadRequestController::class);
|
||||||
|
|
||||||
|
Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||||
|
Route::post('/', CreateUploadRequestController::class);
|
||||||
|
});
|
||||||
@@ -30,21 +30,14 @@ class RouteServiceProvider extends ServiceProvider
|
|||||||
public function map()
|
public function map()
|
||||||
{
|
{
|
||||||
$this->mapApiRoutes();
|
$this->mapApiRoutes();
|
||||||
|
|
||||||
$this->mapShareRoutes();
|
$this->mapShareRoutes();
|
||||||
|
$this->mapUploadRequestRoutes();
|
||||||
$this->mapAdminApiRoutes();
|
$this->mapAdminApiRoutes();
|
||||||
|
|
||||||
$this->mapSetupWizardApiRoutes();
|
$this->mapSetupWizardApiRoutes();
|
||||||
|
|
||||||
$this->mapUserApiRoutes();
|
$this->mapUserApiRoutes();
|
||||||
|
|
||||||
$this->mapMaintenanceRoutes();
|
$this->mapMaintenanceRoutes();
|
||||||
|
|
||||||
$this->mapFileRoutes();
|
$this->mapFileRoutes();
|
||||||
|
|
||||||
$this->mapTeamsRoutes();
|
$this->mapTeamsRoutes();
|
||||||
|
|
||||||
$this->mapWebRoutes();
|
$this->mapWebRoutes();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,6 +87,13 @@ class RouteServiceProvider extends ServiceProvider
|
|||||||
->group(base_path('routes/share.php'));
|
->group(base_path('routes/share.php'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function mapUploadRequestRoutes()
|
||||||
|
{
|
||||||
|
Route::prefix('api/upload-request')
|
||||||
|
->middleware('api')
|
||||||
|
->group(base_path('routes/upload-request.php'));
|
||||||
|
}
|
||||||
|
|
||||||
protected function mapAdminApiRoutes()
|
protected function mapAdminApiRoutes()
|
||||||
{
|
{
|
||||||
Route::prefix('api/admin')
|
Route::prefix('api/admin')
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ use Illuminate\Notifications\Notifiable;
|
|||||||
use App\Users\Notifications\ResetPassword;
|
use App\Users\Notifications\ResetPassword;
|
||||||
use Laravel\Fortify\TwoFactorAuthenticatable;
|
use Laravel\Fortify\TwoFactorAuthenticatable;
|
||||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||||
|
use Domain\UploadRequest\Models\UploadRequest;
|
||||||
use App\Users\Restrictions\RestrictionsManager;
|
use App\Users\Restrictions\RestrictionsManager;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
@@ -180,6 +181,11 @@ class User extends Authenticatable implements MustVerifyEmail
|
|||||||
return $this->hasMany(Traffic::class);
|
return $this->hasMany(Traffic::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function uploadRequest(): HasOne
|
||||||
|
{
|
||||||
|
return $this->hasOne(UploadRequest::class);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send the password reset notification.
|
* Send the password reset notification.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Domain\UploadRequest\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Auth;
|
||||||
|
use Domain\UploadRequest\Notifications\UploadRequestNotification;
|
||||||
|
use Domain\UploadRequest\Resources\UploadRequestResource;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Notification;
|
||||||
|
|
||||||
|
class CreateUploadRequestController extends Controller
|
||||||
|
{
|
||||||
|
public function __invoke(Request $request)
|
||||||
|
{
|
||||||
|
$uploadRequest = Auth::user()->uploadRequest()->create([
|
||||||
|
'folder_id' => $request->input('folder_id'),
|
||||||
|
'email' => $request->input('email'),
|
||||||
|
'notes' => $request->input('notes'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
Notification::route('mail', $uploadRequest->email)
|
||||||
|
->notify(new UploadRequestNotification($uploadRequest));
|
||||||
|
|
||||||
|
return response(new UploadRequestResource($uploadRequest), 201);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,25 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Domain\UploadRequest\Controllers;
|
namespace Domain\UploadRequest\Controllers;
|
||||||
|
|
||||||
|
use Domain\UploadRequest\Models\UploadRequest;
|
||||||
|
use Domain\UploadRequest\Resources\UploadRequestResource;
|
||||||
|
|
||||||
class GetUploadRequestController
|
class GetUploadRequestController
|
||||||
{
|
{
|
||||||
public function __invoke()
|
public function __invoke(UploadRequest $uploadRequest)
|
||||||
{
|
{
|
||||||
return [
|
return new UploadRequestResource($uploadRequest);
|
||||||
'user' => [
|
|
||||||
'data' => [
|
|
||||||
'attributes' => [
|
|
||||||
'name' => 'Jane Doe',
|
|
||||||
'avatar' => [
|
|
||||||
'md' => 'http://192.168.1.112:8000/avatars/md-f45abbe5-962c-4229-aef2-9991e96d54d9.png',
|
|
||||||
'sm' => 'http://192.168.1.112:8000/avatars/md-f45abbe5-962c-4229-aef2-9991e96d54d9.png',
|
|
||||||
'xs' => 'http://192.168.1.112:8000/avatars/md-f45abbe5-962c-4229-aef2-9991e96d54d9.png',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'id' => '123',
|
|
||||||
'type' => 'user',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
namespace Domain\UploadRequest\Models;
|
||||||
|
|
||||||
|
use App\Users\Models\User;
|
||||||
|
use Database\Factories\UploadRequestFactory;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method static create(array $array)
|
||||||
|
* @property string id
|
||||||
|
* @property string user_id
|
||||||
|
* @property string folder_id
|
||||||
|
* @property string status
|
||||||
|
* @property string email
|
||||||
|
* @property string notes
|
||||||
|
* @property string created_at
|
||||||
|
* @property string updated_at
|
||||||
|
*/
|
||||||
|
class UploadRequest extends Model
|
||||||
|
{
|
||||||
|
use HasFactory;
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'id' => 'string',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $guarded = ['id'];
|
||||||
|
|
||||||
|
public $incrementing = false;
|
||||||
|
|
||||||
|
protected $keyType = 'string';
|
||||||
|
|
||||||
|
protected static function newFactory(): UploadRequestFactory
|
||||||
|
{
|
||||||
|
return UploadRequestFactory::new();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function user(): HasOne
|
||||||
|
{
|
||||||
|
return $this->hasOne(User::class, 'id', 'user_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static function boot()
|
||||||
|
{
|
||||||
|
parent::boot();
|
||||||
|
|
||||||
|
static::creating(fn ($invitation) => $invitation->id = Str::uuid());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Domain\UploadRequest\Notifications;
|
||||||
|
|
||||||
|
use Domain\UploadRequest\Models\UploadRequest;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Notifications\Messages\MailMessage;
|
||||||
|
use Illuminate\Notifications\Notification;
|
||||||
|
|
||||||
|
class UploadRequestNotification extends Notification implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Queueable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new notification instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct(
|
||||||
|
public UploadRequest $uploadRequest
|
||||||
|
) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the notification's delivery channels.
|
||||||
|
*
|
||||||
|
* @param mixed $notifiable
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function via($notifiable)
|
||||||
|
{
|
||||||
|
return ['mail'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the mail representation of the notification.
|
||||||
|
*
|
||||||
|
* @param mixed $notifiable
|
||||||
|
* @return \Illuminate\Notifications\Messages\MailMessage
|
||||||
|
*/
|
||||||
|
public function toMail($notifiable)
|
||||||
|
{
|
||||||
|
// TODO: add to language strings
|
||||||
|
return (new MailMessage)
|
||||||
|
->subject("{$this->uploadRequest->user->settings->first_name} Request You for File Upload")
|
||||||
|
->greeting('Hello')
|
||||||
|
->line("We are emailing you because {$this->uploadRequest->user->settings->first_name} needs files from you. Please click on the link below and upload your files for {$this->uploadRequest->user->settings->first_name}.")
|
||||||
|
->action('Upload Files', url('/'))
|
||||||
|
->line('Thank you for using our application!');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the array representation of the notification.
|
||||||
|
*
|
||||||
|
* @param mixed $notifiable
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($notifiable)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
//
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
namespace Domain\UploadRequest\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class UploadRequestResource extends JsonResource
|
||||||
|
{
|
||||||
|
public function toArray($request): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'data' => [
|
||||||
|
'id' => $this->id,
|
||||||
|
'type' => 'upload-request',
|
||||||
|
'attributes' => [
|
||||||
|
'folder_id' => $this->folder_id,
|
||||||
|
'status' => $this->status,
|
||||||
|
'email' => $this->email,
|
||||||
|
'notes' => $this->notes,
|
||||||
|
],
|
||||||
|
'relationships' => [
|
||||||
|
'user' => [
|
||||||
|
'data' => [
|
||||||
|
'id' => $this->user->id,
|
||||||
|
'type' => 'user',
|
||||||
|
'attributes' => [
|
||||||
|
'name' => $this->user->settings->name,
|
||||||
|
'avatar' => $this->user->settings->avatar,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Domain\UploadRequest;
|
||||||
|
|
||||||
|
use Domain\UploadRequest\Notifications\UploadRequestNotification;
|
||||||
|
use Domain\UploadRequest\Models\UploadRequest;
|
||||||
|
use App\Users\Models\User;
|
||||||
|
use Tests\TestCase;
|
||||||
|
use Notification;
|
||||||
|
|
||||||
|
class UploadRequestTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_test_upload_request_factory()
|
||||||
|
{
|
||||||
|
$uploadRequest = UploadRequest::factory()
|
||||||
|
->create();
|
||||||
|
|
||||||
|
$this->assertModelExists($uploadRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function user_create_upload_request()
|
||||||
|
{
|
||||||
|
$user = User::factory()
|
||||||
|
->hasSettings()
|
||||||
|
->create();
|
||||||
|
|
||||||
|
$this
|
||||||
|
->actingAs($user)
|
||||||
|
->postJson("/api/upload-request", [
|
||||||
|
'folder_id' => '00cacdb9-1d09-4a32-8ad7-c0d45d66b758',
|
||||||
|
'email' => 'howdy@hi5ve.digital',
|
||||||
|
'notes' => 'Please send me your files...',
|
||||||
|
])
|
||||||
|
->assertCreated();
|
||||||
|
|
||||||
|
$this->assertDatabasehas('upload_requests', [
|
||||||
|
'folder_id' => '00cacdb9-1d09-4a32-8ad7-c0d45d66b758',
|
||||||
|
'email' => 'howdy@hi5ve.digital',
|
||||||
|
'notes' => 'Please send me your files...',
|
||||||
|
]);
|
||||||
|
|
||||||
|
Notification::assertTimesSent(1, UploadRequestNotification::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_get_upload_request_detail()
|
||||||
|
{
|
||||||
|
$user = User::factory()
|
||||||
|
->hasSettings()
|
||||||
|
->create();
|
||||||
|
|
||||||
|
$uploadRequest = UploadRequest::factory()
|
||||||
|
->create([
|
||||||
|
'user_id' => $user->id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->getJson("/api/upload-request/$uploadRequest->id")
|
||||||
|
->assertOk()
|
||||||
|
->assertJsonFragment([
|
||||||
|
'id' => $uploadRequest->id,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user