将查询用户个人信息与更新用户信息迁移至gym-member模块
This commit is contained in:
+30
@@ -0,0 +1,30 @@
|
|||||||
|
package cn.novalon.gym.manage.member.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新会员信息Dto
|
||||||
|
*
|
||||||
|
* @author 付嘉
|
||||||
|
* @date 2026-05-10
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class UpdateMemberInfoDto {
|
||||||
|
|
||||||
|
// 昵称
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
// 性别
|
||||||
|
private Integer gender;
|
||||||
|
|
||||||
|
// 生日
|
||||||
|
private Date birthday;
|
||||||
|
|
||||||
|
// 头像
|
||||||
|
private String avatar;
|
||||||
|
|
||||||
|
// 地址
|
||||||
|
private String address;
|
||||||
|
}
|
||||||
+30
@@ -1,6 +1,7 @@
|
|||||||
package cn.novalon.gym.manage.member.handler;
|
package cn.novalon.gym.manage.member.handler;
|
||||||
|
|
||||||
import cn.novalon.gym.manage.member.dto.AdminUpdatePhoneDto;
|
import cn.novalon.gym.manage.member.dto.AdminUpdatePhoneDto;
|
||||||
|
import cn.novalon.gym.manage.member.dto.UpdateMemberInfoDto;
|
||||||
import cn.novalon.gym.manage.member.service.MemberService;
|
import cn.novalon.gym.manage.member.service.MemberService;
|
||||||
import cn.novalon.gym.manage.member.service.WechatAuthService;
|
import cn.novalon.gym.manage.member.service.WechatAuthService;
|
||||||
import cn.novalon.gym.manage.member.service.WechatOfficialService;
|
import cn.novalon.gym.manage.member.service.WechatOfficialService;
|
||||||
@@ -52,6 +53,35 @@ public class MemberHandler {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新会员信息
|
||||||
|
*
|
||||||
|
* PUT /api/member/info
|
||||||
|
* Header: X-Member-Id: 123
|
||||||
|
* Body: {
|
||||||
|
* "nickname": "新昵称",
|
||||||
|
* "gender": 1,
|
||||||
|
* "birthday": "2000-01-01",
|
||||||
|
* "avatar": "https://example.com/avatar.jpg",
|
||||||
|
* "address": "北京市朝阳区"
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
public Mono<ServerResponse> updateMemberInfo(ServerRequest request) {
|
||||||
|
|
||||||
|
String memberIdStr = request.headers().firstHeader("X-Member-Id");
|
||||||
|
long memberId = NumberUtils.toLong(memberIdStr, 0L);
|
||||||
|
|
||||||
|
if (memberId <= 0) throw new IllegalArgumentException("更新会员信息失败: memberId 无效");
|
||||||
|
|
||||||
|
log.info("更新会员信息, memberId: {}", memberId);
|
||||||
|
|
||||||
|
return request.bodyToMono(UpdateMemberInfoDto.class)
|
||||||
|
.flatMap(updateDto -> memberService.updateMemberInfo(memberId, updateDto))
|
||||||
|
.flatMap(info -> ServerResponse.ok()
|
||||||
|
.contentType(MediaType.APPLICATION_JSON)
|
||||||
|
.bodyValue(info));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 绑定手机号(微信小程序)
|
* 绑定手机号(微信小程序)
|
||||||
*
|
*
|
||||||
|
|||||||
+10
@@ -1,5 +1,6 @@
|
|||||||
package cn.novalon.gym.manage.member.service;
|
package cn.novalon.gym.manage.member.service;
|
||||||
|
|
||||||
|
import cn.novalon.gym.manage.member.dto.UpdateMemberInfoDto;
|
||||||
import cn.novalon.gym.manage.member.vo.MemberInfoVO;
|
import cn.novalon.gym.manage.member.vo.MemberInfoVO;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
@@ -19,6 +20,15 @@ public interface MemberService {
|
|||||||
*/
|
*/
|
||||||
Mono<MemberInfoVO> getMemberInfo(Long memberId);
|
Mono<MemberInfoVO> getMemberInfo(Long memberId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员更新个人信息
|
||||||
|
*
|
||||||
|
* @param memberId 会员ID
|
||||||
|
* @param updateDto 更新信息DTO
|
||||||
|
* @return 更新后的会员信息
|
||||||
|
*/
|
||||||
|
Mono<MemberInfoVO> updateMemberInfo(Long memberId, UpdateMemberInfoDto updateDto);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 管理端更新会员手机号
|
* 管理端更新会员手机号
|
||||||
*
|
*
|
||||||
|
|||||||
+35
@@ -1,5 +1,6 @@
|
|||||||
package cn.novalon.gym.manage.member.service.impl;
|
package cn.novalon.gym.manage.member.service.impl;
|
||||||
|
|
||||||
|
import cn.novalon.gym.manage.member.dto.UpdateMemberInfoDto;
|
||||||
import cn.novalon.gym.manage.member.vo.MemberInfoVO;
|
import cn.novalon.gym.manage.member.vo.MemberInfoVO;
|
||||||
import cn.novalon.gym.manage.member.entity.Member;
|
import cn.novalon.gym.manage.member.entity.Member;
|
||||||
import cn.novalon.gym.manage.member.repository.MemberRepository;
|
import cn.novalon.gym.manage.member.repository.MemberRepository;
|
||||||
@@ -40,6 +41,40 @@ public class MemberServiceImpl implements MemberService {
|
|||||||
.map(this::buildMemberInfoResponse);
|
.map(this::buildMemberInfoResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<MemberInfoVO> updateMemberInfo(Long memberId, UpdateMemberInfoDto updateDto) {
|
||||||
|
log.info("会员更新个人信息, memberId: {}", memberId);
|
||||||
|
|
||||||
|
return memberRepository.findById(memberId)
|
||||||
|
.switchIfEmpty(Mono.defer(() -> {
|
||||||
|
log.error("会员不存在: memberId={}", memberId);
|
||||||
|
return Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND, "会员不存在"));
|
||||||
|
}))
|
||||||
|
.flatMap(member -> {
|
||||||
|
if (updateDto.getNickname() != null) {
|
||||||
|
member.setNickname(updateDto.getNickname());
|
||||||
|
}
|
||||||
|
if (updateDto.getGender() != null) {
|
||||||
|
member.setGender(updateDto.getGender());
|
||||||
|
}
|
||||||
|
if (updateDto.getBirthday() != null) {
|
||||||
|
member.setBirthday(updateDto.getBirthday());
|
||||||
|
}
|
||||||
|
if (updateDto.getAvatar() != null) {
|
||||||
|
member.setAvatar(updateDto.getAvatar());
|
||||||
|
}
|
||||||
|
if (updateDto.getAddress() != null) {
|
||||||
|
member.setAddress(updateDto.getAddress());
|
||||||
|
}
|
||||||
|
|
||||||
|
return memberRepository.save(member);
|
||||||
|
})
|
||||||
|
.map(savedMember -> {
|
||||||
|
log.info("会员信息更新成功, memberId: {}", savedMember.getId());
|
||||||
|
return buildMemberInfoResponse(savedMember);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// 会员信息响应
|
// 会员信息响应
|
||||||
private MemberInfoVO buildMemberInfoResponse(Member member) {
|
private MemberInfoVO buildMemberInfoResponse(Member member) {
|
||||||
String phone = member.getPhone();
|
String phone = member.getPhone();
|
||||||
|
|||||||
+1
@@ -204,6 +204,7 @@ public class SystemRouter {
|
|||||||
|
|
||||||
// ========== 会员模块路由 - 会员信息 ==========
|
// ========== 会员模块路由 - 会员信息 ==========
|
||||||
.GET("/api/member/info", memberHandler::getMemberInfo)
|
.GET("/api/member/info", memberHandler::getMemberInfo)
|
||||||
|
.PUT("/api/member/info", memberHandler::updateMemberInfo)
|
||||||
.POST("/api/member/phone/bind", memberHandler::bindPhone)
|
.POST("/api/member/phone/bind", memberHandler::bindPhone)
|
||||||
.GET("/api/member/subscribe/status", memberHandler::checkSubscribeStatus)
|
.GET("/api/member/subscribe/status", memberHandler::checkSubscribeStatus)
|
||||||
|
|
||||||
|
|||||||
@@ -12,11 +12,15 @@ spring:
|
|||||||
max-life-time: 30m
|
max-life-time: 30m
|
||||||
acquire-timeout: 3s
|
acquire-timeout: 3s
|
||||||
flyway:
|
flyway:
|
||||||
|
url: jdbc:postgresql://localhost:55432/manage_system
|
||||||
|
user: novalon
|
||||||
|
password: novalon123
|
||||||
enabled: true
|
enabled: true
|
||||||
locations: classpath:db/migration
|
locations: classpath:db/migration
|
||||||
baseline-on-migrate: true
|
baseline-on-migrate: true
|
||||||
validate-on-migrate: true
|
validate-on-migrate: true
|
||||||
|
|
||||||
|
|
||||||
jwt:
|
jwt:
|
||||||
secret: novalon-gym-manage-jwt-secret-key-for-development-only-2026
|
secret: novalon-gym-manage-jwt-secret-key-for-development-only-2026
|
||||||
expiration: 86400000
|
expiration: 86400000
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ spring:
|
|||||||
- org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration
|
- org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration
|
||||||
r2dbc:
|
r2dbc:
|
||||||
url: r2dbc:postgresql://${DB_HOST:localhost}:${DB_PORT:55432}/${DB_NAME:manage_system}
|
url: r2dbc:postgresql://${DB_HOST:localhost}:${DB_PORT:55432}/${DB_NAME:manage_system}
|
||||||
username: ${DB_USERNAME:postgres}
|
username: ${DB_USERNAME:novalon}
|
||||||
password: ${DB_PASSWORD:postgres}
|
password: ${DB_PASSWORD:novalon123}
|
||||||
pool:
|
pool:
|
||||||
initial-size: 10
|
initial-size: 10
|
||||||
max-size: 50
|
max-size: 50
|
||||||
@@ -25,8 +25,8 @@ spring:
|
|||||||
acquire-timeout: 5s
|
acquire-timeout: 5s
|
||||||
datasource:
|
datasource:
|
||||||
url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:55432}/${DB_NAME:manage_system}
|
url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:55432}/${DB_NAME:manage_system}
|
||||||
username: ${DB_USERNAME:postgres}
|
username: ${DB_USERNAME:novalon}
|
||||||
password: ${DB_PASSWORD:postgres}
|
password: ${DB_PASSWORD:novalon123}
|
||||||
driver-class-name: org.postgresql.Driver
|
driver-class-name: org.postgresql.Driver
|
||||||
flyway:
|
flyway:
|
||||||
enabled: true
|
enabled: true
|
||||||
@@ -38,6 +38,8 @@ spring:
|
|||||||
user:
|
user:
|
||||||
name: disabled
|
name: disabled
|
||||||
password: disabled
|
password: disabled
|
||||||
|
profiles:
|
||||||
|
active: dev
|
||||||
|
|
||||||
management:
|
management:
|
||||||
endpoints:
|
endpoints:
|
||||||
|
|||||||
Reference in New Issue
Block a user