create/get upload request backend

This commit is contained in:
Čarodej
2022-02-17 10:11:43 +01:00
parent 394a7b6baf
commit 45a3b5415b
13 changed files with 354 additions and 29 deletions
@@ -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
namespace Domain\UploadRequest\Controllers;
use Domain\UploadRequest\Models\UploadRequest;
use Domain\UploadRequest\Resources\UploadRequestResource;
class GetUploadRequestController
{
public function __invoke()
public function __invoke(UploadRequest $uploadRequest)
{
return [
'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',
],
],
];
return new UploadRequestResource($uploadRequest);
}
}
@@ -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,
],
],
],
],
],
];
}
}