package com.tourguide.api.guide;
|
|
import com.tourguide.common.api.ApiResponse;
|
import com.tourguide.modules.user.dto.GuideProfileUpdateRequest;
|
import com.tourguide.modules.user.dto.GuideNewPhoneCodeRequest;
|
import com.tourguide.modules.user.dto.GuidePhoneChangeRequest;
|
import com.tourguide.modules.user.dto.GuidePhoneChangeTokenResponse;
|
import com.tourguide.modules.user.dto.GuidePhoneCodeRequest;
|
import com.tourguide.modules.user.dto.GuidePhoneVerifyRequest;
|
import com.tourguide.modules.user.dto.GuideUserResponse;
|
import com.tourguide.modules.user.dto.SmsCodeResponse;
|
import com.tourguide.modules.user.service.GuidePhoneChangeService;
|
import com.tourguide.modules.user.service.GuideUserService;
|
import com.tourguide.modules.user.service.MiniAvatarStorageService;
|
import com.tourguide.security.AppUserPrincipal;
|
import org.springframework.http.MediaType;
|
import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.multipart.MultipartFile;
|
import javax.validation.Valid;
|
|
/**
|
* 导游端个人资料接口。
|
* 导游只能读取和修改本人允许维护的资料,账号状态及运营配置仍由管理后台控制。
|
*/
|
@RestController
|
@RequestMapping("/api/guide/profile")
|
public class GuideProfileController {
|
private final GuideUserService userService;
|
private final MiniAvatarStorageService avatarStorageService;
|
private final GuidePhoneChangeService phoneChangeService;
|
|
public GuideProfileController(GuideUserService userService,
|
MiniAvatarStorageService avatarStorageService,
|
GuidePhoneChangeService phoneChangeService) {
|
this.userService = userService;
|
this.avatarStorageService = avatarStorageService;
|
this.phoneChangeService = phoneChangeService;
|
}
|
|
/**
|
* 查询当前已登录且处于启用状态的导游个人资料。
|
*
|
* @param principal 安全过滤器解析出的当前导游身份
|
* @return 当前导游基础资料
|
*/
|
@GetMapping
|
public ApiResponse<GuideUserResponse> get(@AuthenticationPrincipal AppUserPrincipal principal) {
|
return ApiResponse.success(GuideUserResponse.from(userService.findEnabledById(principal.getUserId())));
|
}
|
|
/**
|
* 更新当前导游本人可维护的个人资料,不允许通过该接口修改账号状态。
|
*
|
* @param principal 安全过滤器解析出的当前导游身份
|
* @param request 导游个人资料更新参数
|
* @return 更新后的导游基础资料
|
*/
|
@PutMapping
|
public ApiResponse<GuideUserResponse> update(@AuthenticationPrincipal AppUserPrincipal principal,
|
@Valid @RequestBody GuideProfileUpdateRequest request) {
|
return ApiResponse.success(userService.updateProfile(principal.getUserId(), request));
|
}
|
|
@PostMapping(value = "/avatar", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
public ApiResponse<GuideUserResponse> updateAvatar(@AuthenticationPrincipal AppUserPrincipal principal,
|
@RequestPart("file") MultipartFile file) {
|
String avatar = avatarStorageService.store(file);
|
return ApiResponse.success(userService.updateAvatar(principal.getUserId(), avatar));
|
}
|
|
@PostMapping("/phone-change/old-code")
|
public ApiResponse<SmsCodeResponse> sendOldPhoneCode(@AuthenticationPrincipal AppUserPrincipal principal,
|
@Valid @RequestBody GuidePhoneCodeRequest request) {
|
return ApiResponse.success(phoneChangeService.sendOldPhoneCode(principal.getUserId(), request.getPhone()));
|
}
|
|
@PostMapping("/phone-change/verify-old")
|
public ApiResponse<GuidePhoneChangeTokenResponse> verifyOldPhone(
|
@AuthenticationPrincipal AppUserPrincipal principal,
|
@Valid @RequestBody GuidePhoneVerifyRequest request) {
|
return ApiResponse.success(phoneChangeService.verifyOldPhone(
|
principal.getUserId(), request.getPhone(), request.getCode()));
|
}
|
|
@PostMapping("/phone-change/new-code")
|
public ApiResponse<SmsCodeResponse> sendNewPhoneCode(@AuthenticationPrincipal AppUserPrincipal principal,
|
@Valid @RequestBody GuideNewPhoneCodeRequest request) {
|
return ApiResponse.success(phoneChangeService.sendNewPhoneCode(
|
principal.getUserId(), request.getChangeToken(), request.getNewPhone()));
|
}
|
|
@PutMapping("/phone")
|
public ApiResponse<GuideUserResponse> changePhone(@AuthenticationPrincipal AppUserPrincipal principal,
|
@Valid @RequestBody GuidePhoneChangeRequest request) {
|
return ApiResponse.success(phoneChangeService.changePhone(
|
principal.getUserId(), request.getChangeToken(), request.getNewPhone(), request.getCode()));
|
}
|
}
|