| @@ -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\CreateLogic; | ||||
| use App\Logics\QRService\QRCryptoLogic; | use App\Logics\QRService\QRCryptoLogic; | ||||
| use App\Models\HtpmsCustomer\QRService\AcquisitionTicket; | use App\Models\HtpmsCustomer\QRService\AcquisitionTicket; | ||||
| use App\Models\HtpmsCustomer\QRService\AcquisitionTicketToken; | |||||
| use Illuminate\Http\JsonResponse; | use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Http\Request; | use Illuminate\Http\Request; | ||||
| use Illuminate\Support\Facades\Auth; | |||||
| class CreateTicketController extends WebController | class CreateTicketController extends WebController | ||||
| { | { | ||||
| @@ -33,9 +33,14 @@ class CreateTicketController extends WebController | |||||
| { | { | ||||
| $param = $this->param; | $param = $this->param; | ||||
| $token = AcquisitionTicketToken::whereToken($param->token)->first(); | |||||
| if ($token === null) { | |||||
| return $this->failedResponse(); | |||||
| } | |||||
| if ($param->ticketId) { | 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); | $ticket = CreateLogic::create($param->token); | ||||
| } | } | ||||
| } else { | } else { | ||||
| @@ -30,6 +30,7 @@ class LoginUserLogic | |||||
| $this->user = $user; | $this->user = $user; | ||||
| $user->role = UserRole::SHOP; | $user->role = UserRole::SHOP; | ||||
| $user->shop_id = $shop->id; | $user->shop_id = $shop->id; | ||||
| $user->shop_name = $shop->name; | |||||
| // チェック処理 | // チェック処理 | ||||
| $this->checkEmailForCreate(); | $this->checkEmailForCreate(); | ||||
| @@ -2,6 +2,7 @@ | |||||
| namespace App\Logics\Shop; | namespace App\Logics\Shop; | ||||
| use App\Exceptions\ParamException; | |||||
| use App\Models\HtpmsCustomer\Deposit\Deposit; | use App\Models\HtpmsCustomer\Deposit\Deposit; | ||||
| use App\Models\HtpmsCustomer\Mst\Shop; | use App\Models\HtpmsCustomer\Mst\Shop; | ||||
| use App\Models\User; | use App\Models\User; | ||||
| @@ -18,7 +19,9 @@ class ShopLogic | |||||
| $this->shop = $shop; | $this->shop = $shop; | ||||
| // チェック処理 | // チェック処理 | ||||
| if (Shop::whereName($shop->name)->exists()) { | |||||
| ParamException::throw(Shop::COL_NAME_NAME, trans('validation.unique')); | |||||
| } | |||||
| $shop->save(); | $shop->save(); | ||||
| @@ -32,6 +32,7 @@ class User extends Authenticatable implements IModelFeature | |||||
| const COL_NAME_CUSTOMER_ID = 'customer_id'; | const COL_NAME_CUSTOMER_ID = 'customer_id'; | ||||
| const COL_NAME_CUSTOMER_CODE = 'customer_code'; | const COL_NAME_CUSTOMER_CODE = 'customer_code'; | ||||
| const COL_NAME_SHOP_ID = 'shop_id'; | 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_CREATED_BY = ColumnName::CREATED_BY; | ||||
| const COL_NAME_UPDATED_BY = ColumnName::UPDATED_BY; | const COL_NAME_UPDATED_BY = ColumnName::UPDATED_BY; | ||||
| @@ -3,6 +3,7 @@ | |||||
| namespace App\Repositories; | namespace App\Repositories; | ||||
| use App\Models\Htpms\MstCustomer; | use App\Models\Htpms\MstCustomer; | ||||
| use App\Models\HtpmsCustomer\Mst\Shop; | |||||
| use App\Models\User; | use App\Models\User; | ||||
| use App\Repositories\BaseRepository; | use App\Repositories\BaseRepository; | ||||
| use Illuminate\Database\Query\JoinClause; | use Illuminate\Database\Query\JoinClause; | ||||
| @@ -20,7 +21,6 @@ class LoginUserRepository extends BaseRepository | |||||
| const TABLE_USER = "user"; | const TABLE_USER = "user"; | ||||
| const TABLE_CUSTOMER = "customer"; | const TABLE_CUSTOMER = "customer"; | ||||
| /** | /** | ||||
| * コレクションを取得する | * コレクションを取得する | ||||
| * | * | ||||
| @@ -39,7 +39,6 @@ class LoginUserRepository extends BaseRepository | |||||
| ); | ); | ||||
| }); | }); | ||||
| // -----検索条件 | // -----検索条件 | ||||
| // ID | // ID | ||||
| $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_USER, User::COL_NAME_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_NAME]), | ||||
| $this->makeColumnNameForSelect([$user, User::COL_NAME_EMAIL]), | $this->makeColumnNameForSelect([$user, User::COL_NAME_EMAIL]), | ||||
| $this->makeColumnNameForSelect([$user, User::COL_NAME_CUSTOMER_CODE]), | $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]), | $this->makeColumnNameForSelect([$customer, MstCustomer::COL_NAME_CUSTOMER_NAME]), | ||||
| ]; | ]; | ||||
| @@ -1,5 +1,6 @@ | |||||
| <?php | <?php | ||||
| use App\Models\ColumnName; | |||||
| use App\Util\MigrationHelper; | use App\Util\MigrationHelper; | ||||
| use Illuminate\Database\Migrations\Migration; | use Illuminate\Database\Migrations\Migration; | ||||
| use Illuminate\Database\Schema\Blueprint; | use Illuminate\Database\Schema\Blueprint; | ||||
| @@ -23,6 +24,10 @@ return new class extends Migration | |||||
| $table->string('customer_code')->nullable()->comment("顧客コード"); | $table->string('customer_code')->nullable()->comment("顧客コード"); | ||||
| $table->string('email')->comment("Email"); | $table->string('email')->comment("Email"); | ||||
| $table->text('password')->nullable()->comment("ログインパスワード"); | $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 ログインユーザー"); | 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_shops", $schema, "HTD 店舗マスタ"); | ||||
| MigrationHelper::createTable("tbl3_mst_shop_histories", $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 () { | 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 () { | 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('/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/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/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 () { | 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/list', App\Http\Controllers\Web\Parking\ParkingListController::class); | ||||
| RouteHelper::get('/parking/discount-ticket/list', App\Http\Controllers\Web\Parking\DiscountTicketListController::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); | 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 () { | Route::middleware(RouteHelper::role([UserRole::SHOP]))->group(function () { | ||||
| RouteHelper::get('/shop/deposit', App\Http\Controllers\Web\Shop\MyDepositController::class); | 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 () { | Route::middleware(RouteHelper::role([UserRole::ADMIN, UserRole::CUSTOMER]))->group(function () { | ||||
| RouteHelper::get('/role/switch/end', App\Http\Controllers\Web\Auth\SwitchEndController::class); | |||||
| }); | }); | ||||
| }); | }); | ||||