“mitao”
2026-04-24 b33096b92524e141ba4a553b8d86b521bed0ad76
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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.AppSettingsPhoneBindRequest;
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<AppSettingsProfileVO> getProfile() {
        return ApiResponse.ok(appSettingsService.getProfile());
    }
 
    /**
     * 更新当前登录用户资料。
     */
    @PutMapping("/profile")
    public ApiResponse<AppSettingsProfileVO> updateProfile(@Valid @RequestBody AppSettingsProfileUpdateRequest request) {
        return ApiResponse.ok(appSettingsService.updateProfile(request));
    }
 
    /**
     * 上传当前登录用户头像。
     */
    @PostMapping("/upload/avatar")
    public ApiResponse<UploadController.UploadResult> uploadAvatar(@RequestParam("file") MultipartFile file) throws IOException {
        return ApiResponse.ok(appSettingsService.uploadAvatar(file));
    }
 
    /**
     * 发送修改手机号验证码。
     */
    @PostMapping("/phone/code")
    public ApiResponse<Void> sendPhoneCode(@Valid @RequestBody AppSettingsPhoneCodeRequest request) {
        appSettingsService.sendPhoneChangeCode(request);
        return ApiResponse.ok(null);
    }
 
    /**
     * 修改当前登录用户手机号。
     */
    @PutMapping("/phone")
    public ApiResponse<AppSettingsProfileVO> updatePhone(@Valid @RequestBody AppSettingsPhoneUpdateRequest request) {
        return ApiResponse.ok(appSettingsService.updatePhone(request));
    }
 
    /**
     * 首次绑定当前登录用户手机号。
     */
    @PutMapping("/phone/bind")
    public ApiResponse<AppSettingsProfileVO> bindPhone(@Valid @RequestBody AppSettingsPhoneBindRequest request) {
        return ApiResponse.ok(appSettingsService.bindPhone(request));
    }
 
    /**
     * 修改当前登录用户密码。
     */
    @PutMapping("/password")
    public ApiResponse<Void> updatePassword(@Valid @RequestBody AppSettingsPasswordUpdateRequest request) {
        appSettingsService.updatePassword(request);
        return ApiResponse.ok(null);
    }
 
    /**
     * 绑定或换绑微信。
     */
    @PostMapping("/wechat/bind")
    public ApiResponse<AppSettingsWechatBindingVO> bindWechat(@RequestBody AppWechatLoginRequest request) {
        return ApiResponse.ok(appSettingsService.bindWechat(request));
    }
 
    /**
     * 获取当前登录用户通知设置。
     */
    @GetMapping("/notifications")
    public ApiResponse<AppSettingsNotificationVO> getNotifications() {
        return ApiResponse.ok(appSettingsService.getNotificationSettings());
    }
 
    /**
     * 保存当前登录用户通知设置。
     */
    @PutMapping("/notifications")
    public ApiResponse<AppSettingsNotificationVO> updateNotifications(@Valid @RequestBody AppSettingsNotificationUpdateRequest request) {
        return ApiResponse.ok(appSettingsService.updateNotificationSettings(request));
    }
 
    /**
     * 注销当前账号。
     */
    @DeleteMapping("/account")
    public ApiResponse<Void> cancelAccount() {
        appSettingsService.cancelAccount();
        return ApiResponse.ok(null);
    }
}