史上最强项目实战(十二)——用户微服务功能实现(1)

你说的曾经没有我的故事 提交于 2020-01-21 05:45:27

前面我们分析了系统用户包括后台管理系统用户和前端门户网站使用用户,理论上来说,两者应该分开进行管理。但对于我们这个项目来说,前期功能没必要一开始就做得这么全面和复杂,所以当前我们会把两类用户放在一块处理,我们从用户登录注册页面分析用户微服务需要提供的功能。

登录页面:
在这里插入图片描述

注册页面:
在这里插入图片描述

1. 需求分析

从登录、注册页面上来看,我们至少要提供以下几个功能:

(1)根据用户名+密码,手机号+密码实现登录。

(2)给指定手机号发送短信验证码。

除了界面上看到的需求功能,还存在部分隐藏的需求:

(1)用户名、手机号必须全局唯一。

(2)用户的增删改查功能。

2. ly-server-user-api工程开发

2.1 引入依赖

<dependencies>
    <dependency>
        <groupId>com.leyou</groupId>
        <artifactId>ly-common-api</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.0.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <!-- 集成swagger -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
    </dependency>
    <!--实体类校验依赖-->
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>
</dependencies>

2.2 用户实体类

@Data
@Entity
@Table(name = "tb_user")
@ApiModel(description = "用户")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @ApiModelProperty(value = "唯一标识id", dataType = "Long")
    private Long id;

    @NotBlank
    @Length(min = 6, max = 30, message = "用户名只能在6~30位之间")
    @ApiModelProperty(value = "用户名", dataType = "String")
    private String username;

    @NotBlank
    @Length(max = 20, message = "昵称不允许超过20位")
    @ApiModelProperty(value = "昵称", dataType = "String")
    private String displayName;

    @NotBlank
    @ApiModelProperty(value = "密码", dataType = "String")
    private String password;

    @Pattern(regexp = "^1[35678]\\d{9}$", message = "手机号格式不正确")
    @ApiModelProperty(value = "手机号码", dataType = "String")
    private String phone;
}

2.2.1 数据结构

CREATE TABLE `tb_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `display_name` varchar(255) NOT NULL COMMENT '昵称',
  `password` varchar(255) NOT NULL COMMENT '密码,加密存储',
  `phone` varchar(20) DEFAULT NULL COMMENT '注册手机号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COMMENT='用户表';

2.3 用户微服务操作码

@Getter
@ToString
@AllArgsConstructor
public enum UserResultCode implements ResultCode {

    USER_IS_EXIST(false, 20001, "用户名已存在"),
    USER_IS_NOT_EXIST(false, 20002, "指定唯一标识的用户不存在");

    private boolean success;
    private int code;
    private String message;
}

2.4 用户微服务响应体

public class UserResponseResult extends ResponseResult {

    /**
     * 用户
     */
    private User user;

    public UserResponseResult(ResultCode resultCode, User user) {
        super(resultCode);
        this.user = user;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

2.5 用户微服务客户端接口

暂时只是一个空接口,后面再补充具体的接口方法。

public interface UserApi {
}

2.6 工程结构

至此,ly-server-user-api工程代码已完成,工程代码结构如下:
在这里插入图片描述

——End——
更多详情,可扫码关注微信公众号哦。

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!