import "../base.api"

type (
    // The log in information | 登陆返回的数据信息
    LoginInfo {
        // User's UUID | 用户的UUID
        UserId       string          `json:"userId"`

        // Token for authorization | 验证身份的token
        Token        string          `json:"token"`

        // Expire timestamp | 过期时间戳
        Expire       uint64          `json:"expire"`
    }


    // The permission code for front end permission control | 权限码： 用于前端权限控制
    PermCodeResp {
        BaseDataInfo

        // Permission code data | 权限码数据
        Data []string `json:"data"`
    }


    // Login request | 登录参数
    LoginReq {
        // User Name | 用户名
        Username   string `json:"username" validate:"required,alphanum,max=20"`

        // Password | 密码
        Password   string `json:"password" validate:"required,max=30,min=6"`

        // Captcha ID which store in redis | 验证码编号, 存在redis中
        CaptchaId  string `json:"captchaId"  validate:"required,len=20"`

        // The Captcha which users input | 用户输入的验证码
        Captcha    string `json:"captcha" validate:"required,len=5"`
    }

    // Log in by email request | 邮箱登录参数
    LoginByEmailReq {
        // The user's email address | 用户的邮箱
        Email     string `json:"email" validate:"required,email,max=100"`

        // The Captcha which users input | 用户输入的验证码
        Captcha    string `json:"captcha,optional" validate:"omitempty,len=5"`
    }

    // Log in by SMS request | 短信登录参数
    LoginBySmsReq {
        // The user's mobile phone number | 用户的手机号码
        PhoneNumber   string  `json:"phoneNumber"  validate:"required,numeric,max=20"`

        // The Captcha which users input | 用户输入的验证码
        Captcha    string `json:"captcha,optional" validate:"omitempty,len=5"`
    }

    // The log in response data | 登录返回数据
    LoginResp {
        BaseDataInfo

        // The log in information | 登陆返回的数据信息
        Data LoginInfo `json:"data"`
    }
)

@server(
    group: auth
)

service Wechat {
    // Log in | 登录
    @handler login
    post /user/login (LoginReq) returns (LoginResp)
    // Log in by email | 邮箱登录
    @handler loginByEmail
    post /user/login_by_email (LoginByEmailReq) returns (LoginResp)
    // Log in by SMS | 短信登录
    @handler loginBySms
    post /user/login_by_sms (LoginBySmsReq) returns (LoginResp)

}

