package com.tcm.training.admin.app.settings.controller; import com.tcm.training.admin.app.auth.dto.AppWechatLoginRequest; import com.tcm.training.admin.app.settings.dto.AppSettingsNotificationUpdateRequest; import com.tcm.training.admin.app.settings.dto.AppSettingsPasswordUpdateRequest; import com.tcm.training.admin.app.settings.dto.AppSettingsPhoneCodeRequest; import com.tcm.training.admin.app.settings.dto.AppSettingsPhoneUpdateRequest; import com.tcm.training.admin.app.settings.dto.AppSettingsProfileUpdateRequest; import com.tcm.training.admin.app.settings.service.AppSettingsService; import com.tcm.training.admin.app.settings.vo.AppSettingsNotificationVO; import com.tcm.training.admin.app.settings.vo.AppSettingsProfileVO; import com.tcm.training.admin.app.settings.vo.AppSettingsWechatBindingVO; import com.tcm.training.admin.common.ApiResponse; import com.tcm.training.admin.upload.UploadController; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import javax.validation.Valid; import java.io.IOException; /** * APP 设置页接口。 */ @Validated @RestController @RequestMapping({"/api/app/settings", "/api/v1/app/settings"}) public class AppSettingsController { private final AppSettingsService appSettingsService; /** * 注入 APP 设置页服务。 */ public AppSettingsController(AppSettingsService appSettingsService) { this.appSettingsService = appSettingsService; } /** * 获取当前登录用户资料。 */ @GetMapping("/profile") public ApiResponse getProfile() { return ApiResponse.ok(appSettingsService.getProfile()); } /** * 更新当前登录用户资料。 */ @PutMapping("/profile") public ApiResponse updateProfile(@Valid @RequestBody AppSettingsProfileUpdateRequest request) { return ApiResponse.ok(appSettingsService.updateProfile(request)); } /** * 上传当前登录用户头像。 */ @PostMapping("/upload/avatar") public ApiResponse uploadAvatar(@RequestParam("file") MultipartFile file) throws IOException { return ApiResponse.ok(appSettingsService.uploadAvatar(file)); } /** * 发送修改手机号验证码。 */ @PostMapping("/phone/code") public ApiResponse sendPhoneCode(@Valid @RequestBody AppSettingsPhoneCodeRequest request) { appSettingsService.sendPhoneChangeCode(request); return ApiResponse.ok(null); } /** * 修改当前登录用户手机号。 */ @PutMapping("/phone") public ApiResponse updatePhone(@Valid @RequestBody AppSettingsPhoneUpdateRequest request) { return ApiResponse.ok(appSettingsService.updatePhone(request)); } /** * 修改当前登录用户密码。 */ @PutMapping("/password") public ApiResponse updatePassword(@Valid @RequestBody AppSettingsPasswordUpdateRequest request) { appSettingsService.updatePassword(request); return ApiResponse.ok(null); } /** * 绑定或换绑微信。 */ @PostMapping("/wechat/bind") public ApiResponse bindWechat(@RequestBody AppWechatLoginRequest request) { return ApiResponse.ok(appSettingsService.bindWechat(request)); } /** * 获取当前登录用户通知设置。 */ @GetMapping("/notifications") public ApiResponse getNotifications() { return ApiResponse.ok(appSettingsService.getNotificationSettings()); } /** * 保存当前登录用户通知设置。 */ @PutMapping("/notifications") public ApiResponse updateNotifications(@Valid @RequestBody AppSettingsNotificationUpdateRequest request) { return ApiResponse.ok(appSettingsService.updateNotificationSettings(request)); } /** * 注销当前账号。 */ @DeleteMapping("/account") public ApiResponse cancelAccount() { appSettingsService.cancelAccount(); return ApiResponse.ok(null); } }