Bladeren bron

QRサービス券駐車場グループ管理周辺整備

develop
sosuke.iwabuchi 1 jaar geleden
bovenliggende
commit
f3590e16f4
18 gewijzigde bestanden met toevoegingen van 541 en 5 verwijderingen
  1. +41
    -0
      app/Http/Controllers/Web/Parking/ParkingListController.php
  2. +9
    -0
      app/Http/Controllers/Web/Parking/ParkingListParam.php
  3. +43
    -0
      app/Http/Controllers/Web/QRService/Group/QRServiceGroupAddController.php
  4. +22
    -0
      app/Http/Controllers/Web/QRService/Group/QRServiceGroupAddParam.php
  5. +84
    -0
      app/Http/Controllers/Web/QRService/Group/QRServiceGroupListController.php
  6. +25
    -0
      app/Http/Controllers/Web/QRService/Group/QRServiceGroupListParam.php
  7. +46
    -0
      app/Http/Controllers/Web/QRService/Group/QRServiceGroupRegisterController.php
  8. +19
    -0
      app/Http/Controllers/Web/QRService/Group/QRServiceGroupRegisterParam.php
  9. +43
    -0
      app/Http/Controllers/Web/QRService/Group/QRServiceGroupRemoveController.php
  10. +22
    -0
      app/Http/Controllers/Web/QRService/Group/QRServiceGroupRemoveParam.php
  11. +1
    -1
      app/Http/Controllers/Web/Shop/Config/ShopConfigController.php
  12. +1
    -1
      app/Http/Controllers/Web/Shop/Config/ShopConfigParam.php
  13. +50
    -0
      app/Logics/QRService/QRServiceParkingGroupLogic.php
  14. +18
    -0
      app/Models/HtpmsCustomer/Existing/Parking.php
  15. +1
    -1
      app/Models/HtpmsCustomer/QRService/ServiceParkingGroupHistory.php
  16. +95
    -0
      app/Repositories/QRServiceParkingGroupRepository.php
  17. +14
    -0
      app/Repositories/QRServiceParkingGroupRepositoryData.php
  18. +7
    -2
      routes/api.php

+ 41
- 0
app/Http/Controllers/Web/Parking/ParkingListController.php Bestand weergeven

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

namespace App\Http\Controllers\Web\Parking;

use App\Http\Controllers\Web\WebController;
use App\Models\ColumnName;
use App\Models\HtpmsCustomer\Existing\Parking;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class ParkingListController extends WebController
{

public function name(): string
{
return "駐車場一覧取得";
}

public function description(): string
{
return "駐車場一覧を取得する";
}


public function __construct(protected ParkingListParam $param)
{
parent::__construct();
}

protected function run(Request $request): JsonResponse
{
$res = [
"list" => Parking::getBuilder()->select([
sprintf("%s as %s", Parking::COL_NAME_PARKING_MANAGEMENT_CODE, ColumnName::PARKING_MANAGEMENT_CODE),
sprintf("%s as %s", Parking::COL_NAME_PARKING_NAME, "parking_name"),
])->get()
];

return $this->successResponse($res);
}
}

+ 9
- 0
app/Http/Controllers/Web/Parking/ParkingListParam.php Bestand weergeven

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

namespace App\Http\Controllers\Web\Parking;

use App\Http\Controllers\Web\NoneParams;

class ParkingListParam extends NoneParams
{
}

+ 43
- 0
app/Http/Controllers/Web/QRService/Group/QRServiceGroupAddController.php Bestand weergeven

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

namespace App\Http\Controllers\Web\QRService\Group;

use App\Http\Controllers\Web\WebController;
use App\Logics\QRService\QRServiceParkingGroupLogic;
use App\Models\HtpmsCustomer\Existing\Parking;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroup;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class QRServiceGroupAddController extends WebController
{

public function name(): string
{
return "QRサービス券駐車場グループ駐車場追加";
}

public function description(): string
{
return "QRサービス券駐車場グループへ駐車場を追加する";
}


public function __construct(protected QRServiceGroupAddParam $param)
{
parent::__construct();
}

protected function run(Request $request): JsonResponse
{
$param = $this->param;

$group = ServiceParkingGroup::findOrFail($param->id);
$parking = Parking::whereParkCode($param->parkingManagementCode)
->firstOrFail();
QRServiceParkingGroupLogic::add($group, $parking);


return $this->successResponse();
}
}

+ 22
- 0
app/Http/Controllers/Web/QRService/Group/QRServiceGroupAddParam.php Bestand weergeven

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

namespace App\Http\Controllers\Web\QRService\Group;

use App\Http\Controllers\Web\BaseParam;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroup;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroupRelation;

/**
* @property string id
* @property string parkingManagementCode
*/
class QRServiceGroupAddParam extends BaseParam
{
public function rules(): array
{
return [
ServiceParkingGroup::COL_NAME_ID => $this->str(),
ServiceParkingGroupRelation::COL_NAME_PARKING_MANAGEMENT_CODE => $this->str(),
];
}
}

+ 84
- 0
app/Http/Controllers/Web/QRService/Group/QRServiceGroupListController.php Bestand weergeven

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

namespace App\Http\Controllers\Web\QRService\Group;

use App\Http\Controllers\Web\WebController;
use App\Repositories\QRServiceParkingGroupRepository;
use App\Repositories\QRServiceParkingGroupRepositoryData;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class QRServiceGroupListController extends WebController
{

public function name(): string
{
return "QRサービス券駐車場グループ取得";
}

public function description(): string
{
return "QRサービス券駐車場グループを取得する";
}


public function __construct(protected QRServiceGroupListParam $param, private QRServiceParkingGroupRepository $repository)
{
parent::__construct();
}

protected function run(Request $request): JsonResponse
{
$param = $this->param;

$list = $this->repository->get([
...$param->toArray(),
]);


// データ整形
$container = new データ整形();
foreach ($list as $data) {
$container->add($data);
}

$res = [
'list' => $container->output(),
];

return $this->successResponse($res);
}
}


class データ整形
{

private array $name = [];
private array $parking = [];

public function add(QRServiceParkingGroupRepositoryData $data)
{
$this->name[$data->id] = $data->name;

if ($data->parking_management_code === null) return;

$this->parking[$data->id][] = [
"parking_management_code" => $data->parking_management_code,
"parking_name" => $data->parking_name,
];
}

public function output(): array
{
$ret = [];
foreach ($this->name as $id => $name) {
$data = [];
$data['id'] = $id;
$data['name'] = $name;
$data['parkings'] = data_get($this->parking, $id, []);
$ret[] = $data;
}
return $ret;
}
}

+ 25
- 0
app/Http/Controllers/Web/QRService/Group/QRServiceGroupListParam.php Bestand weergeven

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

namespace App\Http\Controllers\Web\QRService\Group;

use App\Http\Controllers\Web\BaseParam;
use App\Http\Controllers\Web\SortableParam;
use App\Repositories\QRServiceParkingGroupRepository;

/**
* @property ?string qrServiceParkingGroupId
* @property ?string name
* @property ?string parkingManagementCode
*/
class QRServiceGroupListParam extends BaseParam implements SortableParam
{
public function rules(): array
{
return [
QRServiceParkingGroupRepository::CONDITION_QR_SERVICE_PARKING_GROUP_ID => $this->str(true),
QRServiceParkingGroupRepository::CONDITION_NAME => $this->str(true),
QRServiceParkingGroupRepository::CONDITION_PARKING_MANAGEMENT_CODE => $this->str(true),
...$this->sortableRules(),
];
}
}

+ 46
- 0
app/Http/Controllers/Web/QRService/Group/QRServiceGroupRegisterController.php Bestand weergeven

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

namespace App\Http\Controllers\Web\QRService\Group;

use App\Http\Controllers\Web\WebController;
use App\Logics\QRService\QRServiceParkingGroupLogic;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroup;
use App\Repositories\QRServiceParkingGroupRepository;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class QRServiceGroupRegisterController extends WebController
{

public function name(): string
{
return "QRサービス券駐車場グループ新規登録";
}

public function description(): string
{
return "QRサービス券駐車場グループを新規登録する";
}


public function __construct(protected QRServiceGroupRegisterParam $param, private QRServiceParkingGroupRepository $repository)
{
parent::__construct();
}

protected function run(Request $request): JsonResponse
{
$param = $this->param;

$group = new ServiceParkingGroup();
$group->name = $param->name;
QRServiceParkingGroupLogic::register($group);


$res = [
'id' => $group->id,
];

return $this->successResponse($res);
}
}

+ 19
- 0
app/Http/Controllers/Web/QRService/Group/QRServiceGroupRegisterParam.php Bestand weergeven

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

namespace App\Http\Controllers\Web\QRService\Group;

use App\Http\Controllers\Web\BaseParam;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroup;

/**
* @property string name
*/
class QRServiceGroupRegisterParam extends BaseParam
{
public function rules(): array
{
return [
ServiceParkingGroup::COL_NAME_NAME => $this->str(["between:5,100"])
];
}
}

+ 43
- 0
app/Http/Controllers/Web/QRService/Group/QRServiceGroupRemoveController.php Bestand weergeven

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

namespace App\Http\Controllers\Web\QRService\Group;

use App\Http\Controllers\Web\WebController;
use App\Logics\QRService\QRServiceParkingGroupLogic;
use App\Models\HtpmsCustomer\Existing\Parking;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroup;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class QRServiceGroupRemoveController extends WebController
{

public function name(): string
{
return "QRサービス券駐車場グループ駐車場削除";
}

public function description(): string
{
return "QRサービス券駐車場グループへ駐車場を削除する";
}


public function __construct(protected QRServiceGroupRemoveParam $param)
{
parent::__construct();
}

protected function run(Request $request): JsonResponse
{
$param = $this->param;

$group = ServiceParkingGroup::findOrFail($param->id);
$parking = Parking::whereParkCode($param->parkingManagementCode)
->firstOrFail();
QRServiceParkingGroupLogic::remove($group, $parking);


return $this->successResponse();
}
}

+ 22
- 0
app/Http/Controllers/Web/QRService/Group/QRServiceGroupRemoveParam.php Bestand weergeven

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

namespace App\Http\Controllers\Web\QRService\Group;

use App\Http\Controllers\Web\BaseParam;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroup;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroupRelation;

/**
* @property string id
* @property string parkingManagementCode
*/
class QRServiceGroupRemoveParam extends BaseParam
{
public function rules(): array
{
return [
ServiceParkingGroup::COL_NAME_ID => $this->str(),
ServiceParkingGroupRelation::COL_NAME_PARKING_MANAGEMENT_CODE => $this->str(),
];
}
}

app/Http/Controllers/Web/Shop/ShopConfigController.php → app/Http/Controllers/Web/Shop/Config/ShopConfigController.php Bestand weergeven

@@ -1,6 +1,6 @@
<?php

namespace App\Http\Controllers\Web\Shop;
namespace App\Http\Controllers\Web\Shop\Config;

use App\Http\Controllers\Web\WebController;
use App\Logics\QRService\ChargeLogic;

app/Http/Controllers/Web/Shop/ShopConfigParam.php → app/Http/Controllers/Web/Shop/Config/ShopConfigParam.php Bestand weergeven

@@ -1,6 +1,6 @@
<?php

namespace App\Http\Controllers\Web\Shop;
namespace App\Http\Controllers\Web\Shop\Config;

use App\Http\Controllers\Web\BaseParam;
use App\Models\ColumnName;

+ 50
- 0
app/Logics/QRService/QRServiceParkingGroupLogic.php Bestand weergeven

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

namespace App\Logics\QRService;

use App\Exceptions\ParamException;
use App\Models\HtpmsCustomer\Existing\Parking;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroup;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroupRelation;

class QRServiceParkingGroupLogic
{

public static function register(ServiceParkingGroup $group)
{

// 重複チェック
if (ServiceParkingGroup::whereName($group->name)->exists()) {
ParamException::throw(ServiceParkingGroup::COL_NAME_NAME, trans('validate.exists'));
}

$group->save();
}

public static function add(ServiceParkingGroup $group, Parking $parking)
{

// 重複チェック
if (ServiceParkingGroupRelation::whereQrServiceParkingGroupId($group->id)
->whereParkingManagementCode($parking->park_code)
->exists()
) {
ParamException::throw(ServiceParkingGroupRelation::COL_NAME_PARKING_MANAGEMENT_CODE, trans('validate.exists'));
}

$relation = new ServiceParkingGroupRelation();
$relation->qr_service_parking_group_id = $group->id;
$relation->parking_management_code = $parking->park_code;
$relation->save();

return $relation;
}
public static function remove(ServiceParkingGroup $group, Parking $parking)
{
$relation = ServiceParkingGroupRelation::whereQrServiceParkingGroupId($group->id)
->whereParkingManagementCode($parking->park_code)
->firstOrFail();

$relation->delete();
}
}

+ 18
- 0
app/Models/HtpmsCustomer/Existing/Parking.php Bestand weergeven

@@ -3,6 +3,8 @@
namespace App\Models\HtpmsCustomer\Existing;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\DB;

class Parking extends Model
{
@@ -13,4 +15,20 @@ class Parking extends Model
protected $table = 'tbl_park';
protected $fillable = []; // 参照専用

protected $visible = [
self::COL_NAME_PARKING_MANAGEMENT_CODE,
self::COL_NAME_PARKING_NAME,
];


public static function getBuilder(string $name = 'main'): Builder
{
$instance = new static();
return DB::connection($instance->getConnectionName())->table(static::getTableName(), $name);
}

public static function getTableName(): string
{
return (new static)->getTable();
}
}

+ 1
- 1
app/Models/HtpmsCustomer/QRService/ServiceParkingGroupHistory.php Bestand weergeven

@@ -5,7 +5,7 @@ namespace App\Models\HtpmsCustomer\QRService;
use App\Models\HtpmsCustomer\HtpmsCustomerHistoryModel;

/**
* QRサービス券駐車場グループ
* QRサービス券駐車場グループ履歴
*/
class ServiceParkingGroupHistory extends HtpmsCustomerHistoryModel
{


+ 95
- 0
app/Repositories/QRServiceParkingGroupRepository.php Bestand weergeven

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

namespace App\Repositories;

use App\Models\ColumnName;
use App\Models\HtpmsCustomer\Existing\Parking;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroup;
use App\Models\HtpmsCustomer\QRService\ServiceParkingGroupRelation;
use App\Repositories\BaseRepository;
use Illuminate\Database\Query\JoinClause;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;

class QRServiceParkingGroupRepository extends BaseRepository
{

const CONDITION_QR_SERVICE_PARKING_GROUP_ID = ColumnName::QR_SERVICE_PARKING_GROUP_ID;
const CONDITION_NAME = 'name';
const CONDITION_PARKING_MANAGEMENT_CODE = ColumnName::PARKING_MANAGEMENT_CODE;

const TABLE_GROUP = "group";
const TABLE_RELATION = "relation";
const TABLE_PARKING = "parking";


/**
* コレクションを取得する
*
* @param array $condition
* @return Collection<int, QRServiceParkingGroupRepositoryData>
*/
public function get(array $condition): Collection
{

$table = ServiceParkingGroup::getBuilder(static::TABLE_GROUP);

$table->leftJoinSub(ServiceParkingGroupRelation::getBuilder(), static::TABLE_RELATION, function (JoinClause $join) {
$join->on(
$this->makeColumnName([static::TABLE_GROUP, ServiceParkingGroup::COL_NAME_ID]),
$this->makeColumnName([static::TABLE_RELATION, ServiceParkingGroupRelation::COL_NAME_QR_SERVICE_PARKING_GROUP_ID])
);
});
$table->leftJoinSub(Parking::getBuilder(), static::TABLE_PARKING, function (JoinClause $join) {
$join->on(
$this->makeColumnName([static::TABLE_RELATION, ServiceParkingGroupRelation::COL_NAME_PARKING_MANAGEMENT_CODE]),
$this->makeColumnName([static::TABLE_PARKING, Parking::COL_NAME_PARKING_MANAGEMENT_CODE])
);
});

// -----検索条件
// GROUP_ID
$this->where($table, $condition, static::CONDITION_QR_SERVICE_PARKING_GROUP_ID, $this->makeColumnName([static::TABLE_GROUP, ServiceParkingGroup::COL_NAME_ID]));

// 名前
$name = data_get($condition, static::CONDITION_NAME);
if ($name) {
$table->where($this->makeColumnName([static::TABLE_GROUP, ServiceParkingGroup::COL_NAME_NAME]), 'like', "%{$name}%");
}

// 駐車場管理コード
$this->where($table, $condition, static::CONDITION_PARKING_MANAGEMENT_CODE, $this->makeColumnName([
static::TABLE_RELATION,
ServiceParkingGroupRelation::COL_NAME_PARKING_MANAGEMENT_CODE
]));


$table->select($this->columns());

$main = DB::connection("htpms_customer")->table($table, "main");

// ソート
$this->sort($main, $condition);

// リミット
$this->limit($main, $condition);


return QRServiceParkingGroupRepositoryData::makeList($main->get());
}

private function columns()
{
$group = static::TABLE_GROUP;
$relation = static::TABLE_RELATION;
$parking = static::TABLE_PARKING;
$columns = [
$this->makeColumnNameForSelect([$group, ServiceParkingGroup::COL_NAME_ID]),
$this->makeColumnNameForSelect([$group, ServiceParkingGroup::COL_NAME_NAME]),
$this->makeColumnNameForSelect([$parking, Parking::COL_NAME_PARKING_MANAGEMENT_CODE], ColumnName::PARKING_MANAGEMENT_CODE),
$this->makeColumnNameForSelect([$parking, Parking::COL_NAME_PARKING_NAME], "parking_name"),
];

return $columns;
}
}

+ 14
- 0
app/Repositories/QRServiceParkingGroupRepositoryData.php Bestand weergeven

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

namespace App\Repositories;


/**
* @property string id
* @property string name
* @property ?string parking_management_code
* @property ?string parking_name
*/
class QRServiceParkingGroupRepositoryData extends BaseRepositoryData
{
}

+ 7
- 2
routes/api.php Bestand weergeven

@@ -36,12 +36,17 @@ Route::middleware('auth:sanctum')->group(function () {

// 運営会社ルート
Route::middleware(RouteHelper::role([UserRole::CUSTOMER]))->group(function () {
RouteHelper::post('/role/switch/shop', App\Http\Controllers\Web\Auth\SwitcShophController::class);
RouteHelper::get('/parking/list', App\Http\Controllers\Web\Parking\ParkingListController::class);
RouteHelper::post('/role/switch/shop', App\Http\Controllers\Web\Auth\SwitchShopController::class);
RouteHelper::post('/login-user/shop/register', App\Http\Controllers\Web\LoginUser\ShopRegisterController::class);
RouteHelper::post('/shop/register', App\Http\Controllers\Web\Shop\ShopRegisterController::class);
RouteHelper::get('/shop/list', App\Http\Controllers\Web\Shop\ShopListController::class);
RouteHelper::post('/shop/deposit/charge', App\Http\Controllers\Web\Shop\DepositChargeController::class);
RouteHelper::post('/shop/config', App\Http\Controllers\Web\Shop\ShopConfigController::class);
RouteHelper::post('/shop/config', App\Http\Controllers\Web\Shop\Config\ShopConfigController::class);
RouteHelper::get('/qr-service/parking-group/list', App\Http\Controllers\Web\QRService\Group\QRServiceGroupListController::class);
RouteHelper::post('/qr-service/parking-group/register', App\Http\Controllers\Web\QRService\Group\QRServiceGroupRegisterController::class);
RouteHelper::post('/qr-service/parking-group/parking/add', App\Http\Controllers\Web\QRService\Group\QRServiceGroupAddController::class);
RouteHelper::post('/qr-service/parking-group/parking/remove', App\Http\Controllers\Web\QRService\Group\QRServiceGroupRemoveController::class);
});

// 店舗ルート


Laden…
Annuleren
Opslaan