浏览代码

kintonewebhook関連、途中

master
sosuke.iwabuchi 2 年前
父节点
当前提交
bdd8c02c8e
共有 6 个文件被更改,包括 131 次插入1 次删除
  1. +32
    -0
      app/Http/Controllers/Web/KintoneWebHook/KintoneWebHookController.php
  2. +16
    -0
      app/Http/Controllers/Web/KintoneWebHook/SeasonTicketContractSelectionController.php
  3. +12
    -0
      app/Kintone/KintoneWebHookEventType.php
  4. +63
    -0
      app/Kintone/KintoneWebHookReceiver.php
  5. +4
    -0
      routes/apiFromKintone.php
  6. +4
    -1
      routes/web.php

+ 32
- 0
app/Http/Controllers/Web/KintoneWebHook/KintoneWebHookController.php 查看文件

@@ -0,0 +1,32 @@
<?php

namespace App\Http\Controllers\Web\KintoneWebHook;

use App\Http\Controllers\Web\WebController;
use App\Kintone\KintoneWebHookReceiver;
use App\Kintone\Models\KintoneModel;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

abstract class KintoneWebHookController extends WebController
{

protected KintoneModel $kintoneModel;
protected KintoneWebHookEventType $eventType;

abstract protected function handle();

protected function run(Request $request): Response
{
$receiver = new KintoneWebHookReceiver();
$this->kintoneModel = $receiver->readWebHookRequest($request);

if ($receiver->model !== null) {
$this->kintoneModel = $receiver->model;
$this->eventType = $receiver->type;
$this->handle();
}

return response();
}
}

+ 16
- 0
app/Http/Controllers/Web/KintoneWebHook/SeasonTicketContractSelectionController.php 查看文件

@@ -0,0 +1,16 @@
<?php

namespace App\Http\Controllers\Web\KintoneWebHook;

use App\Kintone\Models\SeasonTicketContractSelection;

class SeasonTicketContractSelectionController extends KintoneWebHookController
{

protected SeasonTicketContractSelection $kintoneModel;

protected function handle()
{
logger("OK WEBHOOK");
}
}

+ 12
- 0
app/Kintone/KintoneWebHookEventType.php 查看文件

@@ -0,0 +1,12 @@
<?php

namespace App\Kintone;

enum KintoneWebHookEventType: string
{
case ADD_RECORD = "ADD_RECORD";
case UPDATE_RECORD = "UPDATE_RECORD";
case UPDATE_STATUS = "UPDATE_STATUS";
case DELETE_RECORD = "DELETE_RECORD";
case ADD_RECORD_COMMENT = "ADD_RECORD_COMMENT";
}

+ 63
- 0
app/Kintone/KintoneWebHookReceiver.php 查看文件

@@ -0,0 +1,63 @@
<?php

namespace App\Kintone;

use App\Kintone\Models\KintoneModel;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;

class KintoneWebHookReceiver
{
/**
* key:appId
* value:KintoneModelのクラス名
* @var Collection<string, string>
*/
private Collection $config;

public ?KintoneModel $model = null;

public ?KintoneWebHookEventType $type = null;

public function __construct()
{
$this->config = collect();
foreach (config("kintone.applications", []) as $className => $config) {
$appId = $config['appId'];
$this->config->put($appId, $className);
}
}

public function readWebHookRequest(Request $request)
{
$data = $request->all();
$appId = data_get($data, 'app.id');
$this->type = KintoneWebHookEventType::from(data_get($data, "type", ""));

// 削除とコメント追記は扱わない
if ($this->type === KintoneWebHookEventType::DELETE_RECORD || $this->type === KintoneWebHookEventType::ADD_RECORD_COMMENT) {
return;
}

$model = $this->getModel($appId);
$record = data_get($data, 'record');

if (!$model->setDataFromRecordResponse($record)) {
Log::error($data);
throw new Exception("WebHook読込失敗");
}

$this->model = $model;
}

private function getModel(string $appId): KintoneModel
{
$className = $this->config->get($appId);
if ($className === null) {
throw new Exception("モデル不正");
}
return new $className();
}
}

+ 4
- 0
routes/apiFromKintone.php 查看文件

@@ -15,3 +15,7 @@ use App\Util\RouteHelper;

RouteHelper::post('/email/send', App\Http\Controllers\Web\Email\EmailSendController::class);
RouteHelper::post('/season-ticket-contract-selection/notice-to-candidates', App\Http\Controllers\Web\SeasonTicketContract\Selection\NoticeToCandidatesController::class);


// ------FOR WEBHOOK-------------------
RouteHelper::get('/webhook/season-ticket-contract-selection', App\Http\Controllers\Web\KintoneWebHook\SeasonTicketContractSelectionController::class);

+ 4
- 1
routes/web.php 查看文件

@@ -13,8 +13,11 @@ use App\Util\RouteHelper;
|
*/

// PDF
RouteHelper::get('/pdf', App\Http\Controllers\PDFController::class);

// 画像取得
RouteHelper::get('/image/season-ticket-contract', App\Http\Controllers\Web\Image\SeasonTicketContractImageController::class);
RouteHelper::get('/image/season-ticket-contract/{id}', App\Http\Controllers\Web\Image\SeasonTicketContractImageController::class);

// ルーティングで適合しない場合はフロント側のRoutingにゆだねる
RouteHelper::get('/{any?}', App\Http\Controllers\Web\IndexController::class)->where('any', '.*');

正在加载...
取消
保存