package controller; import model.User; import utils.FileUtil; import utils.ValidationUtil; import utils.EmailUtil; public class UserController extends BaseController implements UserService { @Override public String registerUser(String username, String email) { try { validateStringLength(username, "用户名", 2, 20); validateStringNotEmpty(email, "邮箱"); if (!ValidationUtil.isValidEmail(email)) { return "邮箱格式不正确"; } if (FileUtil.usernameExists(username)) { return "用户名已被使用"; } if (FileUtil.emailExists(email)) { return "该邮箱已被注册"; } String registrationCode = EmailUtil.generateRegistrationCode(); User user = new User(username, email, registrationCode); boolean sendSuccess = EmailUtil.sendRegistrationCode(email, username, registrationCode); if (sendSuccess) { FileUtil.saveUser(user); logInfo("用户注册成功: " + username); return "注册码已发送到您的邮箱,请查收!"; } else { return "邮件发送失败,请检查邮箱地址或稍后重试"; } } catch (IllegalArgumentException e) { return e.getMessage(); } catch (Exception e) { logError("用户注册异常: " + e.getMessage()); return "系统错误,请稍后重试"; } } @Override public String completeRegistration(String username, String code, String password, String confirmPassword) { try { validateStringNotEmpty(username, "用户名"); validateStringNotEmpty(code, "注册码"); validateStringNotEmpty(password, "密码"); validateStringNotEmpty(confirmPassword, "确认密码"); User user = FileUtil.loadUserByUsername(username); if (user == null) { return "用户不存在或注册码未发送"; } if (!user.getRegistrationCode().equals(code)) { return "注册码不正确"; } if (!password.equals(confirmPassword)) { return "两次输入的密码不一致"; } if (!ValidationUtil.isValidPassword(password)) { return "密码必须为6-10位,且包含大小写字母和数字"; } user.setPassword(password); user.setRegistered(true); FileUtil.saveUser(user); logInfo("用户完成注册: " + username); return "注册成功!"; } catch (Exception e) { logError("完成注册异常: " + e.getMessage()); return "系统错误,请稍后重试"; } } @Override public User login(String loginId, String password) { try { validateStringNotEmpty(loginId, "登录ID"); validateStringNotEmpty(password, "密码"); User user; if (loginId.contains("@")) { user = FileUtil.loadUserByEmail(loginId); } else { user = FileUtil.loadUserByUsername(loginId); } if (user == null) { logInfo("登录失败: 用户不存在 - " + loginId); return null; } if (user.getPassword() == null || !user.getPassword().equals(password)) { logInfo("登录失败: 密码错误 - " + loginId); return null; } logInfo("登录成功: " + user.getUsername()); return user; } catch (Exception e) { logError("登录异常: " + e.getMessage()); return null; } } @Override public String changePassword(User user, String oldPassword, String newPassword, String confirmPassword) { try { validateNotNull(user, "用户"); validateStringNotEmpty(oldPassword, "原密码"); validateStringNotEmpty(newPassword, "新密码"); validateStringNotEmpty(confirmPassword, "确认密码"); if (!user.getPassword().equals(oldPassword)) { return "原密码不正确"; } if (!newPassword.equals(confirmPassword)) { return "两次输入的新密码不一致"; } if (!ValidationUtil.isValidPassword(newPassword)) { return "新密码必须为6-10位,且包含大小写字母和数字"; } user.setPassword(newPassword); FileUtil.saveUser(user); logInfo("密码修改成功: " + user.getUsername()); return "密码修改成功"; } catch (Exception e) { logError("修改密码异常: " + e.getMessage()); return "系统错误,请稍后重试"; } } @Override public void cleanupUnregisteredUsers() { try { FileUtil.cleanupUnregisteredUsers(); logInfo("执行未注册用户清理"); } catch (Exception e) { logError("清理未注册用户异常: " + e.getMessage()); } } }