From 51996450986b83ba09c0e1bbe76f3eb3f7a69ecd Mon Sep 17 00:00:00 2001 From: "sosuke.iwabuchi" Date: Thu, 28 Mar 2024 16:36:06 +0900 Subject: [PATCH] =?UTF-8?q?QR=E5=8F=96=E5=BE=97=E5=91=A8=E8=BE=BA=E3=81=AE?= =?UTF-8?q?=E6=95=B4=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Web/LoginUser/ShopListController.php | 43 +++++++++++++++++ .../Web/LoginUser/ShopListParam.php | 23 +++++++++ .../GetAcquisitionTokenController.php | 48 +++++++++++++++++++ .../Acquisition/GetAcquisitionTokenParam.php | 9 ++++ .../RefreshAcquisitionTokenController.php | 42 ++++++++++++++++ .../RefreshGetAcquisitionTokenParam.php | 9 ++++ .../Web/QRService/CreateTicketController.php | 11 +++-- app/Logics/LoginUser/LoginUserLogic.php | 1 + app/Logics/Shop/ShopLogic.php | 5 +- app/Models/User.php | 1 + app/Repositories/LoginUserRepository.php | 5 +- ...014_10_12_000000_create_tbl3_mst_users.php | 5 ++ ...024_03_13_182509_create_tbl3_mst_shops.php | 1 + routes/api.php | 7 ++- 14 files changed, 202 insertions(+), 8 deletions(-) create mode 100644 app/Http/Controllers/Web/LoginUser/ShopListController.php create mode 100644 app/Http/Controllers/Web/LoginUser/ShopListParam.php create mode 100644 app/Http/Controllers/Web/QRService/Acquisition/GetAcquisitionTokenController.php create mode 100644 app/Http/Controllers/Web/QRService/Acquisition/GetAcquisitionTokenParam.php create mode 100644 app/Http/Controllers/Web/QRService/Acquisition/RefreshAcquisitionTokenController.php create mode 100644 app/Http/Controllers/Web/QRService/Acquisition/RefreshGetAcquisitionTokenParam.php diff --git a/app/Http/Controllers/Web/LoginUser/ShopListController.php b/app/Http/Controllers/Web/LoginUser/ShopListController.php new file mode 100644 index 0000000..b328953 --- /dev/null +++ b/app/Http/Controllers/Web/LoginUser/ShopListController.php @@ -0,0 +1,43 @@ +param; + + $list = $this->repository->get([ + ...$param->toArray(), + LoginUserRepository::CONDITION_ROLE => UserRole::SHOP->value, + ]); + $res = [ + "list" => $list, + ]; + return $this->successResponse($res); + } +} diff --git a/app/Http/Controllers/Web/LoginUser/ShopListParam.php b/app/Http/Controllers/Web/LoginUser/ShopListParam.php new file mode 100644 index 0000000..35bd9d1 --- /dev/null +++ b/app/Http/Controllers/Web/LoginUser/ShopListParam.php @@ -0,0 +1,23 @@ + $this->str(true), + LoginUserRepository::CONDITION_NAME => $this->str(true), + ...$this->sortableRules(), + ]; + } +} diff --git a/app/Http/Controllers/Web/QRService/Acquisition/GetAcquisitionTokenController.php b/app/Http/Controllers/Web/QRService/Acquisition/GetAcquisitionTokenController.php new file mode 100644 index 0000000..10dc006 --- /dev/null +++ b/app/Http/Controllers/Web/QRService/Acquisition/GetAcquisitionTokenController.php @@ -0,0 +1,48 @@ +sessionUser->shopId(); + + $token = AcquisitionTicketToken::whereShopId($shopId)->first(); + + if ($token === null) { + $token = new AcquisitionTicketToken(); + $token->shop_id = $shopId; + $token->token = Str::uuid()->toString(); + $token->save(); + } + + $res = [ + "token" => $token->token, + ]; + return $this->successResponse($res); + } +} diff --git a/app/Http/Controllers/Web/QRService/Acquisition/GetAcquisitionTokenParam.php b/app/Http/Controllers/Web/QRService/Acquisition/GetAcquisitionTokenParam.php new file mode 100644 index 0000000..8187d53 --- /dev/null +++ b/app/Http/Controllers/Web/QRService/Acquisition/GetAcquisitionTokenParam.php @@ -0,0 +1,9 @@ +sessionUser->shopId(); + + $token = AcquisitionTicketToken::whereShopId($shopId)->firstOrNew(); + + $token->shop_id = $shopId; + $token->token = Str::uuid()->toString(); + $token->save(); + + return $this->successResponse(); + } +} diff --git a/app/Http/Controllers/Web/QRService/Acquisition/RefreshGetAcquisitionTokenParam.php b/app/Http/Controllers/Web/QRService/Acquisition/RefreshGetAcquisitionTokenParam.php new file mode 100644 index 0000000..a5f11c3 --- /dev/null +++ b/app/Http/Controllers/Web/QRService/Acquisition/RefreshGetAcquisitionTokenParam.php @@ -0,0 +1,9 @@ +param; + $token = AcquisitionTicketToken::whereToken($param->token)->first(); + if ($token === null) { + return $this->failedResponse(); + } + if ($param->ticketId) { - $ticket = AcquisitionTicket::findOrFail($param->ticketId); - if (!$ticket->canUse()) { + $ticket = AcquisitionTicket::find($param->ticketId); + if ($ticket === null || !$ticket->canUse()) { $ticket = CreateLogic::create($param->token); } } else { diff --git a/app/Logics/LoginUser/LoginUserLogic.php b/app/Logics/LoginUser/LoginUserLogic.php index c4c8706..60ff212 100644 --- a/app/Logics/LoginUser/LoginUserLogic.php +++ b/app/Logics/LoginUser/LoginUserLogic.php @@ -30,6 +30,7 @@ class LoginUserLogic $this->user = $user; $user->role = UserRole::SHOP; $user->shop_id = $shop->id; + $user->shop_name = $shop->name; // チェック処理 $this->checkEmailForCreate(); diff --git a/app/Logics/Shop/ShopLogic.php b/app/Logics/Shop/ShopLogic.php index 32879e6..e99ccf9 100644 --- a/app/Logics/Shop/ShopLogic.php +++ b/app/Logics/Shop/ShopLogic.php @@ -2,6 +2,7 @@ namespace App\Logics\Shop; +use App\Exceptions\ParamException; use App\Models\HtpmsCustomer\Deposit\Deposit; use App\Models\HtpmsCustomer\Mst\Shop; use App\Models\User; @@ -18,7 +19,9 @@ class ShopLogic $this->shop = $shop; // チェック処理 - + if (Shop::whereName($shop->name)->exists()) { + ParamException::throw(Shop::COL_NAME_NAME, trans('validation.unique')); + } $shop->save(); diff --git a/app/Models/User.php b/app/Models/User.php index cd34764..f04633a 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -32,6 +32,7 @@ class User extends Authenticatable implements IModelFeature const COL_NAME_CUSTOMER_ID = 'customer_id'; const COL_NAME_CUSTOMER_CODE = 'customer_code'; const COL_NAME_SHOP_ID = 'shop_id'; + const COL_NAME_SHOP_NAME = 'shop_name'; const COL_NAME_CREATED_BY = ColumnName::CREATED_BY; const COL_NAME_UPDATED_BY = ColumnName::UPDATED_BY; diff --git a/app/Repositories/LoginUserRepository.php b/app/Repositories/LoginUserRepository.php index eca6754..6abb2d6 100644 --- a/app/Repositories/LoginUserRepository.php +++ b/app/Repositories/LoginUserRepository.php @@ -3,6 +3,7 @@ namespace App\Repositories; use App\Models\Htpms\MstCustomer; +use App\Models\HtpmsCustomer\Mst\Shop; use App\Models\User; use App\Repositories\BaseRepository; use Illuminate\Database\Query\JoinClause; @@ -20,7 +21,6 @@ class LoginUserRepository extends BaseRepository const TABLE_USER = "user"; const TABLE_CUSTOMER = "customer"; - /** * コレクションを取得する * @@ -39,7 +39,6 @@ class LoginUserRepository extends BaseRepository ); }); - // -----検索条件 // ID $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_USER, User::COL_NAME_ID])); @@ -82,6 +81,8 @@ class LoginUserRepository extends BaseRepository $this->makeColumnNameForSelect([$user, User::COL_NAME_NAME]), $this->makeColumnNameForSelect([$user, User::COL_NAME_EMAIL]), $this->makeColumnNameForSelect([$user, User::COL_NAME_CUSTOMER_CODE]), + $this->makeColumnNameForSelect([$user, User::COL_NAME_SHOP_ID]), + $this->makeColumnNameForSelect([$user, User::COL_NAME_SHOP_NAME]), $this->makeColumnNameForSelect([$customer, MstCustomer::COL_NAME_CUSTOMER_NAME]), ]; diff --git a/database/migrations/2014_10_12_000000_create_tbl3_mst_users.php b/database/migrations/2014_10_12_000000_create_tbl3_mst_users.php index 2ef7b9e..df6a90d 100644 --- a/database/migrations/2014_10_12_000000_create_tbl3_mst_users.php +++ b/database/migrations/2014_10_12_000000_create_tbl3_mst_users.php @@ -1,5 +1,6 @@ string('customer_code')->nullable()->comment("顧客コード"); $table->string('email')->comment("Email"); $table->text('password')->nullable()->comment("ログインパスワード"); + $table->string('shop_name')->nullable()->comment("店舗名"); + + $helper->index(1, ["customer_code"]); + $helper->index(2, [ColumnName::SHOP_ID]); }; MigrationHelper::createTable("tbl3_mst_users", $schema, "HTD ログインユーザー"); diff --git a/database/migrations/2024_03_13_182509_create_tbl3_mst_shops.php b/database/migrations/2024_03_13_182509_create_tbl3_mst_shops.php index 0db602d..299b187 100644 --- a/database/migrations/2024_03_13_182509_create_tbl3_mst_shops.php +++ b/database/migrations/2024_03_13_182509_create_tbl3_mst_shops.php @@ -28,6 +28,7 @@ return new class extends Migration MigrationHelper::createTable("tbl3_mst_shops", $schema, "HTD 店舗マスタ"); MigrationHelper::createTable("tbl3_mst_shop_histories", $schema, "HTD 店舗マスタ履歴"); + MigrationHelper::addUnique("tbl3_mst_shops", 1, ["name"]); } /** diff --git a/routes/api.php b/routes/api.php index b47bf9a..cab44fa 100644 --- a/routes/api.php +++ b/routes/api.php @@ -24,6 +24,7 @@ RouteHelper::get('/qr-service/get-ticket', App\Http\Controllers\Web\QRService\Cr Route::middleware('auth:sanctum')->group(function () { // 共通ルート + RouteHelper::get('/role/switch/end', App\Http\Controllers\Web\Auth\SwitchEndController::class); // 管理者ルート Route::middleware(RouteHelper::role([UserRole::ADMIN]))->group(function () { @@ -31,11 +32,12 @@ Route::middleware('auth:sanctum')->group(function () { 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::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::get('/login-user/shop/list', App\Http\Controllers\Web\LoginUser\ShopListController::class); + RouteHelper::post('/login-user/shop/register', App\Http\Controllers\Web\LoginUser\ShopRegisterController::class); RouteHelper::get('/parking/list', App\Http\Controllers\Web\Parking\ParkingListController::class); RouteHelper::get('/parking/discount-ticket/list', App\Http\Controllers\Web\Parking\DiscountTicketListController::class); RouteHelper::post('/role/switch/shop', App\Http\Controllers\Web\Auth\SwitchShopController::class); @@ -61,10 +63,11 @@ Route::middleware('auth:sanctum')->group(function () { // 店舗ルート Route::middleware(RouteHelper::role([UserRole::SHOP]))->group(function () { RouteHelper::get('/shop/deposit', App\Http\Controllers\Web\Shop\MyDepositController::class); + RouteHelper::get('/qr-service/acquisition/token', App\Http\Controllers\Web\QRService\Acquisition\GetAcquisitionTokenController::class); + RouteHelper::post('/qr-service/acquisition/token/refresh', App\Http\Controllers\Web\QRService\Acquisition\RefreshAcquisitionTokenController::class); }); // 管理者運営会社ルート Route::middleware(RouteHelper::role([UserRole::ADMIN, UserRole::CUSTOMER]))->group(function () { - RouteHelper::get('/role/switch/end', App\Http\Controllers\Web\Auth\SwitchEndController::class); }); });