From f37159e1fcf8d3ea80ae45abee0722d8d3f0db31 Mon Sep 17 00:00:00 2001 From: zyh Date: Sun, 24 Aug 2025 17:42:47 +0800 Subject: [PATCH] Refactor user account management by replacing User entity with UserAccount, updating UserController and UserService for CRUD operations, and modifying MyBatis mappers accordingly. --- .cursor/rules/zh.mdc | 5 + docs/game.sql | 262 ++++++++++-------- .../server/controller/UserController.java | 83 ++++-- .../server/mapper/UserMapper.java | 18 -- .../com/gameplatform/server/model/User.java | 51 ---- .../server/security/JwtService.java | 2 +- .../server/security/SecurityConfig.java | 2 +- .../server/service/UserService.java | 92 ++++-- src/main/resources/mapper/UserMapper.xml | 46 --- .../GamePlatformServerApplication.class | Bin 887 -> 887 bytes .../server/config/CorsConfig.class | Bin 1614 -> 1614 bytes .../server/controller/UserController.class | Bin 3218 -> 4202 bytes .../controller/admin/AccountController.class | Bin 0 -> 5101 bytes .../controller/auth/AuthController$1.class | Bin 1439 -> 1361 bytes .../controller/auth/AuthController.class | Bin 4903 -> 4895 bytes .../exception/GlobalExceptionHandler$1.class | Bin 1312 -> 1225 bytes .../exception/GlobalExceptionHandler$2.class | Bin 1439 -> 1305 bytes .../exception/GlobalExceptionHandler.class | Bin 7530 -> 7488 bytes .../server/mapper/UserMapper.class | Bin 613 -> 0 bytes .../mapper/account/UserAccountMapper.class | Bin 590 -> 1655 bytes .../com/gameplatform/server/model/User.class | Bin 1528 -> 0 bytes .../dto/account/AccountCreateRequest.class | Bin 0 -> 2500 bytes .../model/dto/account/AccountResponse.class | Bin 0 -> 2395 bytes .../dto/account/AccountUpdateRequest.class | Bin 0 -> 1197 bytes .../dto/account/ResetPasswordRequest.class | Bin 0 -> 1224 bytes .../server/model/dto/auth/LoginRequest.class | Bin 984 -> 984 bytes .../server/model/dto/auth/LoginResponse.class | Bin 1745 -> 1749 bytes .../server/model/dto/common/PageResult.class | Bin 0 -> 1893 bytes .../model/entity/account/UserAccount.class | Bin 2602 -> 2602 bytes .../server/security/JwtService.class | Bin 5134 -> 5127 bytes .../server/security/SecurityConfig.class | Bin 4495 -> 4450 bytes .../server/service/UserService.class | Bin 4414 -> 7512 bytes .../service/account/AccountService.class | Bin 0 -> 11430 bytes .../server/service/auth/AuthService.class | Bin 9150 -> 9144 bytes target/classes/mapper/UserMapper.xml | 39 --- .../mapper/account/UserAccountMapper.xml | 57 ++++ 36 files changed, 327 insertions(+), 330 deletions(-) create mode 100644 .cursor/rules/zh.mdc delete mode 100644 src/main/java/com/gameplatform/server/mapper/UserMapper.java delete mode 100644 src/main/java/com/gameplatform/server/model/User.java delete mode 100644 src/main/resources/mapper/UserMapper.xml create mode 100644 target/classes/com/gameplatform/server/controller/admin/AccountController.class delete mode 100644 target/classes/com/gameplatform/server/mapper/UserMapper.class delete mode 100644 target/classes/com/gameplatform/server/model/User.class create mode 100644 target/classes/com/gameplatform/server/model/dto/account/AccountCreateRequest.class create mode 100644 target/classes/com/gameplatform/server/model/dto/account/AccountResponse.class create mode 100644 target/classes/com/gameplatform/server/model/dto/account/AccountUpdateRequest.class create mode 100644 target/classes/com/gameplatform/server/model/dto/account/ResetPasswordRequest.class create mode 100644 target/classes/com/gameplatform/server/model/dto/common/PageResult.class create mode 100644 target/classes/com/gameplatform/server/service/account/AccountService.class delete mode 100644 target/classes/mapper/UserMapper.xml diff --git a/.cursor/rules/zh.mdc b/.cursor/rules/zh.mdc new file mode 100644 index 0000000..dc88b4a --- /dev/null +++ b/.cursor/rules/zh.mdc @@ -0,0 +1,5 @@ +--- +description: +globs: 中文回答我 +alwaysApply: true +--- diff --git a/docs/game.sql b/docs/game.sql index 3468c77..44ace88 100644 --- a/docs/game.sql +++ b/docs/game.sql @@ -1,133 +1,149 @@ --- ============================================================================= --- 上号系统 - 数据库结构 (MySQL 8+) --- ============================================================================= +/* + Navicat Premium Dump SQL --- 可选:创建并使用独立库 -CREATE DATABASE IF NOT EXISTS login_task_db - DEFAULT CHARACTER SET utf8mb4 - DEFAULT COLLATE utf8mb4_0900_ai_ci; -USE login_task_db; + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 80043 (8.0.43) + Source Host : localhost:3306 + Source Schema : login_task_db + + Target Server Type : MySQL + Target Server Version : 80043 (8.0.43) + File Encoding : 65001 + + Date: 24/08/2025 17:24:44 +*/ SET NAMES utf8mb4; -SET sql_mode = 'STRICT_ALL_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO'; +SET FOREIGN_KEY_CHECKS = 0; --- ----------------------------------------------------------------------------- --- 1) 统一账户表(管理员/代理商共用) --- 用 user_type 区分:ADMIN | AGENT --- ----------------------------------------------------------------------------- -CREATE TABLE IF NOT EXISTS user_account ( - id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, - user_type ENUM('ADMIN','AGENT') NOT NULL, - username VARCHAR(64) NOT NULL UNIQUE, -- 登录名(两类共用) - display_name VARCHAR(100) NULL, -- 展示名(AGENT 可用) - password_hash VARCHAR(120) NOT NULL, -- 建议存储 BCrypt(或临时 PLAIN: 便于初始化) - role ENUM('SUPER','ADMIN') NULL, -- 仅 ADMIN 使用 - status ENUM('ENABLED','DISABLED') NOT NULL DEFAULT 'ENABLED', - points_balance BIGINT UNSIGNED NOT NULL DEFAULT 0, -- 仅 AGENT 使用 - created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), - CONSTRAINT chk_points_nonneg CHECK (points_balance >= 0) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +-- ---------------------------- +-- Table structure for agent_points_tx +-- ---------------------------- +DROP TABLE IF EXISTS `agent_points_tx`; +CREATE TABLE `agent_points_tx` ( + `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, + `account_id` bigint UNSIGNED NOT NULL, + `type` enum('ADD','DEDUCT') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `before_points` bigint UNSIGNED NOT NULL, + `delta_points` bigint NOT NULL, + `after_points` bigint UNSIGNED NOT NULL, + `reason` enum('create_links','manual','refund_no_rollback','other') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'other', + `ref_id` bigint UNSIGNED NULL DEFAULT NULL, + `operator_id` bigint UNSIGNED NULL DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_apx_account_time`(`account_id` ASC, `created_at` ASC) USING BTREE, + INDEX `fk_apx_operator`(`operator_id` ASC) USING BTREE, + CONSTRAINT `fk_apx_account` FOREIGN KEY (`account_id`) REFERENCES `user_account` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `fk_apx_operator` FOREIGN KEY (`operator_id`) REFERENCES `user_account` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; --- 默认管理员账号(密码:admin7uqweh12)。 --- 生产环境请尽快替换为 BCrypt 哈希;此处为 PLAIN 方便首次初始化。 -INSERT INTO user_account(user_type, username, display_name, password_hash, role, status, points_balance) -VALUES ('ADMIN', 'admin', 'Super Admin', 'PLAIN:admin7uqweh12', 'SUPER', 'ENABLED', 0) -ON DUPLICATE KEY UPDATE username = username; +-- ---------------------------- +-- Table structure for announcement +-- ---------------------------- +DROP TABLE IF EXISTS `announcement`; +CREATE TABLE `announcement` ( + `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, + `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `enabled` tinyint(1) NOT NULL DEFAULT 1, + `jump_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; --- ----------------------------------------------------------------------------- --- 2) 代理商点数流水 --- ----------------------------------------------------------------------------- -CREATE TABLE IF NOT EXISTS agent_points_tx ( - id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, - account_id BIGINT UNSIGNED NOT NULL, -- 指向 user_account(AGENT) - type ENUM('ADD','DEDUCT') NOT NULL, - before_points BIGINT UNSIGNED NOT NULL, - delta_points BIGINT SIGNED NOT NULL, -- 可为正/负;与 type 对应 - after_points BIGINT UNSIGNED NOT NULL, - reason ENUM('create_links','manual','refund_no_rollback','other') NOT NULL DEFAULT 'other', - ref_id BIGINT UNSIGNED NULL, -- 可关联到 link_batch.id - operator_id BIGINT UNSIGNED NULL, -- 操作者(管理员,指向 user_account) - created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - INDEX idx_apx_account_time (account_id, created_at), - CONSTRAINT fk_apx_account FOREIGN KEY (account_id) REFERENCES user_account(id), - CONSTRAINT fk_apx_operator FOREIGN KEY (operator_id) REFERENCES user_account(id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +-- ---------------------------- +-- Table structure for link_batch +-- ---------------------------- +DROP TABLE IF EXISTS `link_batch`; +CREATE TABLE `link_batch` ( + `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, + `agent_id` bigint UNSIGNED NOT NULL, + `quantity` int UNSIGNED NOT NULL, + `times` int UNSIGNED NOT NULL, + `batch_size` int UNSIGNED NOT NULL, + `deduct_points` bigint UNSIGNED NOT NULL, + `operator_id` bigint UNSIGNED NULL DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_lb_agent_time`(`agent_id` ASC, `created_at` ASC) USING BTREE, + INDEX `fk_lb_operator`(`operator_id` ASC) USING BTREE, + CONSTRAINT `fk_lb_agent` FOREIGN KEY (`agent_id`) REFERENCES `user_account` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `fk_lb_operator` FOREIGN KEY (`operator_id`) REFERENCES `user_account` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `chk_lb_batch_pos` CHECK (`batch_size` > 0), + CONSTRAINT `chk_lb_quantity_pos` CHECK (`quantity` > 0), + CONSTRAINT `chk_lb_times_pos` CHECK (`times` > 0) +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; --- ----------------------------------------------------------------------------- --- 3) 链接批次(一次生成 N 个链接,按统一设置扣费) --- ----------------------------------------------------------------------------- -CREATE TABLE IF NOT EXISTS link_batch ( - id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, - agent_id BIGINT UNSIGNED NOT NULL, -- 指向 user_account(AGENT) - quantity INT UNSIGNED NOT NULL, -- 每次奖励数量(如 50) - times INT UNSIGNED NOT NULL, -- 重复执行次数(如 20) - batch_size INT UNSIGNED NOT NULL, -- 本批生成链接数量(如 10) - deduct_points BIGINT UNSIGNED NOT NULL, -- 扣点=quantity*times*batch_size - operator_id BIGINT UNSIGNED NULL, -- 操作者(管理员) - created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - INDEX idx_lb_agent_time (agent_id, created_at), - CONSTRAINT chk_lb_quantity_pos CHECK (quantity > 0), - CONSTRAINT chk_lb_times_pos CHECK (times > 0), - CONSTRAINT chk_lb_batch_pos CHECK (batch_size > 0), - CONSTRAINT fk_lb_agent FOREIGN KEY (agent_id) REFERENCES user_account(id), - CONSTRAINT fk_lb_operator FOREIGN KEY (operator_id) REFERENCES user_account(id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +-- ---------------------------- +-- Table structure for link_task +-- ---------------------------- +DROP TABLE IF EXISTS `link_task`; +CREATE TABLE `link_task` ( + `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, + `batch_id` bigint UNSIGNED NOT NULL, + `agent_id` bigint UNSIGNED NOT NULL, + `code_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `token_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `expire_at` datetime(3) NOT NULL, + `status` enum('NEW','USING','LOGGED_IN','REFUNDED','EXPIRED') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NEW', + `region` enum('Q','V') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `machine_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `login_at` datetime(3) NULL DEFAULT NULL, + `refund_at` datetime(3) NULL DEFAULT NULL, + `revoked_at` datetime(3) NULL DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_code_no`(`code_no` ASC) USING BTREE, + UNIQUE INDEX `uk_token_hash`(`token_hash` ASC) USING BTREE, + INDEX `idx_agent_status`(`agent_id` ASC, `status` ASC) USING BTREE, + INDEX `idx_expire_at`(`expire_at` ASC) USING BTREE, + INDEX `idx_created_at`(`created_at` ASC) USING BTREE, + INDEX `fk_lt_batch`(`batch_id` ASC) USING BTREE, + CONSTRAINT `fk_lt_agent` FOREIGN KEY (`agent_id`) REFERENCES `user_account` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `fk_lt_batch` FOREIGN KEY (`batch_id`) REFERENCES `link_batch` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; --- ----------------------------------------------------------------------------- --- 4) 单链接任务(用户访问的“加密链接”对应的实体) --- ----------------------------------------------------------------------------- -CREATE TABLE IF NOT EXISTS link_task ( - id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, - batch_id BIGINT UNSIGNED NOT NULL, - agent_id BIGINT UNSIGNED NOT NULL, -- 指向 user_account(AGENT) - code_no VARCHAR(32) NOT NULL, -- 后端生成的全局唯一编号 - token_hash CHAR(64) NOT NULL, -- 加密token的SHA-256(用于失效/撤销) - expire_at DATETIME(3) NOT NULL, -- 链接有效期(默认 24h) - status ENUM('NEW','USING','LOGGED_IN','REFUNDED','EXPIRED') NOT NULL DEFAULT 'NEW', - region ENUM('Q','V') NULL, -- 选区;未选择前为 NULL - machine_id VARCHAR(64) NULL, -- 绑定的脚本端机器编号 - login_at DATETIME(3) NULL, - refund_at DATETIME(3) NULL, - revoked_at DATETIME(3) NULL, -- 主动撤销(如需要立即失效) - created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), - UNIQUE KEY uk_code_no (code_no), - UNIQUE KEY uk_token_hash (token_hash), - INDEX idx_agent_status (agent_id, status), - INDEX idx_expire_at (expire_at), - INDEX idx_created_at (created_at), - CONSTRAINT fk_lt_batch FOREIGN KEY (batch_id) REFERENCES link_batch(id), - CONSTRAINT fk_lt_agent FOREIGN KEY (agent_id) REFERENCES user_account(id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +-- ---------------------------- +-- Table structure for operation_log +-- ---------------------------- +DROP TABLE IF EXISTS `operation_log`; +CREATE TABLE `operation_log` ( + `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, + `actor_type` enum('admin','agent','system','user') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `actor_id` bigint UNSIGNED NULL DEFAULT NULL, + `code_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `op` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `detail` json NULL, + `client_ip` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `user_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_log_code_time`(`code_no` ASC, `created_at` ASC) USING BTREE, + INDEX `idx_log_time`(`created_at` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; --- ----------------------------------------------------------------------------- --- 5) 操作日志(审计/可观测性) --- ----------------------------------------------------------------------------- -CREATE TABLE IF NOT EXISTS operation_log ( - id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, - actor_type ENUM('admin','agent','system','user') NOT NULL, - actor_id BIGINT UNSIGNED NULL, -- 不强制外键,避免多态复杂度 - code_no VARCHAR(32) NULL, - op VARCHAR(64) NOT NULL, -- 如:create_links / refund / select_region / create_qr / poll_login / release_machine - detail JSON NULL, -- 具体参数/返回(注意脱敏) - client_ip VARCHAR(45) NULL, - user_agent VARCHAR(255) NULL, - created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - INDEX idx_log_code_time (code_no, created_at), - INDEX idx_log_time (created_at) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- ----------------------------------------------------------------------------- --- 6) 公告 --- ----------------------------------------------------------------------------- -CREATE TABLE IF NOT EXISTS announcement ( - id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, - title VARCHAR(100) NOT NULL, - content TEXT NOT NULL, -- 富文本 - enabled TINYINT(1) NOT NULL DEFAULT 1, - jump_url VARCHAR(255) NULL, - created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +-- ---------------------------- +-- Table structure for user_account +-- ---------------------------- +DROP TABLE IF EXISTS `user_account`; +CREATE TABLE `user_account` ( + `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, + `user_type` enum('ADMIN','AGENT') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `display_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `password_hash` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `role` enum('SUPER','ADMIN') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `status` enum('ENABLED','DISABLED') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ENABLED', + `points_balance` bigint UNSIGNED NOT NULL DEFAULT 0, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `username`(`username` ASC) USING BTREE, + CONSTRAINT `chk_points_nonneg` CHECK (`points_balance` >= 0) +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; +SET FOREIGN_KEY_CHECKS = 1; diff --git a/src/main/java/com/gameplatform/server/controller/UserController.java b/src/main/java/com/gameplatform/server/controller/UserController.java index 5230b5d..b34100f 100644 --- a/src/main/java/com/gameplatform/server/controller/UserController.java +++ b/src/main/java/com/gameplatform/server/controller/UserController.java @@ -1,48 +1,83 @@ package com.gameplatform.server.controller; -import com.gameplatform.server.model.User; -import com.gameplatform.server.service.UserService; +import com.gameplatform.server.model.dto.account.AccountCreateRequest; +import com.gameplatform.server.model.dto.account.AccountResponse; +import com.gameplatform.server.model.dto.account.AccountUpdateRequest; +import com.gameplatform.server.model.dto.common.PageResult; +import com.gameplatform.server.service.account.AccountService; import jakarta.validation.Valid; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +/** + * 用户接口控制器 - 基于UserAccount实体 + * 提供用户账户的基本CRUD操作 + */ @RestController @RequestMapping("/api/users") -public class UserController { - private final UserService userService; +public class UserController { + private final AccountService accountService; - public UserController(UserService userService) { - this.userService = userService; + public UserController(AccountService accountService) { + this.accountService = accountService; } + /** + * 根据ID获取用户账户信息 + */ @GetMapping("/{id}") - public Mono getById(@PathVariable Long id) { - return userService.getById(id); + public Mono getById(@PathVariable Long id) { + return accountService.get(id); } + /** + * 分页查询用户列表 + */ @GetMapping - public Flux listAll() { - return userService.listAll(); + public Mono> list( + @RequestParam(value = "userType", required = false) String userType, + @RequestParam(value = "status", required = false) String status, + @RequestParam(value = "role", required = false) String role, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "size", defaultValue = "20") Integer size + ) { + return accountService.list(userType, status, role, keyword, page, size); } + /** + * 创建新用户账户 + */ @PostMapping @ResponseStatus(HttpStatus.CREATED) - public Mono create(@Valid @RequestBody User user) { - return userService.create(user); - } - - @DeleteMapping("/{id}") - @ResponseStatus(HttpStatus.NO_CONTENT) - public Mono delete(@PathVariable Long id) { - return userService.deleteById(id) - .filter(Boolean::booleanValue) - .then(); + public Mono create(@Valid @RequestBody AccountCreateRequest request) { + return accountService.create(request); } + /** + * 更新用户账户信息 + */ @PutMapping("/{id}") - public Mono update(@PathVariable Long id, @Valid @RequestBody User user) { - return userService.update(id, user); + public Mono update(@PathVariable Long id, @Valid @RequestBody AccountUpdateRequest request) { + return accountService.update(id, request); } -} + + /** + * 启用用户账户 + */ + @PostMapping("/{id}/enable") + @ResponseStatus(HttpStatus.NO_CONTENT) + public Mono enable(@PathVariable Long id) { + return accountService.setStatus(id, "ENABLED").then(); + } + + /** + * 禁用用户账户 + */ + @PostMapping("/{id}/disable") + @ResponseStatus(HttpStatus.NO_CONTENT) + public Mono disable(@PathVariable Long id) { + return accountService.setStatus(id, "DISABLED").then(); + } +} \ No newline at end of file diff --git a/src/main/java/com/gameplatform/server/mapper/UserMapper.java b/src/main/java/com/gameplatform/server/mapper/UserMapper.java deleted file mode 100644 index a11afed..0000000 --- a/src/main/java/com/gameplatform/server/mapper/UserMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.gameplatform.server.mapper; - -import com.gameplatform.server.model.User; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -public interface UserMapper { - User findById(@Param("id") Long id); - - List findAll(); - - int insert(User user); - - int deleteById(@Param("id") Long id); - - int update(User user); -} diff --git a/src/main/java/com/gameplatform/server/model/User.java b/src/main/java/com/gameplatform/server/model/User.java deleted file mode 100644 index fbe2c0a..0000000 --- a/src/main/java/com/gameplatform/server/model/User.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.gameplatform.server.model; - -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotBlank; - -import java.time.LocalDateTime; - -public class User { - private Long id; - - @NotBlank - private String username; - - @Email - private String email; - - private LocalDateTime createdAt; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public LocalDateTime getCreatedAt() { - return createdAt; - } - - public void setCreatedAt(LocalDateTime createdAt) { - this.createdAt = createdAt; - } -} - diff --git a/src/main/java/com/gameplatform/server/security/JwtService.java b/src/main/java/com/gameplatform/server/security/JwtService.java index 1c90e75..c84e6a3 100644 --- a/src/main/java/com/gameplatform/server/security/JwtService.java +++ b/src/main/java/com/gameplatform/server/security/JwtService.java @@ -2,7 +2,7 @@ package com.gameplatform.server.security; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; -import io.jsonwebtoken.io.Decoders; + import io.jsonwebtoken.security.Keys; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/com/gameplatform/server/security/SecurityConfig.java b/src/main/java/com/gameplatform/server/security/SecurityConfig.java index ad9807e..1800fc2 100644 --- a/src/main/java/com/gameplatform/server/security/SecurityConfig.java +++ b/src/main/java/com/gameplatform/server/security/SecurityConfig.java @@ -3,7 +3,7 @@ package com.gameplatform.server.security; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; + import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; import org.springframework.security.config.web.server.ServerHttpSecurity; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; diff --git a/src/main/java/com/gameplatform/server/service/UserService.java b/src/main/java/com/gameplatform/server/service/UserService.java index beb4f85..72e4177 100644 --- a/src/main/java/com/gameplatform/server/service/UserService.java +++ b/src/main/java/com/gameplatform/server/service/UserService.java @@ -1,54 +1,92 @@ package com.gameplatform.server.service; -import com.gameplatform.server.mapper.UserMapper; -import com.gameplatform.server.model.User; +import com.gameplatform.server.mapper.account.UserAccountMapper; +import com.gameplatform.server.model.dto.account.AccountResponse; +import com.gameplatform.server.model.dto.common.PageResult; +import com.gameplatform.server.model.entity.account.UserAccount; import org.springframework.stereotype.Service; -import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; import java.util.Objects; +import java.util.List; +import java.util.stream.Collectors; +/** + * 用户服务类 - 基于UserAccount实体 + * 提供用户账户相关的业务逻辑 + */ @Service public class UserService { - private final UserMapper userMapper; + private final UserAccountMapper userAccountMapper; - public UserService(UserMapper userMapper) { - this.userMapper = userMapper; + public UserService(UserAccountMapper userAccountMapper) { + this.userAccountMapper = userAccountMapper; } - public Mono getById(Long id) { - return Mono.fromCallable(() -> userMapper.findById(id)) + /** + * 根据ID获取用户账户 + */ + public Mono getById(Long id) { + return Mono.fromCallable(() -> userAccountMapper.findById(id)) + .subscribeOn(Schedulers.boundedElastic()) + .filter(Objects::nonNull) + .map(this::toAccountResponse); + } + + /** + * 根据用户名获取用户账户 + */ + public Mono getByUsername(String username) { + return Mono.fromCallable(() -> userAccountMapper.findByUsername(username)) .subscribeOn(Schedulers.boundedElastic()) .filter(Objects::nonNull); } - public Flux listAll() { - return Mono.fromCallable(userMapper::findAll) - .subscribeOn(Schedulers.boundedElastic()) - .flatMapMany(Flux::fromIterable); - } - - public Mono create(User user) { + /** + * 分页查询用户列表 + */ + public Mono> list(String userType, String status, String role, String keyword, + Integer page, Integer size) { + int p = (page == null || page < 1) ? 1 : page; + int s = (size == null || size < 1 || size > 200) ? 20 : size; + int offset = (p - 1) * s; + return Mono.fromCallable(() -> { - userMapper.insert(user); - return user; + long total = userAccountMapper.countByFilter(userType, status, role, keyword); + List list = userAccountMapper.listByFilter(userType, status, role, keyword, s, offset); + List items = list.stream() + .map(this::toAccountResponse) + .collect(Collectors.toList()); + return new PageResult<>(items, total, p, s); }) .subscribeOn(Schedulers.boundedElastic()); } - public Mono deleteById(Long id) { - return Mono.fromCallable(() -> userMapper.deleteById(id) > 0) + /** + * 检查用户名是否存在 + */ + public Mono existsByUsername(String username) { + return Mono.fromCallable(() -> userAccountMapper.findByUsername(username) != null) .subscribeOn(Schedulers.boundedElastic()); } - public Mono update(Long id, User user) { - return Mono.fromCallable(() -> { - user.setId(id); - int n = userMapper.update(user); - return n; - }) - .subscribeOn(Schedulers.boundedElastic()) - .flatMap(n -> n > 0 ? getById(id) : Mono.empty()); + /** + * 将UserAccount实体转换为AccountResponse DTO + */ + private AccountResponse toAccountResponse(UserAccount account) { + if (account == null) return null; + + AccountResponse response = new AccountResponse(); + response.setId(account.getId()); + response.setUserType(account.getUserType()); + response.setUsername(account.getUsername()); + response.setDisplayName(account.getDisplayName()); + response.setRole(account.getRole()); + response.setStatus(account.getStatus()); + response.setPointsBalance(account.getPointsBalance()); + response.setCreatedAt(account.getCreatedAt()); + response.setUpdatedAt(account.getUpdatedAt()); + return response; } } diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml deleted file mode 100644 index beaa840..0000000 --- a/src/main/resources/mapper/UserMapper.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - id, username, email, created_at - - - - - - - - INSERT INTO users (username, email, created_at) - VALUES (#{username}, #{email}, NOW()) - - - - DELETE FROM users WHERE id = #{id} - - - - UPDATE users - SET username = #{username}, - email = #{email} - WHERE id = #{id} - - - diff --git a/target/classes/com/gameplatform/server/GamePlatformServerApplication.class b/target/classes/com/gameplatform/server/GamePlatformServerApplication.class index 91b74416115ff01e428b17a264507c89e52a1c98..48d88546fe063a7b4560bebd790a417e3d24665b 100644 GIT binary patch delta 208 zcmey)_MMIQ)W2Q(7#J9A85GzVm?qj-FtanTOcYlVWMp7*&QD3@Vqj+AluLxL4b*Y5u_SOvIBYgK$;OqvubT; z;MfS3<^qx+X$A&P25un915p5^dBI|Q4E#VtK$^|KhA}X32r+8yU=RpL=;s2;FaUM4 N19d^nm~78%0RRX{76AYN delta 205 zcmey)_MJ`q)W2Q(7#J9A85Fn}m>8JZ8CZB2SQ*$RdME+e920phc)1w37`WLPcz76i z8Tcl1GwM#ZWz1u7&QD35SlzLC1)~IGJv&e<2rw})f;0n3ejraDNHYRyR;}#}j2pqy z0zeWZ&A`CPAP6LRAPN|S7=*!MA`GHHLqM9%z=km}a0sz$?O@;xN9YH+lYxPo0q7*C J8I$dqEdWt*6^j4> diff --git a/target/classes/com/gameplatform/server/config/CorsConfig.class b/target/classes/com/gameplatform/server/config/CorsConfig.class index 9b5d16086a69238203296a4563e18e81468b4be0..6faec7c2cb337396478c058506cd808b55acb7b6 100644 GIT binary patch delta 558 zcmY+A&u$V?6vlsd7zDh=S68XhnPg+)V;DF@#B6=+YN(GrbRB z;>xAQ1e%hlYZrY2jc;N+LmQ2o^X26H?svX>j`WdEfB${>1-Q?X1ePLi-p2B=1a>&P zl2O>(LAU1+Bc+LR$~=pGFrnQNU^=XqvMwoy^UNifRb*cHul!=)AM6#kf}r2?2by^< zgeI4CxujWOG5oeZwX9GD2bUGi6|(!PoO8LVxkgrz_PgE9em{8K>+bgaZtrCT<~0Sf zrlS_?H@KOgs5tv?S34N&MT^!I)2pp~`~OKTGAL=v+%}(8*1n@?hK&XD)k>MbUYc{L zkV~cb>$%!6@2qOF!B+J7ZS%`&?%SdHX?NZTE=L0k72QQ@Lb{@; z5{(x|BtK2Yj?`!j4yUE+V?gwbbn+3V#3X$}Wke&R_hKI{*csz?M$EK5`+##pE_&|L zkjq{vlH8J>6ci}cJ#phCtt6)DBrbGmd;&Ax zC(xBk+_c0dK7b2efQ{^U3gf-SXuLQ1PR_aC`Mz_{kvx+5AHTkR2OhBNVPU&Ck_2OM zeQwMpDOie6rqzL+S@3YNJHH7_b3?Pku$P7(<0psYvnS(ea#y@?v;^g!S?h8usr;;mhHllVXj=rd8&IgqjO?B)%e|JwW%^VA1 z)~0b)XMv7F$3%I6_&R#7Yc$W`>1BgFBk+(%Iuoq1u0>4qXKa08bBMb);9Sdh4)OY= z{p@6)+z2m^aN1v-WcHA`K8r(qO}_E8l3nuq+#FKds|;8<&_Wh6x}zZNfSb8K#&xXmtf1I1LbYXqfJ{{O&>I+DyTR~ZqtEuCeGZzsxE(m z|G=N%2VG0+T7K{c_@i9zJ4q%Fnv#~K%dR!eeVudmIcLwF``6!p{0ZPL)}jarTrD^o zM#y*nJKIT#;m_`v67<_KNG>x)pmyE^yb6HRV17@M% zRBe@`y;YC`x3k@R>kvF*)GdsOHp{d?WZbeXbx$BYyjLe9s{-MSQ#i{qJS}+ZB{bt*roJH)|F;KIl2R`G%D46+49!eg?Yzz=q{GC zO17!0F2R;}XFc8({|4(+Hj2vWY{|0pDvs^R^gV`7EwjDWhFrBgi^Z9+ZAY2P;=aK3 ztmBppui{#EX-#MP%5h&9uVmiHTXxYfgR{m%spic}h3Dw9@1r(5R?}7YX0`ln`QY; zReH*&9}WAfRIHWF3W?h9a?5gMaUVsLN)qw-3RL+5gejKXkG_zbq&~S3t`NFFqA1r) z!e6ZsU0mgkXMM|^(AX7C$r}lr!+EVdO(m$)L*Q`BVx!dzTA)TKx_H)I9=pEM8Q->^ z;Tz@V$A34%+cj0-M(|Ws8*&uMDU4S*| z+q5@QtuO&n&uJAD|I4-e;E#P@y;AX~|2E>=QnU9j;!-tWrWS-x5}3imJ$19apcD#e z*RC}auhnkH55{DB{pOrv7=TzN-oUydbA8x-Bk80`GH{M<^K~xphyi&8cyD|0O_U0Wb zZkQFz(4Qy|r};_JUnYJ|^bMDzD92IsBZL@dGyDzlH-6!FJ{Nz(fnPWa;UNDH_?AZz z#=AUw41-)dT04y-{pr8B@0Iy;+{bGhe+1sa5sr>>9HQwl{tj?8#b@X#goopJk84rE zg%ccT9CvwC+2o7oOl^bAG8~ez{{l+A%k9#lzL6{g|F#^Amc-B1ai6=_hpQaw?qa zOGUPDy)&^054bZwHj%#rS95~Cc2{gHuNe%X^4<0#^nA{C)I zXb75shXI4n7#}hVcX+JUosazTBadiN%rENU#b1PlHfkqAMn|(NfVv9-0IS# z45sLM+IJ&#WbL)yvkZqq3tRwdHlWO$2Gl~CWQYrzGVQo#SrlECc&*l3__!0;eIMAV z+Nq$(@j81njWfv7YXc$+-+&kk@f5hPVa~TOd%=g9qE$M8x!A1X((5FjWPIJo0Uzg~ zM_b5k;nPm6vn@p&2(S)p$Mi4X0OzaSz{qK9O9_Jc`>Ms{0F6< BV6p%J literal 3218 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 G`^`Ti{$u+9 literal 0 HcmV?d00001 diff --git a/target/classes/com/gameplatform/server/controller/auth/AuthController$1.class b/target/classes/com/gameplatform/server/controller/auth/AuthController$1.class index 542d1f999872e4a8f013f4f7d0465b8ff7ba0332..f1dcb43c804c350bc06cc9d61a0ede7094cdd839 100644 GIT binary patch delta 624 zcmYjP%}x_h6#nk~Fw^PPj#ojn7D0-IVM?jgidw7KkjO$bQFLX@*p65;Ov%hhFfQ;F zn!9r48<@CIgNd$OxzhLW8PGGMA>QQN^Z%Xip4_+jpO*do;PY1i*KpH-!mvDi+|(fya(ejWlR z3>;?|leRXdbBvNzWp$HboZ}Qu%crc>_*3$!fXb>=_7az24OqTq_cK8`8) zh?5T;QFKM|KeyzH(xEHPX0>}+@zfg#M^s!Ucu&MauGwX_q1w$Xg;2V85wEHNXrs4Dx|XBsrx8{k4r|_Qqw3D7cI( anZAk^X$=kfN;k-|2sPb6dR9mjH2wf*BWgSV delta 679 zcmY*XT~8B16g@M$Ww-4>%VM#7ln;xxT?z$1>Z(}OLLxC5k{V4+eAv(lt|?pGU5S{O z`WKo_OnmY;kcb8!`~klC=!-vrpP<}b4bg|0d*{r(bIv`P@2L;z@o&Grdq&4Z z8dQM<1{kdHfLndJmWyy*Ac+)1V$bf(Z87Bg$N9k&1O_z>31pD%-z$_>9M=gN3`)83 zNQc3ozx1W|aDP{(aRxaJqXK7<4_Db(_>?W{9OD8Lm<->sW^;;RAS&Nz>zMi5>e@R} z$2sD)+dGb%!W_lug*9){s#{J0gmTxq(w5bd(OS*o^!tYopUxP=O39L z{P~~B?*S~u4;mDP)h+N?R$0P`8y$HQMQI zEyIo7Rw`v?+Y9-w!Y@nf7`#jR(?gk|Tn8PF#x^jxyQ~3IM*w$d2#Oo(3=c;LWuioD z(S2a3;P5~dr?i-+E^$1?GR=(YaA77#7+fBj&7r|7wOS4zbPAgr9I_eO3J0nQajhu# zR*1FAmUE_emA%)GWpl4efN> z+wa7QmJaa;YxZ?wxrTcgnhJ#`^1KuCM8w-EuKDUzWyEAiia+%x)-JB=*A{rOnn7D` z8d)=2r(+Es*0A<}T&~MyhcYRSbyzQcS0dgu*ue299uvANsy@!K37bWmYs|M5PilCA zVWwE?nMr94^oieG>&pf>Ol)INjsAXfl!{UtJ?NH8jCz*xaqN~%Kg+N#TI91%{OzgM7+60;SlsZ0 z{Z!esG150+%xhw3pbJ-sU)8FG4El;)62_2~u{FHJP&VB)Qx+Ys;57}eioCk8mE(2n zVepI^S)0ha88%6oqTSQZ>j$&en9-Lu+hZHN*eCpIMBR^qh6AEgt(?Pg5N+h0vx=qEkzHblWgigKpImh$Z6VPx{>@KZkUy8$};qoB9lD2O+-oRdpaXN^- z;-}JBEQqtxaDihCyU6K$5W5)os!YbrcBKv5Hi@uFhI(<#Usb-+$PA=SdtSF?ZQn7f z;VMIoG>CK{m}e+iZQ8jWbEMDA+L%LOT{N~X%#gD~T1bwEBWXBD%2f$CohzkPjHLYe zLhKU!=TQDFEfiGJTXjq!R5?4KRT$M|lWrSH$~1v|{32$=6BjTm-f#gm)7~Mt$zDb8 zFimAO`~*lwsw?`DoI@*$-~f^!0&;pO?p)G+3T>01hsmKLF!iJ>n2!ia2_s6D*rq&~ zjW`l=VWI&Gu#oH}j1DxC(nOEM+e=v$l2vC>9!e%A(0mz-T!^2?ELto(L#E=TB>d8`2h#C4VzMfwwM0xG>$J zMVt`_ryK{_f$!oyk{-NIZv}^(+J#8_fYu+hc3V%bAX delta 1853 zcmZ8hd2>@$6#w0qb9^DCmsiIR4=`V8$=tN6_)y_iC$T^4>lB^1J7}^Yvr(8-DwH>L!3T z+|r@J#$gw5z{wC8N*+o!rjqG_#zgOs(N|z_whpET3+)WHNVLZd7u+1WfCr-FZ7z*; z>PqGl@FP%~YBRZ@z+B8L?X9-CP%eM8hdm)wa#RUaW4`>;zFI~c;hGvOY~%>{#Vnf;x_RfiNNr%S(Y!>0(G8(e^EMA;!QvjAYKp)#_-# zQjTQ;jadG_9<~>9gXsZzkcV9jSShdyP4WVdI9ChYgEjJZKH^)87LHaySWt`A@|IRD z)2=~hsQaR0=?*y7d^{7R7N(L%Nq<0@+hAt_jp2K9R~Ju3%!)EC z+9L-=P1}ETbX$7Y;XWf<7|f*e9A^oK*$JG{5Gt*GDRT_vF)_B-v&G04x{cvpBbTT9 z?#N^c`9dz4?KTPrGX41gF37FEigLdLAL=xm9|=hG1@H+&RU|66>7m8|#u&;Xn`e_* zAFx1KQ{u+6~%V{=#knR3hktW|o>j&6Sr51*$pxP_*q;;Z` zgYFnZWc37byVbJN>5p9li^Z>k#~QA}`yGiir05-lo!%An4#AB|_$cr&Nop-Oq>&+x z0;n`aimgbMNkf)sw?=X$0;y={;55@F$Xk_JaT#-hW$_7AT*m?%VpqV4x$6?Ctn}(* z0xYDowPxCK%WWoY1r8!dp;ayiD-s9fP45Dpq_dLj50QRk4_F?DF{)?-PvL1CA+;N< zoQ`Mcd6pg;f6Ziy#4tREqXd=WY!U1&zWj%or#&QB=716VRHqCU_gy-=B6%oRGyhxOW zW8}-Bm9OLUb+Q^Jn}7R#iTb6oedO}8YSL`@6|*hDNbsr>=J6T@qFJN2>Z_gZRROHu zKw@_+ehu4Zp?8u4D3dDAf?b~}PR9wnLHg+`P5=R&Kq{UhnTp#?4V$B&?srFQ0zKEU z$A;OlvVw=r;KDLR38yKJrZ#K3yf!*jd2SjEFAc_HcUEUXXI1A$x;QR diff --git a/target/classes/com/gameplatform/server/exception/GlobalExceptionHandler$1.class b/target/classes/com/gameplatform/server/exception/GlobalExceptionHandler$1.class index 315d986db05f7517853faa2680a7b99b06110c4f..35b664e1dcb2c0d787ea827dd0165b610dba23ae 100644 GIT binary patch delta 552 zcmXv~%}!H67(Fw$<^DLprBwWDwaP`y#aa+ipkQJMi7bTTLU$$;I+knNsp;IX)mOmT z8(+bNNL-k>)Q9j1^c9TX6rJRobH49P&YXN7qVHk+ zyBg+)nMoFDYQOQdi5A1yMy9j;Aw#?FM%M7^b_j-Z0!55P@GvgmV}ik}&p!(gGZYR6 z9TlO3vX5zosaNtyHhWTcn>#vJT{RRqj~V-j%>@h>1uo&T)oiO(VetFP7}-?;t}=vq zMr|(puOrlO!^idiW=c-trra+wX&_|kQI2RXM zvG=&6a=Jtg27`X&^s4*8fy=`d-t3 ziJ}HeqJ#_aR(Woz>vyAN22q=Ou49-XqkIiq!etFtB(7qVq4?jY?MJTX_LFC9Lg%<9 zaUGT9JzH;%GiZNr)=_21MO_Lb=kT?GN!-*>lbC}2&rGR}woe6q^nq9ONlZ)3;8s%O zRk2&!jLrG@S2=mYgX9Mr4 zx^p84BL>;_eYd~fbHdOKQK2cBG+kkuYK8zIjVwhPGAWE!2@R^dP3$cMGK7nEeE?>U z4xrgH1LW<`7_zO4_9tj(7&%4xg>8*dluzlgb>j>Zr>LvwgpPCEp?#RXBd|mEyBNbB zrtuUD=-_UuaoQI#i+hBMsdgCd6E6s4-%-D+S6W#-pd`l}=2KjtVo;Y&`ez=dnPL;G LL<~BwTfgc5PfSqwc{?-NlT$2g;3Hjmk>z!Fr}136sbKBaU!%xNULTQjGRr0SLFzQ zq1qGTz?~ZhO2vU6z>nakAjU~pX?AAxX5TzL?U&h4e(?M6&tCwZ;He9XVf$1>xoX3O zV@hoKwA;!v%JwQnWmyIJzS%vC$)%^)I)_KuVccr z7##apLDj|0|I8Uc%!Db;v5GabW>vfuY;bHMG##sI{#b*^I}u4WQ%2gea=K~SO;<4l z&!m1c>^&DFF_2o0QuEcWnb&q_ajvb7l3^OF{$#|(BZermisLbMOz5;f@O`D^sFjE` zl_`VQA<28gRHH(c*<>*bg3Pz9qHy8CLY}I3gytwW!>#Y|!yn*bajtxh!Wk}i!{XK2 zBrh*Hlj8b0Zk%B~YrfGl3tM!T-jA8P#P|{mI6xVPWXLNt(8Vnp;Nz`L)Nq@+21UU^ q?qh&D$+|;vcPy_-fQ5UwKh6*Ekg|ga+w?;KpGY$C+1aJA5d8xlyldV7 delta 717 zcmY*X%Wl(95Ixs+u;Uo=XlY4kX@HcbPD>y>TADs6A#DOJR6?S>Hf~}WSBZn-t8T+D zL}tSV#3vw;P_f_x_y~T2Jz}mKgs?O|=lUGY%$@Oj{bMZi}>p5j%P8dicH8MACZn-W0fAiymL%YGtI>vEU#e{)Luyg(0>7`ZIbNM=hoS%QH zA;X}EE_6&`TEzteGsrR||5dGf+;;44;ILUu!X*Qjkqh3jO6>}RI_gtHo(`ivG?)xg z?vlo>_8T1wSX6P740F4RsVEhg(x+RFEP+MUEm_r# zaV?dquNkXy3IwL9C`6G!X-h1jx1|SrbhAtAiR(7Th!*eG%$R(32a8tO2!qH+g^C#n z5T(^0O9`xOIZ>);dRf2CT7wo1>sO@p6p1?5YeI88uJ>v2b!K0BP)}GHvT0S;PKRPj zs|=?TR%}r3j-_IRzAlk4EKT~#hH0~yG-HXrUXza9W|#w^ZF*0rCzgnYw9MR4Mv3cD z3N9Sd;%QQ|(4%!+Xf(m0d=k3CdMZhHdM9zFQ`EG`cWJ+6B|{tePi9_m!@Bib!c7-n z($v`%zyf-0`O>9TSsqtbU3GO3i?CS1X#(@JWQ_+~MKx*!f()isJ(be>Xzq+^FU_5n zHn{fIe5nd00v9Jw|l9)ZXk-=BoFalZhHZOUqhytKW!rXfiS^-DJR& zI-$A2FneOrsGbm5;WfzRQ94A=M2vq}&hr5AU&bWf&>n7RUcbJnEr14Q=kldzRb^B= z&Rj2@*(7l47-!~!kbGXC;(SyIOn38(A)Wy#&{^#pWtn71rISg+v_hNo9Q^O7UHSQh7B=29<^~WD9T4N!d;xQ>dU!nT&m(STrN~ zEn;JJjBsba=}jjh_FmG+BESk~GP~Y@Hz{}{b$dakEEQYuW&wqJQIi(w7pQWhaU4N4 z-O`XA6%lDjDGhP=E6Hf8oC$Mj0KK&6$Sv0%y?yu5dv_dv_@*Nd>^b(>gEE`?Wj4hG z&htwnPdtxg@z^0^jp~*bi<7oW=d}+T0u?QWce~l19NBW#j<;x)N7=Y_WsTeqoamS2 zTBa6DSluy$+c`G`fhI}cfM!}+h{fFvw~)`&Ox}!m&a`(0wvj~;|mpU!!>MBVl0Uo zTMl|FXKk}PP66-0bqcO!JY@xpyjAf|T+hOs(63}_cTH8A`i)k^}1~|sC@@0JxH{%us@5^b>oCs2JE8fqLwKw{9=EZ5=V($~> zZs18Ui)G!oO~vi_5Vxab+LQm@Sn))yk34rs5_yM;J8>7m^lPa$n=`hBtS(|mV6sum z$XqhX$Xrz`bESlvNMwLT&~5mNo!n_o*!HxHzhk(4ai`rLbH}h(Opr9=H%Jpm3*dgY z)p68hw}%I1%6wel?D4jTSC$;agV?F!6S4=A4Ru)8QbwX2dHAG?NAM};)1Wq>God1y zwJB!x+o`1`Eap>AsJL@WSY09{RarR68dp*9Y*pz$sTV_&l4$Nh0LVp0Yc1fyrAX;O0=f)vvR3)_4I=;Le#I+}WuDGn?DG zn!;`CTDEjHg}a-=Tbjb*_HY1SVSKLOj?$c9MNVjOCmZdqMRN8v70=-7JjduVVFYTu zP{wlC)o&WxCV5Q;%QU`@GSy3diTvoZrpL?&YeeYxc>NcJCEOX=doS86nvWp z!4o|PE?gGGA$(UJE59euQGMbEO23w$-A_Tp4oT6>nmRagxGDEg>{6iMxz}RGnL!-J zPox(kC)<9>pjmO9!UcmDLdGaJ(H<4W)Vcd*^okrS>=o@14 zK4z}}MbjCw(GpnWD>-u>^4x2%xXOmmG7Vm;nCqfLv4~DxWetX5rPv=QoilJMh=1e1 z3jULGZ4gTg83TH##SSe_)Ottmp#F!KSm}6b9vKpN)>~fOm5%U@_H|EcVT)l5q?7fY zs2*E|au#;+T;QEP`InB$S6=JgtzF5DT0Gv#zPG-#2>)W;^P1#1i@{PxS3!t;6+g!> zN{a+94$tuKlzdafmQd&lnWEx%_&tU2YArOO5O2Il9K}H~Rg@{Bl$TU?2X1$st}PC? zPVbVrJA6b;6S%``Rt~4Ho2OjIZuaB=f0pf)EGx@li=>M2Fc;?>z0yZvHL5tZyUUU@3FdnZ5{*lo<3R$X3?rZA5O<9r_X z1?I@hQ~oMJ017|s?f6u~Z}~T+Ts)58qbS?Mhdjs|f+G9X3{1C2qzK-jy30cRmJ17O z_haVhCDZLCsxtwzFq;#3vL%9i%;oP&DmaNFCvS#`;1rxHf9t3sSPAJ8PRrx>$$L>& zK7YwREF4B{K5F-3={_u%&--xBZccDu2JOj}yjY%N>#cAWyLu@G_0%D-iYp2QA0(L7 zSmO(3Z5GV=W5KMW^2QM`8yql=K47W{X5P49){X|V5zW3}F3f^)n7I!HoCq{XW-cO_ zRvXMgbX>L{;Z_cG)*ZkmU>KY8z(!c8uofa!!-EF<@^R`Ed`x~z6?-F|#0Tbi5-+U~KmI3u?h-^ULqmrL0%~l$c^R@zvbUy=Sx(G*KcwFjUU4D_IfJ*>9U!`2@5Btq}|u=V)f%8qvl|^PaD*ean0^Et-)|gw}y2qtY040leS?d!so@!9xdLIeqX00 zVsYJ~w7A(PP|;>uec@ERw{c6j&Ft&bt)^m>alCQSqUvTX7SS&o(o^=b>MOT}P>vZ2 zDpVYYnF8~(NL%A^y-$m;vigPw^@N?-OCZ#z+wFQPrS<6oGi&SGvWvQG%SiM!m7)^I zE10dK3UjFcSU3VjMxxggIIT8+v2Vm>t4T6+0!~zLl8Td2EwI25n3Q|Kk4FadQq)fc1Da4KDt5|>dzfSDT3xz0#tiHDk4cH7Z)LmH_-nQxvQ)d|I??=`9sCH zP++b!r&P|iG$Ubm8zwUV?dqDeOPZ9P9NwZ0XqK&o>7SnA!vTvjMhu|~-6}TX4YVaS z3z$n=&B(D;mu{2XOR!178&$jsZx)!AC6`|XiVa)0G}~m_smxj1>Wx#trO*`gsE8s) z?y>^XQ)r=nE!Cl4PI(NoOXP}P6@8$^iW1InZi4X$RIo+h)T85}6b9ld29aDMmy0vDWbENVEmaZz|5J{ZvYx$9M!C;6o-)1>&-(czb={@-0Ol*WmDS@Y5f)~Xo+;JYTMk^66tP< zY;K7}IwQsSC_jzfdDEdA?m2YFgNLrW_Q*949=Y|7!#j5>xJO{wv9>BTi$mCs`(%T3 zzrgz1wqq646jX$}6@2WqfIBmU9e7ZJ`?x^Q{}x=3TZHfld{V)uRD4>-TYZpk_>#Tr zV2%g4-tP`{uoIG!cB$Ac#mrz_tkHY5p?JDo3*iwws^Bv!_Q(l!lkAhN<;?aJ=DbT8 zyFwVjJ_Y+#d={Uhe>#GE{pMON%EG|(CR2yog0chid*4d$F>$L>MQ?CgBlKxbRyF&TNhUO3&I_|vw4 zAk-S4na5qtjoWp*-;Ax-WEacurXp35p@eM=>fJ`lpq8r=36tF*n*c}2Ad6+XIW03c zoJo(~(SWp`9hek@7U$+dE}ic3lj&atmiTQM*tG_8GcTW)+-8@%9p_oY--rry)lQ6m zvQ{=2&$+KrC|iJ-ZfizdTF%uipowLNlj~C={K%O^8uOovE0SVPm>gAZ;7wwaNl}d_jR&ukcSJt=Mv2F1SCvk?U*0s-`4hk- zNN4$6IXjh!KI-&qqLooJn7&Y`@J;soUS@vh?2wyhPl#)SJu$7u#g%hztywIv&O;aw zkAXoSTwvKI2^7eij)qsWN?;;%iv-R)c68aY?1JkhxP_B}^DSaAUmlHn_fMfNbI6M7 zYYkao=LX*^ogvBR2{>?%aSDh$W!jd>OC)PmY}knE4BFBT-a57GvZ6CxmN%QGo#IJ1 z=@!9MIsU_D)9+X5b5!^Asd!PIvtLs2C;YjbH5O+C$GFdmK9%bzK@?DeC{*z~{JvaF z;W>Iz3BE>)R2K_{_zv&fJG%So!w=jydiO2v1;DauLFpwS5fY_}P*pKa@UqQ!m1ZP{ z%>g~!=C~`B)q2zIQ7Nl__U%c(?%pDon{`fqlB#Jl&4Hn$|7e(B8gdqHV5RX-Kl+dE zmJ_e_A4omPtF?H%i#G#Jq@+9~W{3(!9LE!*V82y-^ zO6FgA!yM+X;O~_By%4+kP=GJ+ulx+&;~wB&)t!JZ;!AuJ_%gnNLTB+s{FTB_d>Bf_ zw1s;xeFU=#QU5UJ?!i3yz6Yo5;sjTyyvhcTy=BC5fKQd~Voxx|;BkDF8+?u57*mh) z=j;4e#cAK*@PbVcQBHV5KI^FF{jI<^@njH~I&Qu&4dx6N42SZ-R1?g+alt$_8JMTC zU>0%ixA1Kb%)Kb$6VNP~S~;>E)36UKz_ZV)0`T=bzMk*Bdi+&f z(69&XlDDPAHin9`-Ic@zdON1b!CPZ6r%e(9T=01N>4?Fpd23 z1N@Lr1eGCR6A5_MQMbiMfb=+b{*O4nk~h5vA*uK=*OsB+MN}(Ts^HQWNZW+;Jey0; zPw-QZo=f;Ey?nl;=Pjh?t!XdxLgMZFa5boQo+~aVf)$QdZd}aI=rW(WJV#w7MD$!P zqMzaC9wLL9N>^M!FxRz9ST{EC@x3Fsxd`LmsO2{FOY-mVj{jra{698Fm{`b&NkAcWuUsr zRz9V-QN3;C*g^c3sHHzlE6i+o5GW7Hj)bVBYRw+SW%V@gL;SZ>2HV&iU+*Ke%n21P zr7Qjce*~+p?2&@xJxqCfgXGnXBkwQxE9Dg9Z<*3F&tVTJsVII7k39lKLKD97Gn2OY zJI4y}52p}FbNrL<|Kh)?9Nocdzkl=j1Qd#5D*FQdiX@dGH7Lqm091 z#nHP!N`J~YNU;gmICp7}P7xJX1Wmt0M8opG@t@Ir-0Doder$;ewZ zJk**|r`KOMoI9ntuQCT(eWD^GT%Lk@wMDr8&xdYdQ&k4hA)oW!eX9DzDG#*JlX54&sjf+sj=l@9c==?K(j4}&Kd_sk` z?Duih1Qxn7j$Do-LGN;Idpt;XflYwGC0s@T6j=rT0s1T_sB1~pC46}XB3Y2G#CTFSeYVP%fSW=7rm zsS#13WnfnSl(ROQvu1Lx!;O^Zejx*|W@alh*E4g&AT1@dWkx3aWt!?$Yx&Ien_vyBJ;cEfo02WG{k8~^|S delta 152 zcmey)bB=}U)W2Q(7#J9A83ZSCT@)1XO)bgDPYFmYO3Y0yNi8a#tj8!Z@pkCsNXDee z=`8vwOe~BHtPE@nObqNmU7Sn|93Tpaxqw)liGh)U8;E&|f#Pr`Cr}SB10PfmD$kKTwQ`K>z^RDHU=6 diff --git a/target/classes/com/gameplatform/server/model/User.class b/target/classes/com/gameplatform/server/model/User.class deleted file mode 100644 index 9b4483a23cf4e302c7da905548c2e097b2d2671c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1528 zcmaizZBG+H5XWbaKEh$46np>_uwo0yfp1X~L`_Tz8o|C_+O;g)1G#QV{8pN1Onl)7 z@Ix8@b3JH#9^u99-rmgo=eIL+fBydZO++v0`8ZiLmZywOS;`5TI+K^uai!mJ-k+SQ zmJyVDp?z(31&!6}%_0@3n5S`@Cdd}F(h5AMBRzHDO7l4gJ*TU}OBFg^&{nSV2`538 zZbP^+P;LZ%XNQ&U*i@n^L4_V1eaHwZ5BVLLP{*ESn`YQEt30V)j-9n>j_wL7wn8P1 zYVQH{em~e~PdSaCCEeGs9OJYD+sB^IhNkZ76Ibo|eqf~0f!`HWN8Gs#jdU)htJ~3M zrv;MYRBC8n9rnBv6&_1~aS0f` zDMQWY_+!SLYLHeNw^tn6*^V;rQ1x<+uXfeZsO~U!`^K4C(pGPxQ3uML2JH_rL_drQ zk#quT+{%83DkGY4kKhE=fz#};cI?CI1xQ5&z$*gcR~ujV2W_0c%8=Sf8*xL<3vs3t zUrsoF6!gNDdaJpzMF!mDg3vNX$igp>!HQAFo5iz;^&Z}Hgn_~S08fF$3`Hl4XK=`4 ze#C=M7SAO1BI5BsVO_w5Xm zCX-AHsZ2GhBgcPClS!r}FfHG}#QnKuDn(3dsZ7&JrfMqFdOFi|lBou!`VCAx5!XzZ q6C5_^SxTKMNv4fdrcF#sN}Vc6rY$gS-@wE(c+E5yF>PVBX!{>f`v@oi diff --git a/target/classes/com/gameplatform/server/model/dto/account/AccountCreateRequest.class b/target/classes/com/gameplatform/server/model/dto/account/AccountCreateRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..0ab009d5cef75ccc67141deccfe979f749a3b28c GIT binary patch literal 2500 zcmbu9TT|Oc6vxjRY=aTTwYerG2`O!jlSaLyH)B_rr_Q@F zeD3)@J5c_G^6j42QC+(edbVu0y}ldTTZ4JqS29#b>W97x!aR)&D!r5!((X$4%sx1M zsoJ5Si9XVN_xfB3DmSl}k3-*a&mIX{IzmRLr%s%}Iqj+~*Y!dfI-VN{T0_7q>4(z3 zkX@&v&2}40p)Vab4D6N{)=}*h@+=SM;fh1KG>41N6ZGzz(jGfME2JFjIqnz~8skU# z6F+VWn(80^IGRDff~fF4LeH?%wnb%j%EO6mf+n$g9JSIUtXI!v*c-#0#R(b~&2oY=TvN;V9K;+B zcU*Z$sHo>k2u}G`k_u@z)~9gn_5HSb>M-e&=_Yu8FgEOQh;g$n#f*jqYmT9=7U8CF}@ zMDyzz;+bpDagzB_wWHMxH-Dn`5^CSrqnnA^v1tZtIEff60j}jhWMCYroUOU-6J3 zPQ=O+%_V}faqwsKIlP!@9dm}gYxgec;Wfq}dR|A*4?Lo1&dmEO=nKSUaV=pI^rew! zJLig^l}=ZTSLBh9m9XyY@~T^jNsw!jCo3$XUoV_PxIU~ z^6Z#->S><0NAU0ohyCio_%VW&R61?b3LNFBY60RiFp<@&jH2^ G9sUQ;ijd*} literal 0 HcmV?d00001 diff --git a/target/classes/com/gameplatform/server/model/dto/account/AccountResponse.class b/target/classes/com/gameplatform/server/model/dto/account/AccountResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..ff99eb5122167b42c2ca95cc8aa060946cd83cb8 GIT binary patch literal 2395 zcmbW1SyK~15XXB$4w5Vo!VN({Ji;N1ips4VVp$cD;(A|_H7u26Q=1J{d@HTevdRZP zfFH{8-;-n$rY0}GZ0}D0yZbji)BES|uir$pLmy%k610(b%VyCk+trfge{sFCS+l)c z+cV2c-Cdf$$cg z=T?eaf_m%7e12E81*JQ@XTImO{S}Z1N*0_Ncq zl+D8t&wIAz+l4(8pJ-(Eow9A_+`Lsfgy$Sz0EpMCg_bV5?Nl6pS5QxO;Zjie0J}|4 z4~-Z!NNGU>Ij3SD*UMKxwywB*TBf_SJcqxVi(&uT0nt|Ozq<&oNYVB`qG##sLPuX@ z*Wx5-+MozUA*(fHLs?bDJ4k)9{cE>yVtMG9Z+oChBJV}e^Wl5hn_cJpj|_@YFXYJI zmXCB+X{xzSD=8loM=ux@?~HC7U_VM9w$G4-&kRbiupebQT!LcIp5laA^xU8%i((M* z8V(KKGkNgre`S!t{y6-NRqPy!lg=B#!VQD^xM?W}?>Pk-&>ysK%v7r{nmfapb`9#M z0fZq_M_8uWA59duiHlsct{bO0FeueZ6F3AV&fL0}w~rj&>##CmD?CFqhv*(mY@9-T z5%3n`1Cti5mlmCs7R{3uO_CNpkQO_T76`CI$cS5x=McV3SOFVZ{7J*#q-+$=Xk(Ga z@NP8U$7upzf+lGS&-=mODf3kcPHBT5&fK;o}n&0d=>#uO!7R{@?=$>VJ*+1o+qpFjCA4Q zI}z~2CC`$UXIbSL)$*+9d6re4u`WD(Hv^u86bivTAqECXI9H|sOQ;NdFHzC@IN%*NlBjf Ic!uccANVd$bpQYW literal 0 HcmV?d00001 diff --git a/target/classes/com/gameplatform/server/model/dto/account/AccountUpdateRequest.class b/target/classes/com/gameplatform/server/model/dto/account/AccountUpdateRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..e5f613da1a909af0237b8097f1e8d5cea3f481ee GIT binary patch literal 1197 zcmbu7+invv5QfK_6G=7)N?Qo0Qc58$629k9QGt+@q1IXWV^lMBA(26{+Vya`}@z&Uqtkbx)pL5?Ras>$0C%IK$!Qj4tXN=Olls+ zz6`i;VlF%{o<@f6&h5d(7e@Bw$Ei$Ag^G;YM`9*;AfhpUJ35k{VN~~3f{Mp`sLW`o zca||QT1De0j5>W3RiPZJM2!Nu8%41ZM#WLWXcK}DLL0$nB2eguF!yj}v`~>r_&|M@ zs8I;Trvj$&8Qoeew|_iYELqfX0F-iqCR4O1KUI-3JE+m!8Zs)rz`Qjo(2`3{YB6f{ zR3!JN;YjLz0X{oL?1^9~w6gw5uxJhysy*-h-yShbb1covf48>W-8#RwDlxk5Qi;k? zBpJm@_q@Ok*M1|-VeG#X8qZ;*25<%4`q+rAcgH2y)~leNjWMd?c91U0-rsYnVehNB zpGO(h2JuvT@|CjboxD%uk$rPohu*$WfgB5svjVS<=q3EBuc-!yP@i3)vyfwf5O!>1 z*a~v-DmdHlI4pxLZU3OlU(+;*k(dT)8UNjr|0}c#kI_}ShI3K;jXGa4;(D(52HgaS z6+eb`V9VPNzf&jM+D+A~^9-7|wpeys$T-Q4Q literal 0 HcmV?d00001 diff --git a/target/classes/com/gameplatform/server/model/dto/account/ResetPasswordRequest.class b/target/classes/com/gameplatform/server/model/dto/account/ResetPasswordRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..695cdeffde7584224be8721f2e0b5c9cbf722eee GIT binary patch literal 1224 zcmbtS+iuf95IyVWLK8PhFDVVB+)5!yp?>F5K@pWIg;J#@?^|a{x3#^+-lV`2p9F{s zi3dJ_k3!7m(%2Bh1F|%;vpzF(=FI;1`RzM^$JofiV%T(*?{v5?PCc$)tI&5M5%xsr z_^K^Dr>&L4T~~Dj?KDLs^d66*GZnU*;!RgXI*SxT>6rJpu4c#w;%o$E zm}`s?`#O|C=OII-NkyeES~8M{o_HDrN^>n$5HZv!;e>~pJ3a2ncK_OO>6Z?<40Pn| zD!oMwPpHn?zp(rAy&&9_FM}zXJY$ahtvP;RSV^)tcz2p)k|#}E(NG=LrLpE?gKR0~ z2_8`8%p(~{y-9VewH8C_8A+GJ6v{ScF*l9NsARFkFgsRZm~7(;N|bTXeD!=93|DOw z%|)>x1F_rn4@G#uNgN}ga=F*yp)~REGNq3ssr97se@mnh3LT+$<11UJnjMVRI$WBe zc-uzWXjq`fkjN-k|4cA)lwJsZq}qEtq*tazNQ6zd?YOSxM7OcBrbz<07;iGdnJ&3~ z)ulykOCwfg(o@|qr9 zMTj(2q&1Tz2sWt#BX8HgVxj&Si|1JWM6rbxvW0%{3{uEZlMJpILAL%eClIdUCvE=kc@*3_C$`E-#-Xfo=ub*ReOkt2c)6ZTUAcon5?MuRN v*ED4m7(P|h$eNOIKFh!JDNN*3$ND5bF-Zn|ihto_B);HN?DM%t*24W?r91?b literal 0 HcmV?d00001 diff --git a/target/classes/com/gameplatform/server/model/dto/auth/LoginRequest.class b/target/classes/com/gameplatform/server/model/dto/auth/LoginRequest.class index bf762f2b8705f9ad826289663c83ead64f32bfcf..416d507e2439a7226be3ff77518af1bd18cc8914 100644 GIT binary patch literal 984 zcmbVKO>fgc5S?{Co49RS+CZVD^p+NhJs>W8Nr1#Dl&UScZ|ud{*4_>4brAmwBoGn@ zegHoT@iruF69NZhdB!{Y-kUd*{P_9pI}tshy&46K?nfr$iOA$I74EIE8PBC1Ny{@6 z%aq5?a8bAc@0vvEWBIO-xvNo`QR_^M1W$!d`0M_ej2xqS0j`D?qxJ6P^@+1eCyy9y z9T(cEO!ic+`l)=TwQ<5JqjN_4Ae;;91Rsf1#p5!MaOJE}+U5Mvxaa704xOD@ozoA) zS*`j|E2xIW~1YWoi1;(oh4#)J){a%0ne|(H#>i#{Vc6l(hW>} zBrG=Wq=i4<=V&s!7u*S{F%_KF88uE!VI%oc`El2-{;>DFE!qRKguh6D2YwK1I8{-t zBQN2t6T9Z4$DqMK5f$*TYQ$yWIWj}89DJpfPh)`=q8CSz)(}0^f3FjI;Cq8M5ogJt zsr?a`0bP=t3&}TV3n)*1h#VkS5AJ@U_I&Gb%x?ciOj>(eett$b!K*MFyq{YO{cO+s eSzhSp_F_NV^L|$T;>U0M!cSxDXBRP`JHG(HT)O!H literal 984 zcmbVKO>Yx15FKyx)nwC@(iX~B=`AS|J|Hd>kN}BOC{cXrLj?XDfX-XQ)JNFXE* z`~ZFw;yDdz5&{PlWoE~oH}mF=fBgLRors>$UY!D3sZuGVGF2F@pNWy+sn7|3-9M9& zV^n#pv~o`wt+YG6RjScymFgiiC}i{?G8s=qCWonTZ;j1(F6~HKo|#ytJa&eQ!VP%W zBuXF4cZJMRu~r~U1I1{gd)e^BS*4Q$-(oGKmaktMiadXBY|LoqxX?~zvZr#@PvtYM zjT258oipm7%DJ#k@R3MWJU-?TuACK0yPO{y_Z&l=A27N-U+470aK2XQ1*kJ>b(NNf zMb?-0RG^=yY9f*LgjGJC9G2WbfxyG=e+U6GjYPUPQ!zH%evse#Pvk&SKAW`F{xhf3 z!{%N|H!$&$un^Ws3s%1R(NsWR<}#|En8HT#rShX)ncdHQPl5KZg#b?^zz?g2T}M$C$q z5B^NmkGPx#HY>8QlV|3{m0mik9+e fF7jzE<#T5_pXMT;wZHK3YESvJ#(Z{R1G@VQR-3!1 diff --git a/target/classes/com/gameplatform/server/model/dto/auth/LoginResponse.class b/target/classes/com/gameplatform/server/model/dto/auth/LoginResponse.class index 2557f1e0e9d426e7d991d4afbb1a25da866a9e2c..2cb34ad41b10261bef23640c1c3f05d1ec4eb00f 100644 GIT binary patch literal 1749 zcmbW0ZBNrs6vzK}&#c`TgW*QWR6s>BQKJcDK17iBWxI~z)-G*F^h23wA~ErW zAHWY~Jm+?FrFL)3lHS|f|2g+}{^#uXpP#<~Y+@sil)!4s=@}ifC;MH~|KPYi!;|ij zbd8?VmR+OmJBB&%4~(YMvFvx!>pQk5^T-HP4$ULe=$dxNc(Z>fTfV@A?|hW@?&rP~ zs5VF6cYN2fJC6i3v(=KGx63k;%TImFmEIQZ#kN3UKz9exIo@uy>6S>ErlXQ5nN7$7 zxyP1m`A-DW^~F7b%yWV+B8{q!GA0X{A;~joy3(D1z^sleasrc0%a*SPy?wgP-0vz_ zr)75cOxNP~;bF!7@06-m|5wDNRbEN|z-hlV zT`Js{E`gOP|I?A5T;Ww6d9JWbNh6;EmKP(p$*yhI-_%jS1brrbZux4zc}!Y4h=dZl|V6{>yY9%tY(mk}6D3V5po)voAq&PvV z*7$*`Ms@lawQov%hMr}0MH(6U@z9;6Gd+;w9M035zy(|!rZQ;dRN2ON)V|Ut1x}Jv zhgu{!8wOv(Wl}N62CXSpHAKpzF-v;yJv|S<^S`J2{paT|B6>obla!+LIAt`-(wLx`W8=ioJBHQP z-y9yxrYC6Zv1ys!Q$gu!?O=i?V0k7DM>;v0r2IH(8cor(p!KHR)!Rl__Bw|5!FIa3 zE1eVR=v})dJ9^8rb))Yc=?%MWTJNOWvn^K&%6axjY3+aRVP9+v%I|rOX|=bw$c#p_ zTp@2Xo6>dnIe_hR8kJ}sDdeY~=}33S5+ru{%{h%0IAWp?2F}gK^BOJD1>m!Br-f!C zZOJnFgm^@Q$S}4t1f##=QmZ>@XK?K)sKq_wV5>y?>hA zv-?g{zBGfIh)mTQj}cwMou@G6V|Zdhu}kqBsTFghR!oUnF&Jva)nlC^!Jh-36`VE@ zC$Q%0KS_cdCR_hbxv$vx3AhS! zM}o6q@C~ZMtAh8NSXD3e)uHl!w5FoVzDE$veRJ1>YKYGY9GIt`$Ww^(OeONHCi4^q za`-&cBY0T-kY`r$+@xDDRj}8Af2L3I3k*?x3W+>xDu{zODUBa`uCJU@G0rnHf`_Ld zr;;N6i4vzG=@A2isvrfgQvSI~a`4dn wEXH|CBY60$2zi!}27hab`YgwJ<`a1yChM~t=P8fi;jc5~Sy4QX@J!LhU!?B>HUIzs diff --git a/target/classes/com/gameplatform/server/model/dto/common/PageResult.class b/target/classes/com/gameplatform/server/model/dto/common/PageResult.class new file mode 100644 index 0000000000000000000000000000000000000000..5a381ba273eda0ba20b33fc7c477241df61dfb09 GIT binary patch literal 1893 zcmbVM+fEZv6y2wtUKuPDTA&pHucauX0-8`HF(xJ@Rf#mb4`nPvrX4b!lIXwq2byR? zW8#A!;71wPKBqT^OBx>L%syvd&RToznZN&j{~@AR^fE>vL2EU)Vbslrb>f)*C)aBj zEz3K#Jfq()oB)pq%~R8G%x2yAaBytZd_fW0w;C{XZO5qCEx#lvv1iwtrr-7~L79Mit6D8>BPQazzUc@OJA$+m+y=7@vt@sQ8Qrp* zw!bYXTv*=6=^NlnQkc>@-J+DBRK;#u@7s+7%d46P4l>dew`Mx~rf2iMd#L$GHXv?P zZonHDv*&AmKIzrnyh*_x^K2o|lG0AO%q;Ukhsu!N1PQvWQ-q>y-O(vQNwyYs8Y7*p zyE=`N4n5vk{*imQYkJVxw>^oDTfm&cI)RHPDMx7uU>(d*stbTE#gr}P7?NIQsY#1@MkLT| z*Ows%sxspMd=K`dCd(#Zj^P={Bj`RoK#F4WFwmeg%Kt#naD%2tY|tYr^c%D+%kJYE z#vPT-8T3LmJ|pWY^wB==XqPujFz_j6?CUX$;Ljx46ln#Vl*}PmEb|%7e}^&5B0D0B z$Mgi4xm*SLJay6H0#ps6pSc1(YlROLd1|DX8KY-4fSHvLv`R)Fb8j@yXyF^2!5PsuKKKFr zP>%mSY14S-^79Ua^9Yu2(gE+q^BxAC)ArW@BB;CU_`tb*C%=rk<@=vque@jZ=Yl#tw*pPt53Hc! z3+k!6PA%{^El`x;$d)|Y3heR*SjNIafm5~3qFb^m+wdIW3q09Iz1-5JpE)%rcrK`8 zVetedwy^gcbZ0a=ai%SU`Y4YuWQv7NG`p#Z;-+$u;g#$ihxeL~-ORgu_h<%@9k}Q@O7W4wTZ%_3Eruj5W*{xvD=iu*EgB^)`XDWK zAuTXqhmaZ90?$EwnXm%3Yv~6KeU-8iJk#MKjpE&CzK_vWdUr*{JfjIb zd`2UloaDKubbocybx_kco{q>uOHYw9iF=|Rsvq3Es7u0iY-B@PcDqfl&FRtxu zASk}!6rEs8P*W;>-bSs|mY{ZnI>->Tnsp22rB$#?c`NwrdIi(By&Kyz3vSNNn|3j9 zf?LzdX5DfzFwd~LU6~7tIXN7cshyW`iJijhhW+Vn$rjXCXLk~KPSvu{ zpk!!S1O~eg7&OSrj-2BI>-MOsA2w)&^+w6^{V%SUJFxsKb{I2goHv?1H!mYh8Z^a< zxF1+S*=L&>gJ$`{oh8>P2L6tPC(26Wd4m?{o}jj@XIp`t+s2cPRB!{QV4E2?YvuQ_ zbBdL`U&^4g^eC5dcOK2VcrZcT8K-C;l?xZRxOI`2H)sEI%X4^LRW=7#jxT5}^S{r( zE~w?w4i1rmzEryIab*&)=~p(BDRnP>j;wvKgDW?8YfnZwiw}O#(KbkZVB+>{VuM z(4EM1BbCtJ&3iarea>-x4%nzNV6|Jz|JdFAH5GsYgnym!c=a7Lw)`9%`m9zc>|D2O zKXJ=m*4}scHa&F>w!)1?Gbr5{8lAfw4U1WfdrL}mj+AH?DbXBKq8Fq@3rLB&ml9Pj zC2ALPfKVkA$GC)*2`M03mVT1>Ce4;H@-~!oAEQy7KcE$?1Y90sY;^ukiLcm->lw!-}2PAo+&zrR5)#P>=4D-h&kjsvON&{1$?qz^?@*1|jGvJ=5@Xsys<8&vSaA z z5j z_UH{%>i;vR^2}&?_UWyz-{(}G*$5u~OGBOo$#bCPSyXxEv^Mn#d6iGb?@G1pS{od_P6)Gvp#!Ww)52G z?jr!k;13QHL$0`_I~+_aDc&88IA;e(Z+>^4Zg~7 zAfQD`L_NzGMLYi5S}hu_2`|z@Rl!iRu0eE6aNB4jQnV?3McA>k%mFjfRrG=CfCmFPGXI0M zT8{)n0To#o#9(XGLIJ(rxV6GXd1kA~fwwg>(c?j$iXq4+Z~;v(U14CgWarE&bzmrl zaTK(kPbXBvQP_I9z{N091&3XNyIzF?hq$QdDU^`2O4IAZb<_P3|6)zoB2keNw_40n zH)l9djtY)R3`qu;dT_Dks|ZDPe@Is`8B@e*mabG`8pl+I6mfwk+oCF_<0g@48lqHV z21gA;nz#@r`I(7XqRv#>Z#L#|+{%z(9NMf08+{Y}x~5_-=80pb0(&*)tGFG0@uz9L ztri+bohUcUWELVI0_J>sIf5!0ut;n%mkq7PVih6y8RDawK5=9q5;j~PvT1w=~t%^E3mS1%X5dpF~D^;w*9X-UBHTt8}1j*SsmDl>o zFqXK8%GD}baF;l1nbLPH?%}wbKwL|!%HO2oUfd^2tp&FG@gTdqdXcY&Q8X%rlIV9yzaj`BW>_^HzT9}YZZ=11|g5HJ&wCV%5 zaWK%^M9aSP^o!!UYifVQw~+T%^0Jc5_a4H4+)iXT)3+lrw;O|jPUP+eCu450#p||o z!FLcNyy*u~ByTnwH>VoWeF$n_3_w3*(;Y+5-$3FeE1ir{C?+Yj5{xDUQj-a`m?$KX zKB{BMaU7XbV7el4b1)7M1($K$fbq1Wm?)M6Jq)ENquVEtZo))K4ckG)Ny6H@aAUEp z3zfMs+-!oI)LUY>O={i)DC)q1PShK=MiX3f!g(<)F~ik7q(?4uTMVU`n(8=G-BvfB z-H8>mx^X8E!x}n=(>WtLur7v2%w%e1C{{X<62lXW<|B_(*E9CRFpB}M)G*aC>u*T0~th|hw7V&1Pr8dWg!oPP)NLwCK4yYBSJ2Bi!A6|BklHoX>7;t zt2DNwi8PZ;982*$ks`I_WRt|V;|07(w^*@@zM}2aB;}~1&*n=+mX0F4OnwSpAy3(1 zJ^p*hTUH_;roS+sx1gM(`U)n&(NhyD3rCyrUdxS5I?O`>vPiwGgbaiUga(8Igg_Q- zFZK~i*~2v?CEoNdbVw#+=rj?HuhCy>3`eDUoZ%?mlWb9Ihe`DGcA?QxsXf8}Qju;X z!HnCjj24pP_l?*O@Zr_qk4Sz@kBfr8Bs5>)0x|VHe!!3TiR=!t{fuAnJKTQ*vml-0 delta 2001 zcmZ9MdwiQ^7017CZtvUVNz$gHB{Z99>)JG3TUM%L-GH%fKu34Mjg89?v-Ty+$dZ!0 zoy;kbp>k1%@$mwPim0I0c^Pa=rvnsWh&Q}n=LJPkQ9u6a=cC|x-;Rs?@#dW8$vNkD z&hMP_+?+X(sXg_=v4??k_-7a&ev^PANXVdhS8h*ksF*9|hc@omWluT=p_PSF!8zB! zpXu8g#-hn2tcalg&wR5}DU|YJUbIVjXQyXAo)D0jB2KeG`|jMe_E@f}m}elC!XEMdT8P%*@rIu>l#+2BBI zn6peq6mQ^-h5)t%TlKVQ>RNDh>TH&qj4D>J(jexAoN)@pp*1%6zf@K5UtwI+Uutam7G&3mn=34 z4Kr1{vSshI9buSD6mMd)?l(8Czf?$d{~DjN*mlaSl-q5GxtuFZu2gL2s+S7(vYT(6 z&>5@P*Uc0v_J(q4!%VSg(4*_|)`fi&uWj>+1O`_t-a<~FFfZy4@6}rs*R!{NNylh} zeZ1Y|9f}*M$rzO@`Jrm@nvq>Y6Xkr~u1MyE>Kc2;Onz-Cx1(rJdE<12#f|!orVXi^ zc$dk$74PBZm%8GO>_oYg*Z*$nvi5PS;x^u^yTfON!z|%;#R2Zn+at?kbv|IC6(8h7 z25GO`FGiyJvB-o~=Ock?5#gLk~V0|ys8!RE3{%=-&R?K zvGSCyyNy2G>#r<0Djco1ot@>WO}UD+-mxoHT@=8B{u}gV;m37<;2zx(Sr(D;SUFkr z7FGwN`}`I^)mvkW{muMbABbnocoUnN`IUYoo^6STI2q$$7^v}5$*znQbJeO{HTj!Tn~YCf;sSG2>>6^r0N;!9^vJWAGO@&0wt9|Z@=udbToEVus(kG}iSjl1 zj#qj374;EOYmf5v`Pz*Am^6v?Y=gz4p$7f^b1e0d6m{7g=eSz-AvzCn{t+(p?k@I` z*sx@dO@0zv2Il3~WWZBK&1CQi+LFPfd3l4&wjJZmNOn6Uj45F{4zY8Nl0PMPvPPrU zA@*$V+3y z8>TkTx0Zgn>a>@y;bjpt?i diff --git a/target/classes/com/gameplatform/server/security/SecurityConfig.class b/target/classes/com/gameplatform/server/security/SecurityConfig.class index c97bdc4e7adf2477af4719e98ec94d9d66323081..b167e2b3a41bea0e10108d0c3ba939b72e7909d7 100644 GIT binary patch delta 1436 zcmZ8h+jA3D9R5yjyV-7=?JX%53%x;;f}yq5LMcL1+Jc2@gN;?ZY}52+nv^63Q6badwz ziq|oxZQ7+{w{4nFXI3WC3rndwxXPxGj&3x|uY_L>V6TpQ5SG7*6SC-;m2*nequ@S) z!-b6&dC1XG(+{tJnlx8t=gf{C`Lp_kzA5zyoMxpF`HwTuADmWjNWfS&&zj++nOX=( zbD5>of{Mcedf1HT*34Ww6Apzm3}Zw=L?9+Nl$cw`QH;ue9fM+A?sLY~F&x+NASUEB zXVQBT4=I=wXfJFu$m=d2y&uMu9B}pQJSE@@o2yGEyaw47^3{D$JYses{AS-v&jLM-Zg~&CWl{d607LPL=;5gM< zr-5f}Z-Ezd3}8RQK5t;Zt-EYRcu`=I^BG>(t1aXuc}5>w*Ns{OFWXL6ET`8iPV&35 z*K72O1r5AeiG5YaAPzG2I|dH2?PIA_A`?lP*=!=K;63?eO-Otof3FES*^>Oz5zstG z;_*b5#%t_gK0ms7eWI(0xIp#z=1sF?w1P9`l?HFQux>g}g;JPQSlZAns9%$DK;vnd z0UxS(>SYJgYDxk%)H`8RylP3UK=})VI>_wpE`dK!5&jakTlDS{c3QNxgbs^#me6I< zU=e$65>U?A29b@JE8^HUI8jkXseEKp`DjJ?_?EJWC+NSG+|NaV z^HDgdd_5ngE;RF%+kRUcBQP;bCl}&89hkF+qLE8bp69o~uaALJTwUaR6%{jC8T6s8&ZYB+K6tY4L|Hv)d7zCE2^bjesw&z zoX+~;sHzTe9G0pky;w-)^69H););>dv&*K;6yOLV#Nb>grZbBS!nDV!jH6=Sk#L1& zMP1@YXG=#n1CQ!Pp{N&f`Di4fp%)J-h;sCyU;N>m6=z(7j)xd7QYF((p<%-?ElWcT z4|6<%N5$W+jOQ4RD;VT>977C2GHe#xidSqZ{T)v-c%%ASIx0~{GqM7iVpzr>5x*&C zBgb%pBOyKQClgaDPF4`@daP14y*R~j8c&N^)gs_$Hr+9WdKk|wnstnUAORbT-s4=A3il7u5*O-y)3MXpg1 z*BU47KIAFbWQW&XthpZgIEj!^;d)mH8Qw0&g|^D;i4D z?)sK{l5Ae9+kEBr1t{|CGV&W7FW`a?7fA4yhPQD`!8;u9;yv+CLs*2hU;WhNQ`sza zB%@oFX;DRDTWz7ybyaUz!4`pE3XbiLWOB_k7~G?~b12UWK4l1tOIn-w)9quQ3+9QG zaD))p=#hY43=JS$v_C_qC{ZS*k-K1bh_PXUcBuwEpJ!?3RRf&GB%K(Nn4*^;oj1r@ z2JP)GLjiWsSVohi{xVu5Z7pNJq^0&UIwW&&2S>KaqnafEmH2&>tr;HjXr=EU+HjPf zUKepaq>~6*t66FYC?C$@JRzATos-c4c#f6?JwudX7SEH5gcu{r=z5@ji}1`{JW$VG ztueT#MzxkxLWk0f`{^8;c#82AQ{)r3!w@Tpy4ydo^w z{iAj14#vn~y58+}iVGZoM%_Aub_@_dME{r*MC&(@z(vdfgoq}zhN!zzE|pvlRxPV# zk0aIJj0LiEz@XiR#Y(&6Pt>II60K!g12h(I(#@u@f=e~d!sQzG60X&_4ZK?8Zr~=~ tC(q+_`@J+Lw+U5@xDRLwHt8&gW{7^+PRu$n9}z7P{g~({_zYiQ|9=;26W;&; diff --git a/target/classes/com/gameplatform/server/service/UserService.class b/target/classes/com/gameplatform/server/service/UserService.class index 8706941703bcd54efcefdadf451eece3de7a27f8..9daad0a4a2bc8b5cdd492a4964cb1333325e9b7c 100644 GIT binary patch literal 7512 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 literal 4414 zcmbtYX?NSk6}>|(uqeo)@tjbIN(G~{)RLKm1f-DYXs zXv&st1P#|~mVD`LNiTX>rYxQ1y2>rS3*$u^@Ck!XClJV{&k>KI2s zV9+#dTj0srOnGI(4(xKJ>sQ5f*2~3sBMdCNWV((SdY*KG(js*mHCvYRn8ZE}*Xh`g zDS-o?G|a&Dc-E7pR#>wwe}itWx{fQLH$1o578O{S{U6GUl|JeSeFLU7d`8Cs+$eBp z+gab-koC|ebhZ8F3+%1Ap;MRjCEM@=%M_TI-GR|VF7oka9k<}1z^EVAeABaP@{}WR ze0IBqy`*;lZ0Cd#6S!5!ZJ1%i0_ii44$`J53K8jz&@ltcbxNl_S+`6hh&jJq#~qku z(lsnQP-${3O=b_F{$}Jchj|U3)o~||2uyVG;*AdL5Z`lqnF^YpID<6*vc-cPoEV#_-cI(oPio4BfW)V)ZC+!`@ z{dhpbaUCbHC{WDQyR&Ps-w;U#^2Ftpy1>44SmPeBlE)I3HGD6C@cHEs-uEcX07Fr3+DPA*<>|S{;w$EQ#wxL5rI7o%c;k< z-gm97ncXg>PvA%&+@1WCi)*aSMVccpUa=f`GHlkQcSiL;fys)?M!RNsmRcv9gTaQy zlDRX}m|mH{p|UE24Yz*U@Hi=0)l{La%OLi()Wg?pEpJC>5y)8#XJKbY7Z|Bp>y8nG z9?d`d$+RBL^e9E|LYa26@dw9Mn@}a0VP{l30!#f*>>6{}Bu+r57W+gul~q}0sbNJI z2Gtbih}ezG0@kO;+_j?*e$t?Ihk8=4Wfh}+w$ZHBjhSxs&)g$$xQFs<6LpH$7vU2JYuH}p)o zY^iE3r0!Wqlz{@%kA_ZQHRYP+Tdd&Yj^hSKFpk<0>_4gA34Jc)|fFW^~$>)P`uJrT!;a5>NW;n#Jv@JIpQRI{|Wn=~un z+XDO30gA_Sxp-lG7~fS>{ChgSuTE)BJf{oz;jY{4h4B&mShd=p==dp~qY~9>qbiZ7_z@?nu-KgUEQk|Z=j6gisMLck@sj{vfkfh-?)a8 zUhZjlTj1vYM|nSpxxgXDC&zCZj#>2`#kW0tAHt*Dt#Y-@r}{lV_aVgG{QJ=U!Bq}t z`0rj`4}k)2W)m2p{8_H1;?r2eIj$%dX%+Yy--j46J_OF=0!5Yj^NITDx%sOY1Fm4= z3a`x(1cMzxX7#=4`g7_GPo`{q@$<3$m zG}S5OH9iHO2j~6??fexK&s{}nn*sMI1Mb^tzyUgYBmdmQuayIl0eY+_F(Ae=xL1Rj zc)6N*IibA#atfrYJm&Hcy*o@s52ZYt=y*1PIwTb*p4B^^HMn`A!|67(V|~zyM4Ka8 zF#|1w$Mr%^)pNq**~GUg#pC?Hu#m&c&<5Ya;J_6;s2m)Kl4UqzDGfE%acn9H*+rfn zLT=&#fla;+Qp6@0TS)@8lz@#TU=QbTZoW&R`X2<~R%Y34DVN4NIAaNcY2};`iSqjs z<)ex6lR0!%$L6OqZnUFzG%>%UmX<$5Lvrxo^QmM5K12Rp;OZq(vV}|dM)dYAdB k_I`w)MQ=aHFYxTBNny7k!UoT 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/gameplatform/server/service/auth/AuthService.class b/target/classes/com/gameplatform/server/service/auth/AuthService.class index 225381c15a2695981483ff5dcbe054de5f8e9500..fddf8917084e3fed0d59a0eb5f4aad6b980cf0e6 100644 GIT binary patch literal 9144 zcmc&)349#Yeg6L1m1eaX+hToS0XB;fMyJ>K03+E3S(bx@eBc!(f*g!?N7C54JMzq| zWraXWLn&!VN?V!+nzm`vVwxT%1Z3HewCNFAO4}s8uQWXjr1$yj9rt^)hep!ws+cDA z&v@RxH}8Lb|Kq*k)vsUp9DqIYkcK+J)|8!1Oc+^nDr0!#wv$b`rgO@4{D+k?6Gq;f zO!V=eBE4U(0 zntiF1ozHm(jj1Wq5%dgKW1RKhNEn6p6L&A(OMBgj+L7j zcc>0mPf&+c-m$!yM9P_&^6W%uTjI#V{UjMZKJ67X6m(Y=u1s;L{5m&BcBe8{&hqxs z3~lYl1mS*)6~z@;tsy43a-9-tXZL6x?vZjA~R<6pol2zM} zMG?XV9amwcQukUN8X{_RosLFC)#!R1P0(p>Z_;uF+iEcIvAYD!^j-5o)0?!@M+}7; z&vZzqo=~=Of{_}QqJJ}qG%@AJ2fb(Ij+!U)rt8sPj_Lb1k+K~#F_j<7Snec4>Y$yo z$+0nMP2>zO@6c6`e*;+Tu4;yCMXB8>JLj6cdwV13614cr#|_Ujvr}GNg>H_P+4I1I zQEb6h4GF>asO1``VV@y@rQ_Xr5Azi(W@bk4=>G>a%Yq*$>g}t0zYYUq0&Sda1#5maZOfaM(>8>(@)dK& z-PN_MoZkxJG*rwqKIF?nFYwWXj!EUCCgr1Ko{(_e7{W*^2cFQ8QHzagalmnGb{!$d zJSo_DS>a8$xt`$=2QnmBf6B;MX~Q#1ok?FVy)SQN(t;Dq>C3#OdYlRkQ*R&}7V~3m zI}1Mf&Et02bt;NHrZt=r?5bUes#`|KX;qC@u^N>ueuv>sM({qto@&16i5G1g&swg_ zQWdwIc+QTO+RFGONvP`eejN|uA$mA%j^)`EudPt1+K*}Y7Qv?ZiZqzXm=i{(&zWG> z$aw>&RZ3zaiQroakT;%u_VvfkU3}uhuRr$Di)SBw;}Z{m?a8O!JbN~Z58x5iB|W52 z`lya?$7AGd77)54$a!Sav8VmoQ5yvjdo%h`ipTL04If@uIsG!Nvzs$y6$5VKkSte_EEI2IM-9df( zCk-d5nzCHVtP~2A?BmS+M~3?b5A`Tje@Mp<;}eW=Rcd@Kl}>{ddKC5ckLvg&evAaj z!pM;M0ymes4>Ea1&|4i-W%T51FYYT6=Q+%8yy8~c@4NDNR>x1^Q}inVJIJIEThKTS z+r_r&rxfsZMesAU$-tq$eZvF$Rj@p#Y$PI*m}B3{?F)mLAkKGAphV*j_qo{ z;hGW5@?cn9;!+f(Emxr_T@X{l9J}--a8~@x0G2N>>fU_e8HMF@&%g1^!^CwI=kSP< z^RqfW7i-bHjjYh{DD7HaBOI}%`T|A(ruSuW4{Gl$rGEB1e^<132&O0wS{T>2{hOv9fFI;-W^3MV!l ze~!PP;PjN~(B~ue36qVQ6%@Cs9V~E~x{I!ls)4I~{+Ie^5E2Ft4I>bx>ztA9V=1 zh=0=Y&p{gM5LC}22LEUg^}@gD_;>sV+jSBfI6Y-KraMR*hTDb|f&KU|9siB5bK-d3 zW#@2HkWbn13%cq>O)q;EMsLmQ7yk%Xy>jvt)!-P@N2XO4TIwbR(i7}y?xm2b9J1q8 zM@VHYhJaVVM3{Q9CA|49HcrKZDlx{Sk~%?H`*$0f@Csn%eB>#ElWoSxj-`#(t%8%w z^)%Ja@wKs3(?-#9%5ycjf{>V(ue{PEt7WYwYiji|%Up)(vQDm~_Tv`&#hLko^`Rg# z%Gv2{=u-=&8Qb7Vv{1FW;!N=@h^(_+ag~-i@Cho!a;yk$VpWyv1#K0KdS4&}N)gBd zWyxGjt{?fPn``08cu@x6Esor%OIxYVmfGJaL^^bwgflPwc7c6)(hn`;?ZpvS3~lA< zExa2j_{%LE!GiwnihH(w;-GR@RGMTftG*DDtC=7Jjwtm*vYi)3vO{od17W5rAEY(e^d|AA5>x#3F_n{e3yI1yTvU@>F zDO1#CuX1d}vkO75;CnmcLBUs;f!9_PgKd1$&O0gd00m$}7`X1=qVg7R1&{LXo|j|C zEZ1Vo*Oz1T8R~Gt-l(netuXIWP1|D>C6a}EF?Ij8&$d0+bBw9Nt*aZALAg^?C*Z(A z$jY5!ok$G(37jt)Q9Pm(G}O>o5_MpQ>;G2-sr5 zMiu(O*Z=p61(vn<27y|ntS;t~mS^^^Y7k!5ExZ*ig0oo;s}Mb^%L-Y!N|U?Pl}h_E zSges$n`NZRiRD$xhWSVWJ^a%Ud z!5j|*{%0(cTE36px0YyGDOfdmzhGnSSJ{UaA{*C%{MbW>c?-f%VjRWPw<7<^FGc>7 z---BarR21svR}hK)>=|GDmuK<$o_b2Lsij_Rn8Pn#z%K)Z zUz~X@_G>Nml;J6?iv0$Ee`yZCbq0Fu4>FJq<76;^;ZN(WA9!EtL69KDg(v zS~Nv+7JusxUYo@~wrFecFSGd97HtmysXQ3+;e3kV1GW)8+p(4xl$-b+t&JWzfLn=$ z9^8*!!g@D7w1+OajaLJ=1V@*MboIAiMCu5FB(p_G!jv^r9-YLO zi*s%4{p_alVq+*hn{apO;u2=7X+~feJyTD|0dY{Cv?IRb`noir%Bl zREo;J&R4LO;9V_Ob@;Td3E>R3_%qjPpG9aiq@a=<4fAm}IjXSurQ~P>A1^1*%XJ}M z5SGAF$XuH#>y6At!c_5h6WS;v&5yQ<)vk`-I>q;N`3 PbHD0@X5;~R5H0@$HxP;Q literal 9150 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 QBlHTosE8|P - - - - - - - - - - - - id, username, email, created_at - - - - - - - - INSERT INTO users (username, email, created_at) - VALUES (#{username}, #{email}, NOW()) - - - - DELETE FROM users WHERE id = #{id} - - - diff --git a/target/classes/mapper/account/UserAccountMapper.xml b/target/classes/mapper/account/UserAccountMapper.xml index 3736788..578d906 100644 --- a/target/classes/mapper/account/UserAccountMapper.xml +++ b/target/classes/mapper/account/UserAccountMapper.xml @@ -28,4 +28,61 @@ WHERE username = #{username} LIMIT 1 + + + + + INSERT INTO user_account (user_type, username, display_name, password_hash, role, status, points_balance) + VALUES (#{userType}, #{username}, #{displayName}, #{passwordHash}, #{role}, #{status}, #{pointsBalance}) + + + + UPDATE user_account + + display_name = #{displayName}, + role = #{role}, + status = #{status}, + + WHERE id = #{id} + + + + UPDATE user_account SET status = #{status} WHERE id = #{id} + + + + UPDATE user_account SET password_hash = #{passwordHash} WHERE id = #{id} + + + + +