• 【探花交友】保存用户信息、上传用户头像、用户信息管理


    文章目录

    1.3、保存用户信息

    1.4、上传用户头像

    2、用户信息管理

    2.1、查询用户资料

    2.2、更新用户资料

    1.3、保存用户信息

    1.3.1、接口文档

     

    YAPI接口地址:http://192.168.136.160:3000/project/19/interface/api/88

    1.3.2、需求分析

    数据库表

    tb_user_info(用户基本资料表)

     

    • 用户表和用户信息表是一对一的关系,两者采用主键关联的形式配置

    • 主键关联:用户表主键和用户资料表主键要保持一致(如:用户表id=1,此用户的资料表id=1)

    执行流程

    1. 手机端发送请求到消费者

    2. 消费者构造数据,调用提供者

    3. 消费者完成业务处理,操作数据库

     

    1.3.3、代码实现

    UserInfo实体类

    1. @Data
    2. @NoArgsConstructor
    3. @AllArgsConstructor
    4. public class UserInfo implements Serializable {
    5.    /**
    6.     * 由于userinfo表和user表之间是一对一关系
    7.     *   userInfo的id来源于user表的id
    8.     */
    9.    @TableId(type= IdType.INPUT)
    10.    private Long id; //用户id
    11.    private String nickname; //昵称
    12.    private String avatar; //用户头像
    13.    private String birthday; //生日
    14.    private String gender; //性别
    15.    private Integer age; //年龄
    16.    private String city; //城市
    17.    private String income; //收入
    18.    private String education; //学历
    19.    private String profession; //行业
    20.    private Integer marriage; //婚姻状态
    21.    private String tags; //用户标签:多个用逗号分隔
    22.    private String coverPic; // 封面图片
    23.    private Date created;
    24.    private Date updated;
    25.    //用户状态,1为正常,2为冻结
    26.    @TableField(exist = false)
    27.    private String userStatus = "1";
    28. }

    UserController

    1. @RestController
    2. @RequestMapping("/user")
    3. public class UserController {
    4.    @Autowired
    5.    private UserInfoService userInfoService;
    6.    /**
    7.     * 保存用户信息
    8.     *   UserInfo
    9.     *   请求头中携带token
    10.     */
    11.    @PostMapping("/loginReginfo")
    12.    public ResponseEntity loginReginfo(@RequestBody UserInfo userInfo,
    13.                                       @RequestHeader("Authorization") String token) {
    14.        //1、解析token
    15.        Claims claims = JwtUtils.getClaims(token);
    16.        Integer id = (Integer) claims.get("id");
    17.        //2、向userinfo中设置用户id
    18.        userInfo.setId(Long.valueOf(id));
    19.        //3、调用service
    20.        userInfoService.save(userInfo);
    21.        return ResponseEntity.ok(null);
    22.   }
    23. }

    UserInfoService

    1. @Service
    2. public class UserInfoService {
    3.    @DubboReference
    4.    private UserInfoApi userInfoApi;
    5.    public void save(UserInfo userInfo) {
    6.        userInfoApi.save(userInfo);
    7.   }
    8. }

    UserInfoApi

    1. public interface UserInfoApi {
    2.    public void save(UserInfo userInfo);
    3. }

    UserInfoApiImpl

    1. @DubboService
    2. public class UserInfoApiImpl implements  UserInfoApi {
    3.    @Autowired
    4.    private UserInfoMapper userInfoMapper;
    5.    @Override
    6.    public void save(UserInfo userInfo) {
    7.        userInfoMapper.insert(userInfo);
    8.   }
    9. }

    UserInfoMapper

    1. public interface UserInfoMapper extends BaseMapper<UserInfo> {
    2. }

    1.4、上传用户头像

    1.4.1、需求分析

    接口文档

     

    YAPI地址:http://192.168.136.160:3000/project/19/interface/api/91

    文件上传采用POST传递,mvc中经过文件解析器转化为MultipartFile对象处理

    后续请求中,请求headr中都有Authorization参数。

    执行流程

     

    1.4.2、代码实现

    UsersControler

    1. /**
    2. * 更新用户资料
    3. */
    4. @PutMapping
    5. public ResponseEntity updateUserInfo(@RequestBody UserInfo userInfo,@RequestHeader("Authorization") String token) {
    6. Claims claims = JwtUtils.getClaims(token);
    7. Integer id = (Integer) claims.get("id");
    8.    userInfo.setId(Long.valueOf(id));
    9.    userInfoService.update(userInfo);
    10.    return ResponseEntity.ok(null);
    11. }

    UserInfoService

    1. //更新用户头像
    2. public void updateHead(MultipartFile headPhoto, Long id) throws IOException {
    3.    //1、将图片上传到阿里云oss
    4.    String imageUrl = ossTemplate.upload(headPhoto.getOriginalFilename(), headPhoto.getInputStream());
    5.    //2、调用百度云判断是否包含人脸
    6.    boolean detect = aipFaceTemplate.detect(imageUrl);
    7.    //2.1 如果不包含人脸,抛出异常
    8.    if(!detect) {
    9.        throw new RuntimeException();
    10.   }else{
    11.        //2.2 包含人脸,调用API更新
    12.        UserInfo userInfo = new UserInfo();
    13.        userInfo.setId(id);
    14.        userInfo.setAvatar(imageUrl);
    15.        userInfoApi.update(userInfo);
    16.   }
    17. }

    UserInfoApi

    public void update(UserInfo userInfo);

    UserInfoApiImpl

    1. @Override
    2. public void update(UserInfo userInfo) {
    3.    userInfoMapper.updateById(userInfo);
    4. }

    2、用户信息管理

    2.1、查询用户资料

    2.1.1、接口文档

     

    YAPI地址:http://192.168.136.160:3000/project/19/interface/api/265

    参数userID: 用户id,当不传递时,查询当前用户的资料信息

    2.1.2、代码实现

    UserInfoVo

    1. @Data
    2. @NoArgsConstructor
    3. @AllArgsConstructor
    4. public class UserInfoVo implements Serializable {
    5.    private Long id; //用户id
    6.    private String nickname; //昵称
    7.    private String avatar; //用户头像
    8.    private String birthday; //生日
    9.    private String gender; //性别
    10.    private String age; //年龄
    11.    private String city; //城市
    12.    private String income; //收入
    13.    private String education; //学历
    14.    private String profession; //行业
    15.    private Integer marriage; //婚姻状态
    16. }

    UsersController

    1. @RestController
    2. @RequestMapping("/users")
    3. public class UsersControler {
    4.    @Autowired
    5.    private UserInfoService userInfoService;
    6.    /**
    7.     * 查询用户资料
    8.     */
    9.    @GetMapping
    10.    public ResponseEntity users(Long userID,@RequestHeader("Authorization") String token) {
    11.        if(userID == null) {
    12.            Claims claims = JwtUtils.getClaims(token);
    13. Integer id = (Integer) claims.get("id");
    14.            userID = Long.valueOf(id);
    15.       }
    16.        UserInfoVo userInfo = userInfoService.findById(userID);
    17.        return ResponseEntity.ok(userInfo);
    18.   }
    19. }

    UserInfoService

    1. //根据id查寻
    2. public UserInfoVo findById(Long id) {
    3.    UserInfo userInfo = userInfoApi.findById(id);
    4.    UserInfoVo vo = new UserInfoVo();
    5.    BeanUtils.copyProperties(userInfo,vo); //copy同名同类型的属性
    6.    if(userInfo.getAge() != null) {
    7.        vo.setAge(userInfo.getAge().toString());
    8.   }
    9.    return vo;
    10. }

    UserInfoApiImpl

    1. @Override
    2. public UserInfo findById(Long id) {
    3.    return userInfoMapper.selectById(id);
    4. }

    2.2、更新用户资料

    2.2.1、接口文档

     

    YAPI地址:http://192.168.136.160:3000/project/19/interface/api/259

    2.2.2、代码实现

    UsersController

    1. /**
    2. * 更新用户资料
    3. */
    4. @PutMapping
    5. public ResponseEntity updateUserInfo(@RequestBody UserInfo userInfo,@RequestHeader("Authorization") String token) {
    6.    Claims claims = JwtUtils.getClaims(token);
    7.    Integer id = (Integer) claims.get("id");
    8.    userID = Long.valueOf(id);
    9.    userInfo.setId(UserHolder.getUserId());
    10.    userInfoService.update(userInfo);
    11.    return ResponseEntity.ok(null);
    12. }

    UserInfoService

    1. //更新
    2. public void update(UserInfo userInfo) {
    3.    userInfoApi.update(userInfo);
    4. }

    UserInfoApiImpl

    1. @Override
    2. public void update(UserInfo userInfo) {
    3.    userInfoMapper.updateById(userInfo);
    4. }
  • 相关阅读:
    三、webpack打包TS项目
    什么是数据结构?什么是算法?怎么学习数据结构与算法?
    嵌入式软件工程师面试题——2025校招专题(四)
    SpringCloud微服务(五)——Config分布式配置中心
    python-flask 登录案例
    弘玑Cyclone2022年产品发布会:人人可用的数字化工作平台——弘玑工作易
    第二十章·中介者模式
    【gzoj1081】k上升段【DP】
    SpringCloud基础7——Redis分布式缓存
    Eureka 学习笔记(2)加载eureka-server.properties中的配置
  • 原文地址:https://blog.csdn.net/weixin_45481821/article/details/126920036