Add notifications api
This commit is contained in:
parent
916fbad8af
commit
2f92967a9c
|
@ -8,6 +8,9 @@ use App\Models\User;
|
||||||
use App\Notifications\DynamicNotification;
|
use App\Notifications\DynamicNotification;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Notifications\Messages\MailMessage;
|
||||||
|
use Illuminate\Support\HtmlString;
|
||||||
|
use Spatie\ValidationRules\Rules\Delimited;
|
||||||
|
|
||||||
class NotificationController extends Controller
|
class NotificationController extends Controller
|
||||||
{
|
{
|
||||||
|
@ -58,13 +61,27 @@ class NotificationController extends Controller
|
||||||
$discordUser = DiscordUser::find($userId);
|
$discordUser = DiscordUser::find($userId);
|
||||||
$user = $discordUser ? $discordUser->user : User::findOrFail($userId);
|
$user = $discordUser ? $discordUser->user : User::findOrFail($userId);
|
||||||
|
|
||||||
$body = $request->validate([
|
$via = $request->validate([
|
||||||
"title" => "required:string|min:0",
|
"via" => ["required", new Delimited("in:mail,database")]
|
||||||
"content" => "required:string|min:0"
|
|
||||||
]);
|
]);
|
||||||
|
$via = explode(',', $via["via"]);
|
||||||
|
$mail = null;
|
||||||
|
$database = null;
|
||||||
|
if (in_array('database', $via)) {
|
||||||
|
$database = $request->validate([
|
||||||
|
"title" => "required_if:database,true|string|min:1",
|
||||||
|
"content" => "required_if:database,true|string|min:1"
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
if (in_array('mail', $via)) {
|
||||||
|
$data = $request->validate([
|
||||||
|
"subject" => "required|string|min:1",
|
||||||
|
"body" => "required|string|min:1"
|
||||||
|
]);
|
||||||
|
$mail = (new MailMessage)->subject($data["subject"])->line(new HtmlString($data["body"]));
|
||||||
|
}
|
||||||
$user->notify(
|
$user->notify(
|
||||||
new DynamicNotification($body["title"], $body["content"])
|
new DynamicNotification($via, $database, $mail)
|
||||||
);
|
);
|
||||||
|
|
||||||
return response()->json(["message" => "Notification successfully sent."]);
|
return response()->json(["message" => "Notification successfully sent."]);
|
||||||
|
|
|
@ -10,24 +10,29 @@ class DynamicNotification extends Notification
|
||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $title;
|
private $via;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $content;
|
private $database;
|
||||||
|
/**
|
||||||
|
* @var MailMessage
|
||||||
|
*/
|
||||||
|
private $mail;
|
||||||
/**
|
/**
|
||||||
* Create a new notification instance.
|
* Create a new notification instance.
|
||||||
*
|
*
|
||||||
* @param string $title
|
* @param array $via
|
||||||
* @param string $content
|
* @param array $database
|
||||||
|
* @param MailMessage $mail
|
||||||
*/
|
*/
|
||||||
public function __construct($title, $content)
|
public function __construct($via, $database, $mail)
|
||||||
{
|
{
|
||||||
$this->title = $title;
|
$this->via = $via;
|
||||||
$this->content = $content;
|
$this->database = $database;
|
||||||
|
$this->mail = $mail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -38,9 +43,13 @@ class DynamicNotification extends Notification
|
||||||
*/
|
*/
|
||||||
public function via()
|
public function via()
|
||||||
{
|
{
|
||||||
return ['database'];
|
return $this->via;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function toMail()
|
||||||
|
{
|
||||||
|
return $this->mail;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Get the array representation of the notification.
|
* Get the array representation of the notification.
|
||||||
*
|
*
|
||||||
|
@ -49,9 +58,6 @@ class DynamicNotification extends Notification
|
||||||
*/
|
*/
|
||||||
public function toArray()
|
public function toArray()
|
||||||
{
|
{
|
||||||
return [
|
return $this->database;
|
||||||
'title' => $this->title,
|
|
||||||
'content' => $this->content,
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.0|^7.4",
|
"php": "^8.0|^7.4",
|
||||||
|
"ext-intl": "*",
|
||||||
"biscolab/laravel-recaptcha": "^5.0",
|
"biscolab/laravel-recaptcha": "^5.0",
|
||||||
"doctrine/dbal": "^3.1",
|
"doctrine/dbal": "^3.1",
|
||||||
"fideloper/proxy": "^4.4",
|
"fideloper/proxy": "^4.4",
|
||||||
|
@ -22,8 +23,8 @@
|
||||||
"paypal/rest-api-sdk-php": "^1.14",
|
"paypal/rest-api-sdk-php": "^1.14",
|
||||||
"socialiteproviders/discord": "^4.1",
|
"socialiteproviders/discord": "^4.1",
|
||||||
"spatie/laravel-activitylog": "^3.16",
|
"spatie/laravel-activitylog": "^3.16",
|
||||||
"yajra/laravel-datatables-oracle": "~9.0",
|
"spatie/laravel-validation-rules": "^3.0",
|
||||||
"ext-intl": "*"
|
"yajra/laravel-datatables-oracle": "~9.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"facade/ignition": "^2.5",
|
"facade/ignition": "^2.5",
|
||||||
|
|
73
composer.lock
generated
73
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "dda32482531d11fdf6adc74fcba74715",
|
"content-hash": "eb7191a6b0476ec319915f6b98561af9",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "asm89/stack-cors",
|
"name": "asm89/stack-cors",
|
||||||
|
@ -3460,6 +3460,77 @@
|
||||||
],
|
],
|
||||||
"time": "2021-03-02T16:49:06+00:00"
|
"time": "2021-03-02T16:49:06+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "spatie/laravel-validation-rules",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/spatie/laravel-validation-rules.git",
|
||||||
|
"reference": "43e15a70fb6148b0128d7981b0c0f3e99463b9fb"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/spatie/laravel-validation-rules/zipball/43e15a70fb6148b0128d7981b0c0f3e99463b9fb",
|
||||||
|
"reference": "43e15a70fb6148b0128d7981b0c0f3e99463b9fb",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"illuminate/support": "^6.0|^7.0|^8.0",
|
||||||
|
"php": "^7.3|^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"laravel/legacy-factories": "^1.0.4",
|
||||||
|
"myclabs/php-enum": "^1.6",
|
||||||
|
"orchestra/testbench": "^4.5|^5.0|^6.0",
|
||||||
|
"phpunit/phpunit": "^9.3",
|
||||||
|
"spatie/enum": "^2.2|^3.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"league/iso3166": "Needed for the CountryCode rule"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"laravel": {
|
||||||
|
"providers": [
|
||||||
|
"Spatie\\ValidationRules\\ValidationRulesServiceProvider"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Spatie\\ValidationRules\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Freek Van der Herten",
|
||||||
|
"email": "freek@spatie.be",
|
||||||
|
"homepage": "https://spatie.be",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A set of useful Laravel validation rules",
|
||||||
|
"homepage": "https://github.com/spatie/laravel-validation-rules",
|
||||||
|
"keywords": [
|
||||||
|
"laravel-validation-rules",
|
||||||
|
"spatie"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/spatie/laravel-validation-rules/issues",
|
||||||
|
"source": "https://github.com/spatie/laravel-validation-rules/tree/3.0.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/spatie",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2020-11-30T15:23:31+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "swiftmailer/swiftmailer",
|
"name": "swiftmailer/swiftmailer",
|
||||||
"version": "v6.2.7",
|
"version": "v6.2.7",
|
||||||
|
|
Loading…
Reference in a new issue