Parcourir la source

いろいろ対応

develop
sosuke.iwabuchi il y a 1 an
Parent
révision
b6680967d9
25 fichiers modifiés avec 244 ajouts et 39 suppressions
  1. +18
    -1
      app/Http/Controllers/Web/Auth/Me.php
  2. +0
    -2
      app/Http/Controllers/Web/Auth/MeController.php
  3. +11
    -3
      app/Http/Controllers/Web/Auth/SwitchCustomerController.php
  4. +1
    -1
      app/Http/Controllers/Web/Auth/SwitchEndController.php
  5. +1
    -1
      app/Http/Controllers/Web/Auth/SwitchEndParam.php
  6. +48
    -0
      app/Http/Controllers/Web/Auth/SwitchShopController.php
  7. +1
    -6
      app/Http/Controllers/Web/Shop/DepositChargeController.php
  8. +1
    -1
      app/Http/Controllers/Web/Shop/DepositChargeParam.php
  9. +49
    -0
      app/Http/Controllers/Web/Shop/ShopConfigController.php
  10. +28
    -0
      app/Http/Controllers/Web/Shop/ShopConfigParam.php
  11. +16
    -2
      app/Http/Controllers/Web/Shop/ShopListParam.php
  12. +1
    -0
      app/Http/Controllers/Web/Shop/ShopRegisterController.php
  13. +2
    -0
      app/Http/Controllers/Web/WebController.php
  14. +5
    -2
      app/Http/Middleware/RoleMiddleware.php
  15. +4
    -1
      app/Logics/QRService/ChargeLogic.php
  16. +1
    -1
      app/Logics/Shop/ShopLogic.php
  17. +13
    -0
      app/Models/Htpms/MstCustomer.php
  18. +7
    -6
      app/Providers/AppServiceProvider.php
  19. +1
    -0
      app/Repositories/LoginUserRepository.php
  20. +7
    -1
      app/Repositories/ShopRepository.php
  21. +14
    -2
      app/Sessions/SessionUser.php
  22. +2
    -2
      app/Util/RouteHelper.php
  23. +1
    -0
      lang/ja/validation.php
  24. +1
    -0
      resources/views/index.html
  25. +11
    -7
      routes/api.php

+ 18
- 1
app/Http/Controllers/Web/Auth/Me.php Voir le fichier

@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Web\Auth;

use App\Exceptions\AppCommonException;
use App\Sessions\SessionUser;
use Illuminate\Support\Facades\Auth;

trait Me
@@ -12,6 +13,22 @@ trait Me
if (!Auth::check()) {
throw new AppCommonException("Me失敗");
}
return Auth::user()->toArray();

$sessionUser = SessionUser::instance();


$ret = Auth::user()->toArray();

if ($sessionUser->isSwtiched()) {
$ret['switched_user_id'] = $sessionUser->user()->id;
$ret['switched_role'] = $sessionUser->user()->role;
$ret['switched_name'] = $sessionUser->user()->name;
} else {
$ret['switched_user_id'] = null;
$ret['switched_role'] = null;
$ret['switched_name'] = null;
}

return $ret;
}
}

+ 0
- 2
app/Http/Controllers/Web/Auth/MeController.php Voir le fichier

@@ -4,10 +4,8 @@ namespace App\Http\Controllers\Web\Auth;

use App\Exceptions\AppCommonException;
use App\Http\Controllers\Web\WebController;
use App\Kintone\Models\Customer;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class MeController extends WebController
{


app/Http/Controllers/Web/Auth/SwitchController.php → app/Http/Controllers/Web/Auth/SwitchCustomerController.php Voir le fichier

@@ -2,17 +2,18 @@

namespace App\Http\Controllers\Web\Auth;

use App\Codes\UserRole;
use App\Http\Controllers\Web\WebController;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class SwitchController extends WebController
class SwitchCustomerController extends WebController
{

public function name(): string
{
return "成り代わり";
return "成り代わり(顧客)";
}

public function description(): string
@@ -31,9 +32,16 @@ class SwitchController extends WebController
$param = $this->param;

$user = User::findOrFail($param->userId);
if ($user->role !== UserRole::CUSTOMER) throw new LogicException();

$this->sessionUser->switch($user);

return $this->successResponse();
$res = [
'user_id' => $user->id,
'name' => $user->name,
'role' => $user->role,
];

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

+ 1
- 1
app/Http/Controllers/Web/Auth/SwitchEndController.php Voir le fichier

@@ -20,7 +20,7 @@ class SwitchEndController extends WebController
}


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


+ 1
- 1
app/Http/Controllers/Web/Auth/SwitchEndParam.php Voir le fichier

@@ -4,6 +4,6 @@ namespace App\Http\Controllers\Web\Auth;

use App\Http\Controllers\Web\NoneParams;

class SwitchParam extends NoneParams
class SwitchEndParam extends NoneParams
{
}

+ 48
- 0
app/Http/Controllers/Web/Auth/SwitchShopController.php Voir le fichier

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

namespace App\Http\Controllers\Web\Auth;

use App\Codes\UserRole;
use App\Http\Controllers\Web\WebController;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use LogicException;

class SwitchShopController extends WebController
{

public function name(): string
{
return "成り代わり(店舗)";
}

public function description(): string
{
return "成り代わりを行う";
}


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

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

$user = User::findOrFail($param->userId);
if ($user->role !== UserRole::SHOP) throw new LogicException();

$this->sessionUser->switch($user);

$res = [
'user_id' => $user->id,
'name' => $user->name,
'role' => $user->role,
];

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

+ 1
- 6
app/Http/Controllers/Web/Shop/DepositChargeController.php Voir le fichier

@@ -36,12 +36,7 @@ class DepositChargeController extends WebController
throw new LogicException();
}

if ($user->shop_id === null) {
throw new LogicException();
}


$deposit = $this->logic->charge($user->shop_id, $param->amount);
$deposit = $this->logic->charge($param->shopId, $param->amount);

$res = [
"shop_id" => $deposit->shop_id,


+ 1
- 1
app/Http/Controllers/Web/Shop/DepositChargeParam.php Voir le fichier

@@ -15,7 +15,7 @@ class DepositChargeParam extends BaseParam
{
return [
Deposit::COL_NAME_SHOP_ID => $this->str(),
Deposit::COL_NAME_DEPOSIT => $this->numeric(),
"amount" => $this->numeric(),
];
}
}

+ 49
- 0
app/Http/Controllers/Web/Shop/ShopConfigController.php Voir le fichier

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

namespace App\Http\Controllers\Web\Shop;

use App\Http\Controllers\Web\WebController;
use App\Logics\QRService\ChargeLogic;
use App\Models\HtpmsCustomer\Mst\Shop;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class ShopConfigController extends WebController
{

public function name(): string
{
return "店舗設定";
}

public function description(): string
{
return "店舗設定を変更する";
}


public function __construct(protected ShopConfigParam $param, protected ChargeLogic $logic)
{
parent::__construct();
}

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

$shop = Shop::findOrFail($param->shopId);

$shop->qr_service_expire_min = $param->qrServiceExpireMin;
$shop->under_amount_when_create = $param->underAmountWhenCreate;
$shop->under_amount_when_auth = $param->underAmountWhenAuth;
$shop->under_amount_when_use = $param->underAmountWhenUse;

$shop->save();

$res = [
"shop_id" => $shop->id,
];

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

+ 28
- 0
app/Http/Controllers/Web/Shop/ShopConfigParam.php Voir le fichier

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

namespace App\Http\Controllers\Web\Shop;

use App\Http\Controllers\Web\BaseParam;
use App\Models\ColumnName;
use App\Models\HtpmsCustomer\Mst\Shop;

/**
* @property string shopId
* @property int qrServiceExpireMin
* @property int underAmountWhenCreate
* @property int underAmountWhenAuth
* @property int underAmountWhenUse
*/
class ShopConfigParam extends BaseParam
{
public function rules(): array
{
return [
ColumnName::SHOP_ID => $this->str(),
Shop::COL_NAME_QR_SERVICE_EXPIRE_MIN => $this->numeric(["between:10,10080"]),
Shop::COL_NAME_UNDER_AMOUNT_WHEN_CREATE => $this->numeric(["between:-100000,100000"]),
Shop::COL_NAME_UNDER_AMOUNT_WHEN_AUTH => $this->numeric(["between:-100000,100000"]),
Shop::COL_NAME_UNDER_AMOUNT_WHEN_USE => $this->numeric(["between:-100000,100000"]),
];
}
}

+ 16
- 2
app/Http/Controllers/Web/Shop/ShopListParam.php Voir le fichier

@@ -2,8 +2,22 @@

namespace App\Http\Controllers\Web\Shop;

use App\Http\Controllers\Web\NoneParams;
use App\Http\Controllers\Web\BaseParam;
use App\Http\Controllers\Web\SortableParam;
use App\Repositories\ShopRepository;

class ShopListParam extends NoneParams
/**
* @property string shopId
* @property string name
*/
class ShopListParam extends BaseParam implements SortableParam
{
public function rules(): array
{
return [
ShopRepository::CONDITION_SHOP_ID => $this->str(true),
ShopRepository::CONDITION_NAME => $this->str(true),
...$this->sortableRules(),
];
}
}

+ 1
- 0
app/Http/Controllers/Web/Shop/ShopRegisterController.php Voir le fichier

@@ -41,6 +41,7 @@ class ShopRegisterController extends WebController
$shop = new Shop();
$shop->fill($param->toArray());


$this->logic->create($user, $shop);

$res = [


+ 2
- 0
app/Http/Controllers/Web/WebController.php Voir le fichier

@@ -173,6 +173,8 @@ abstract class WebController extends BaseController
$this->validated = $validator->validated();
$this->getParam()->setData($this->validated);

$this->sessionUser->init();

$this->transaction->beginTransaction();
$ret = $this->run($request);



+ 5
- 2
app/Http/Middleware/RoleMiddleware.php Voir le fichier

@@ -13,6 +13,7 @@ class RoleMiddleware

public function __construct(private SessionUser $sessionUser)
{
$sessionUser->init();
}
/**
* Handle an incoming request.
@@ -23,13 +24,15 @@ class RoleMiddleware
{
$allowRoles = [];

foreach (explode(",", $rolesStr) as $roleSrt) {
foreach (explode("-", $rolesStr) as $roleSrt) {
$role = UserRole::from($roleSrt);
$allowRoles[] = $role;
}

$currentRole = $this->sessionUser->user()->role;

if (in_array($this->sessionUser->user()->role, $allowRoles, true) === false) {
if (in_array($currentRole, $allowRoles, true) === false) {
$path = $request->path();
abort(403);
}



+ 4
- 1
app/Logics/QRService/ChargeLogic.php Voir le fichier

@@ -20,7 +20,10 @@ class ChargeLogic

$deposit->deposit += $amount;

self::makeTransferHistory($shopId, $amount);
$history = self::makeTransferHistory($shopId, $amount);

$deposit->save();
$history->save();

return $deposit;
}


+ 1
- 1
app/Logics/Shop/ShopLogic.php Voir le fichier

@@ -24,7 +24,7 @@ class ShopLogic

// デポジット
$deposit = new Deposit();
$deposit->shop_id = $shop->idl;
$deposit->shop_id = $shop->id;
$deposit->save();

return $shop;


+ 13
- 0
app/Models/Htpms/MstCustomer.php Voir le fichier

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

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

class MstCustomer extends Model
{
@@ -19,4 +21,15 @@ class MstCustomer extends Model
self::COL_NAME_CUSTOMER_ID,
self::COL_NAME_CUSTOMER_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();
}
}

+ 7
- 6
app/Providers/AppServiceProvider.php Voir le fichier

@@ -14,13 +14,7 @@ class AppServiceProvider extends ServiceProvider
{
// 2019_12_14_000001_create_personal_access_tokens_tableテーブルを作らないようにする
Sanctum::ignoreMigrations();
}

/**
* Bootstrap any application services.
*/
public function boot(): void
{
// DB
$this->app->singleton(\App\Util\DBUtil::class);

@@ -32,4 +26,11 @@ class AppServiceProvider extends ServiceProvider
// セッション情報
$this->app->singleton(\App\Sessions\SessionUser::class);
}

/**
* Bootstrap any application services.
*/
public function boot(): void
{
}
}

+ 1
- 0
app/Repositories/LoginUserRepository.php Voir le fichier

@@ -5,6 +5,7 @@ namespace App\Repositories;
use App\Models\Htpms\MstCustomer;
use App\Models\User;
use App\Repositories\BaseRepository;
use Illuminate\Database\Query\JoinClause;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;



+ 7
- 1
app/Repositories/ShopRepository.php Voir le fichier

@@ -6,6 +6,7 @@ use App\Models\HtpmsCustomer\Deposit\Deposit;
use App\Models\HtpmsCustomer\Mst\Shop;
use App\Models\User;
use App\Repositories\BaseRepository;
use Illuminate\Database\Query\JoinClause;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;

@@ -68,9 +69,14 @@ class ShopRepository extends BaseRepository
$shop = static::TABLE_SHOP;
$deposit = static::TABLE_DEPOSIT;
$columns = [
$this->makeColumnNameForSelect([$shop, Shop::COL_NAME_NAME]),
$this->makeColumnNameForSelect([$shop, Shop::COL_NAME_MEMO]),
$this->makeColumnNameForSelect([$shop, Shop::COL_NAME_QR_SERVICE_EXPIRE_MIN]),
$this->makeColumnNameForSelect([$shop, Shop::COL_NAME_UNDER_AMOUNT_WHEN_AUTH]),
$this->makeColumnNameForSelect([$shop, Shop::COL_NAME_UNDER_AMOUNT_WHEN_CREATE]),
$this->makeColumnNameForSelect([$shop, Shop::COL_NAME_UNDER_AMOUNT_WHEN_USE]),
$this->makeColumnNameForSelect([$deposit, Deposit::COL_NAME_SHOP_ID]),
$this->makeColumnNameForSelect([$deposit, Deposit::COL_NAME_DEPOSIT]),
$this->makeColumnNameForSelect([$shop, User::COL_NAME_NAME]),
];

return $columns;


+ 14
- 2
app/Sessions/SessionUser.php Voir le fichier

@@ -7,8 +7,8 @@ use App\Exceptions\AppCommonException;
use App\Features\InstanceAble;
use App\Models\HtpmsCustomer\HtpmsCustomerConnectionSwitch;
use App\Models\User;
use Auth;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use LogicException;

@@ -20,11 +20,23 @@ class SessionUser

private User|null $user;
private bool $isSwtiched = false;
private bool $isInit = false;

public function __construct()
public function init()
{
if ($this->isInit === true) {
return;
}
$this->initSessionUser();
$this->isInit = true;
}
private function initSessionUser()
{
// 認証していない場合はスキップ
$this->user = Auth::user();

$user = Auth::user();
$ckeck = Auth::check();
if ($this->user === null) {
return;
}


+ 2
- 2
app/Util/RouteHelper.php Voir le fichier

@@ -55,7 +55,7 @@ class RouteHelper
foreach ($roles as $role) {
$rolesStrArr[] = $role->value;
}
return "role:" . implode(",", $rolesStrArr);
$ret = "role:" . implode("-", $rolesStrArr);
return $ret;
}
}

+ 1
- 0
lang/ja/validation.php Voir le fichier

@@ -187,6 +187,7 @@ return array_merge([
'before_or_equal' => '日付の前後関係が正しくありません',
'between' => [
'string' => ':min から :max 文字入力してください',
'numeric' => ':min から :max を入力してください',
],
'date' => '日付を入力してください',
'email' => 'Emailの形式が正しくありません',


+ 1
- 0
resources/views/index.html Voir le fichier

@@ -0,0 +1 @@
debug test

+ 11
- 7
routes/api.php Voir le fichier

@@ -16,37 +16,41 @@ use Illuminate\Support\Facades\Route;
*/

RouteHelper::post('/login', App\Http\Controllers\Web\Auth\LoginController::class);
RouteHelper::get('/me', App\Http\Controllers\Web\Auth\MeController::class);
RouteHelper::get('/logout', App\Http\Controllers\Web\Auth\LogoutController::class);
RouteHelper::get('/me', App\Http\Controllers\Web\Auth\MeController::class);

RouteHelper::get('/qr-service/get-ticket', App\Http\Controllers\Web\QRService\CreateTicketController::class);

Route::middleware('auth:sanctum')->group(function () {

// 共通ルート

// 管理者ルート
Route::middleware(RouteHelper::role([UserRole::ADMIN]))->group(function () {
RouteHelper::post('/role/switch/customer', App\Http\Controllers\Web\Auth\SwitchCustomerController::class);
RouteHelper::get('/customer/list', App\Http\Controllers\Web\Customer\CustomerListController::class);
RouteHelper::get('/login-user/customer/list', App\Http\Controllers\Web\LoginUser\CustomerListController::class);
RouteHelper::get('/login-user/customer/register', App\Http\Controllers\Web\LoginUser\CustomerRegisterController::class);
RouteHelper::get('/login-user/shop/register', App\Http\Controllers\Web\LoginUser\CustomerRegisterController::class);
RouteHelper::post('/login-user/customer/register', App\Http\Controllers\Web\LoginUser\CustomerRegisterController::class);
RouteHelper::post('/login-user/shop/register', App\Http\Controllers\Web\LoginUser\CustomerRegisterController::class);
});

// 運営会社ルート
Route::middleware(RouteHelper::role([UserRole::CUSTOMER]))->group(function () {
RouteHelper::post('/role/switch/shop', App\Http\Controllers\Web\Auth\SwitcShophController::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::post('/shop/list', App\Http\Controllers\Web\Shop\ShopListController::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);
});

// 店舗ルート
Route::middleware(RouteHelper::role([UserRole::SHOP]))->group(function () {
RouteHelper::get('/shop/deposit', App\Http\Controllers\Web\Shop\MyDepositController::class);
RouteHelper::post('/shop/deposit/charge', App\Http\Controllers\Web\Shop\DepositChargeController::class);
});

// 管理者運営会社ルート
// 管理者運営会社ルート
Route::middleware(RouteHelper::role([UserRole::ADMIN, UserRole::CUSTOMER]))->group(function () {
RouteHelper::post('/role/switch', App\Http\Controllers\Web\Auth\SwitchController::class);
RouteHelper::get('/role/switch/end', App\Http\Controllers\Web\Auth\SwitchEndController::class);
});
});

Chargement…
Annuler
Enregistrer