| @@ -0,0 +1,43 @@ | |||
| <?php | |||
| namespace App\Http\Controllers\Web\LoginUser; | |||
| use App\Codes\UserRole; | |||
| use App\Http\Controllers\Web\WebController; | |||
| use App\Repositories\LoginUserRepository; | |||
| use Illuminate\Http\JsonResponse; | |||
| use Illuminate\Http\Request; | |||
| class ShopListController extends WebController | |||
| { | |||
| public function name(): string | |||
| { | |||
| return "店舗ログインユーザ一覧取得"; | |||
| } | |||
| public function description(): string | |||
| { | |||
| return "店舗ログインユーザ一覧を取得する"; | |||
| } | |||
| public function __construct(protected ShopListParam $param, private LoginUserRepository $repository) | |||
| { | |||
| parent::__construct(); | |||
| } | |||
| protected function run(Request $request): JsonResponse | |||
| { | |||
| $param = $this->param; | |||
| $list = $this->repository->get([ | |||
| ...$param->toArray(), | |||
| LoginUserRepository::CONDITION_ROLE => UserRole::SHOP->value, | |||
| ]); | |||
| $res = [ | |||
| "list" => $list, | |||
| ]; | |||
| return $this->successResponse($res); | |||
| } | |||
| } | |||
| @@ -0,0 +1,23 @@ | |||
| <?php | |||
| namespace App\Http\Controllers\Web\LoginUser; | |||
| use App\Http\Controllers\Web\BaseParam; | |||
| use App\Http\Controllers\Web\SortableParam; | |||
| use App\Repositories\LoginUserRepository; | |||
| /** | |||
| * @property ?string name | |||
| * @property ?string $email | |||
| */ | |||
| class ShopListParam extends BaseParam implements SortableParam | |||
| { | |||
| public function rules(): array | |||
| { | |||
| return [ | |||
| LoginUserRepository::CONDITION_EMAIL => $this->str(true), | |||
| LoginUserRepository::CONDITION_NAME => $this->str(true), | |||
| ...$this->sortableRules(), | |||
| ]; | |||
| } | |||
| } | |||
| @@ -0,0 +1,48 @@ | |||
| <?php | |||
| namespace App\Http\Controllers\Web\QRService\Acquisition; | |||
| use App\Http\Controllers\Web\WebController; | |||
| use App\Models\HtpmsCustomer\QRService\AcquisitionTicketToken; | |||
| use Illuminate\Http\JsonResponse; | |||
| use Illuminate\Http\Request; | |||
| use Str; | |||
| class GetAcquisitionTokenController extends WebController | |||
| { | |||
| public function name(): string | |||
| { | |||
| return "サービス券取得用トークン取得"; | |||
| } | |||
| public function description(): string | |||
| { | |||
| return "サービス券取得用トークンを取得する"; | |||
| } | |||
| public function __construct(protected GetAcquisitionTokenParam $param) | |||
| { | |||
| parent::__construct(); | |||
| } | |||
| protected function run(Request $request): JsonResponse | |||
| { | |||
| $shopId = $this->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); | |||
| } | |||
| } | |||
| @@ -0,0 +1,9 @@ | |||
| <?php | |||
| namespace App\Http\Controllers\Web\QRService\Acquisition; | |||
| use App\Http\Controllers\Web\NoneParams; | |||
| class GetAcquisitionTokenParam extends NoneParams | |||
| { | |||
| } | |||
| @@ -0,0 +1,42 @@ | |||
| <?php | |||
| namespace App\Http\Controllers\Web\QRService\Acquisition; | |||
| use App\Http\Controllers\Web\WebController; | |||
| use App\Models\HtpmsCustomer\QRService\AcquisitionTicketToken; | |||
| use Illuminate\Http\JsonResponse; | |||
| use Illuminate\Http\Request; | |||
| use Str; | |||
| class RefreshAcquisitionTokenController extends WebController | |||
| { | |||
| public function name(): string | |||
| { | |||
| return "サービス券取得用トークンリフレッシュ"; | |||
| } | |||
| public function description(): string | |||
| { | |||
| return "サービス券取得用トークンをリフレッシュする"; | |||
| } | |||
| public function __construct(protected RefreshGetAcquisitionTokenParam $param) | |||
| { | |||
| parent::__construct(); | |||
| } | |||
| protected function run(Request $request): JsonResponse | |||
| { | |||
| $shopId = $this->sessionUser->shopId(); | |||
| $token = AcquisitionTicketToken::whereShopId($shopId)->firstOrNew(); | |||
| $token->shop_id = $shopId; | |||
| $token->token = Str::uuid()->toString(); | |||
| $token->save(); | |||
| return $this->successResponse(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,9 @@ | |||
| <?php | |||
| namespace App\Http\Controllers\Web\QRService\Acquisition; | |||
| use App\Http\Controllers\Web\NoneParams; | |||
| class RefreshGetAcquisitionTokenParam extends NoneParams | |||
| { | |||
| } | |||
| @@ -6,9 +6,9 @@ use App\Http\Controllers\Web\WebController; | |||
| use App\Logics\QRService\CreateLogic; | |||
| use App\Logics\QRService\QRCryptoLogic; | |||
| use App\Models\HtpmsCustomer\QRService\AcquisitionTicket; | |||
| use App\Models\HtpmsCustomer\QRService\AcquisitionTicketToken; | |||
| use Illuminate\Http\JsonResponse; | |||
| use Illuminate\Http\Request; | |||
| use Illuminate\Support\Facades\Auth; | |||
| class CreateTicketController extends WebController | |||
| { | |||
| @@ -33,9 +33,14 @@ class CreateTicketController extends WebController | |||
| { | |||
| $param = $this->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 { | |||
| @@ -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(); | |||
| @@ -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(); | |||
| @@ -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; | |||
| @@ -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]), | |||
| ]; | |||
| @@ -1,5 +1,6 @@ | |||
| <?php | |||
| use App\Models\ColumnName; | |||
| use App\Util\MigrationHelper; | |||
| use Illuminate\Database\Migrations\Migration; | |||
| use Illuminate\Database\Schema\Blueprint; | |||
| @@ -23,6 +24,10 @@ return new class extends Migration | |||
| $table->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 ログインユーザー"); | |||
| @@ -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"]); | |||
| } | |||
| /** | |||
| @@ -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); | |||
| }); | |||
| }); | |||