wip: 添加所有的基本模型,添加一些接口。

main
NoahLan 1 year ago
parent 6c7efaf22c
commit 53ee858140

@ -1,3 +1,10 @@
import "base.api"
import "auth/auth.api"
import "core/model.api"
import "core/user.api"
import "core/role.api"
import "core/token.api"
import "core/captcha.api"
import "core/district.api"
import "core/oauth_provider.api"
import "core/department.api"

@ -0,0 +1,167 @@
syntax = "v1"
import "../base.api"
type (
// OAuth log in request | OAuth 登录请求
// swagger:parameters OauthLogin
OauthLoginReq {
// Provider name | 服务提供商名称
//
// In: query
// Required: true
// Max Length: 40
// Example: [google, github, facebook]
Provider string `form:"provider" validate:"max=40"`
}
// OAuth login return auth url | OAuth登录返回提供商登录页地址
OauthLoginResp {
// Auth URL | 提供商登录地址
AuthUrl string `json:"authUrl"`
}
// OAuth log in by code request | OAuth 直接登录请求
OauthLoginByCodeReq {
// Code | 一次性code
Code string `json:"code"`
// Provider name | 服务提供商名称
//
// Example: [wechat,google]
Provider string `json:"provider" validate:"max=40"`
}
// OAuth log in by phone code request | OAuth 手机号码登录请求
OauthLoginByPhoneCodeReq {
// AuthCode | 登录Code非必填为了平台兼容性
AuthCode string `json:"authCode,optional"`
// Code | 一次性code
Code string `json:"code"`
// Provider name | 服务提供商名称
//
// Example: [wechat,google]
Provider string `json:"provider" validate:"max=40"`
}
// Log in request | 普通登录请求
LoginReq {
// Log in subject | 登录主体(用户名/邮箱/手机号码)| 作用于验证码时,不支持用户名
Subject string `json:"subject"`
// Credentials | 登录凭证
Credentials string `json:"credentials"`
// Platform | 当前登录平台
Platform string `json:"platform"`
// Captcha ID which store in redis | 图形验证码编号, 存在redis中
//
// Required: true
// Max length: 32
CaptchaId string `json:"captchaId,optional" validate:"len=32"`
// The Captcha which users input | 用户输入的验证码
//
// Required: true
// Max length: 4
Captcha string `json:"captcha,optional" validate:"len=4"`
}
// LoginResp | 登录返回数据
// swagger:model LoginResp
LoginResp {
// TwoFactorType | 两步验证类型,空字符串表示无需两步验证
TwoFactorType string `json:"twoFactorType"`
// Token | Token信息
Token LoginTokenInfo `json:"token,optional"`
}
// LoginTokenInfo | Token数据
// swagger:model LoginTokenInfo
LoginTokenInfo {
// User ID | 用户ID
UID int64 `json:"uid,string"`
// Token Type | Token类型 Authorization: {token_type} {access_token}
//
// Example: [Bearer]
TokenType string `json:"token_type"`
// Access Token | Jwt-Token
AccessToken string `json:"access_token"`
// Expires At | 过期具体时间,时间戳格式
ExpiresAt int64 `json:"expires_at"`
// Scope | 授权范围,逗号分割
Scope string `json:"scope,omitempty,optional"`
}
// Register request | 注册请求
RegisterReq {
// Username | 用户名
Username *string `json:"username,optional"`
// Email | 邮箱
Email *string `json:"email,optional"`
// PhoneNumber | 手机号码
PhoneNumber *string `json:"phoneNumber,optional"`
// Credentials | 凭证
Credentials string `json:"credentials"`
// Code | 验证码
Code *string `json:"code,optional"`
// Captcha ID which store in redis | 图形验证码编号, 存在redis中
//
// Required: true
// Max length: 32
CaptchaId string `json:"captchaId,optional" validate:"len=32"`
// The Captcha which users input | 用户输入的验证码
//
// Required: true
// Max length: 6
Captcha string `json:"captcha,optional" validate:"len=4"`
}
)
@server(
group: auth
prefix: /api/auth
)
service api {
// Oauth log in | Oauth 第三方登录获取登录地址通常针对PC网页登录APP端自行获取code
@handler oauthLogin
get /oauth/login (OauthLoginReq) returns (OauthLoginResp)
// Oauth log in by code | Oauth 第三方登录客户端自行获取code进行登录
@handler oauthLoginByCode
post /oauth/login/byCode (OauthLoginByCodeReq) returns (LoginResp)
// Oauth log in by phone code | Oauth 第三方登录客户端获取换取手机号的code进行登录
@handler oauthLoginByPhone
post /oauth/login/byPhone (OauthLoginByPhoneCodeReq) returns (LoginResp)
// Oauth log in callback route | Oauth 登录返回调接口即redirect_uri
@handler oauthCallback
get /oauth/login/callback returns (LoginResp)
// Log in | 密码登录
@handler login
post /login (LoginReq) returns (LoginResp)
// Log in by code | 验证码登录手机x邮箱
@handler loginByCode
post /login/byCode (LoginReq) returns (LoginResp)
// Register | 注册
@handler register
post /register (RegisterReq) returns (BaseID)
}

@ -0,0 +1,11 @@
syntax = "v1"
// CaptchaInfo | 验证码信息
type (
CaptchaInfo {
// CaptchaId | 验证码ID
CaptchaId string `json:"captchaId"`
// ImgPath | 验证码图片路径
ImgPath string `json:"imgPath"`
}
)

@ -0,0 +1,38 @@
syntax = "v1"
type (
// Validating captcha request | 验证验证码请求
ValidateCaptchaReq {
// Captcha ID which store in redis | 图形验证码编号, 存在redis中
//
// Required: true
// Max length: 32
CaptchaId string `json:"captchaId" validate:"len=32"`
// The Captcha which users input | 用户输入的验证码
//
// Required: true
// Max length: 4
Captcha string `json:"captcha" validate:"len=4"`
// Auto remove captcha | 自动删除被验证的验证码
//
// Required: false
Clear bool `json:"clear,optional"`
}
)
@server(
group: captcha
prefix: /api/captcha
)
service api {
// Get Captcha | 获取验证码
@handler getCaptcha
get / returns (CaptchaInfo)
// Validating captcha | 验证验证码正确性
@handler validateCaptcha
post /validate (ValidateCaptchaReq)
}

@ -0,0 +1,56 @@
syntax = "v1"
type (
// Department request | 部门查询请求
// swagger:parameters GetDepartmentListAdmin GetDepartmentAdmin
DepartmentReq {
BaseID
*Pagination
// 部门名称
Name string `json:"name,optional" form:"name,optional"`
// Leader ID | 负责人ID
LeaderID int64 `json:"leaderId,string,optional" form:"leaderId,optional"`
// Parent ID | 父节点ID
ParentID int64 `json:"parentId,string,optional" form:"parentId,optional"`
}
// Department list response | 部门列表返回
DepartmentListResp {
// Page | 分页数据
Page *Pagination `json:"page,optional"`
// List | 数据列表
List []*DepartmentInfo `json:"list"`
}
)
@server(
jwt: Auth
group: department_admin
middleware: Authority
prefix: /api/admin/department
)
service api {
// Create department | 创建部门
@handler createDepartmentAdmin
post /create (DepartmentInfo) returns (BaseID)
// Update department info | 更新部门信息
@handler updateDepartmentAdmin
post /update (DepartmentInfo)
// Get department list | 获取部门列表
@handler getDepartmentListAdmin
get /list (DepartmentReq) returns (DepartmentListResp)
// Get department | 获取部门
@handler getDepartmentAdmin
get / (DepartmentReq) returns (DepartmentInfo)
// Delete department | 删除部门
@handler deleteDepartmentAdmin
delete / (BaseID)
}

@ -0,0 +1,56 @@
syntax = "v1"
type (
// Dictionary request | 字典查询请求
// swagger:parameters GetDictionaryListAdmin GetDictionaryAdmin
DictionaryReq {
BaseID
*Pagination
// 展示名称
Title string `json:"title,optional" form:"title,optional"`
// 搜索名称
Name string `json:"name,optional" form:"name,optional"`
// Keyword | 综合搜索关键字
Keyword string `json:"keyword,optional" form:"keyword,optional"`
}
// Dictionary list response | 字典列表返回
DictionaryListResp {
// Page | 分页数据
Page *Pagination `json:"page,optional"`
// List | 数据列表
List []*DictionaryInfo `json:"list"`
}
)
@server(
jwt: Auth
group: dictionary_admin
middleware: Authority
prefix: /api/admin/dictionary
)
service api {
// Create dictionary | 创建字典
@handler createDictionaryAdmin
post /create (DictionaryInfo) returns (BaseID)
// Update dictionary info | 更新字典信息
@handler updateDictionaryAdmin
post /update (DictionaryInfo)
// Get dictionary list | 获取字典列表
@handler getDictionaryListAdmin
get /list (DictionaryReq) returns (DictionaryListResp)
// Get dictionary | 获取字典
@handler getDictionaryAdmin
get / (DictionaryReq) returns (DictionaryInfo)
// Delete dictionary | 删除字典
@handler deleteDictionaryAdmin
delete / (BaseID)
}

@ -0,0 +1,95 @@
syntax = "v1"
type (
// District tree | 地址树,层级结构
// swagger:model DistrictTree
DistrictTree {
// Tree | 树
Tree []*DistrictInfo `json:"tree"`
}
// District request | 地址请求参数
// swagger:parameters GetDistrictTree
DistrictReq {
BaseID
// Code | 地址编码
Code string `json:"code,optional" form:"code,optional"`
}
// Get District List | 获取地址列表单级机构children为空
// swagger:parameters GetDistrictList
GetDistrictListReq {
BaseID
*Pagination
// Name | 地区名称模糊匹配 (like)
Name string `json:"name,optional" form:"name,optional"`
// Province code | 省级行政编号,表示该地区归属
Province string `json:"province,optional" form:"province,optional"`
// City | 地级行政编号,表示该地区归属
City string `json:"city,optional" form:"city,optional"`
// Area | 县级行政编号,表示该地区归属
Area string `json:"area,optional" form:"area,optional"`
// Street or Town | 乡级行政编号,表示该地区归属
Street string `json:"street,optional" form:"street,optional"`
// Level | 地区级别 1-省、自治区、直辖市 2-地级市、地区、自治州、盟 3-市辖区、县级市、县 4-乡镇
Level uint32 `json:"level,optional" form:"level,optional"`
}
// Get District Children | 获取子级地址列表单级机构children为空
// swagger:parameters GetDistrictChildren
GetDistrictChildrenReq {
// Parent Code | 父级Code若为空则查询level为1的列表
ParentCode string `json:"parentCode,optional" form:"parentCode,optional"`
}
// District name request | 地址名称请求参数
// swagger:parameters GetDistrictName
GetDistrictNameReq {
// Code | 地址编码
Code string `json:"code,optional" form:"code,optional"`
// Separator | 分隔符,默认为空字符串
Separator string `json:"sep,optional" form:"sep,optional"`
}
// District name response | 地址名称回复
GetDistrictNameResp {
// Code | 地址编码
Code string `json:"code"`
// Name | 地址名称(拼接后)
Name string `json:"name"`
// Name List | 地址名称列表,逐级,不拼接
NameList []string `json:"nameList"`
}
)
@server(
group: district
prefix: /api/district
)
service api {
// get district tree | 获取地址树,整棵树
@handler getDistrictTree
get /tree (DistrictReq) returns (DistrictTree)
// get district list | 获取地址列表
@handler getDistrictList
get /list (GetDistrictListReq) returns ([]*DistrictInfo)
// get district children | 获取子级地址列表
@handler getDistrictChildren
get /children (GetDistrictChildrenReq) returns ([]*DistrictInfo)
// get district name list | 获取地址名
@handler getDistrictName
get /name (GetDistrictNameReq) returns (GetDistrictNameResp)
}

@ -10,7 +10,235 @@ info(
import "../base.api"
type UserInfo {
type (
UserInfo {
BaseID
TimeInfo
}
// Status | 状态
Status string `json:"status,optional"`
// Username | 用户名
Username string `json:"username,optional"`
// Phone number | 手机号码
PhoneNumber *string `json:"phoneNumber,optional"`
// Email | 邮箱
Email *string `json:"email,optional"`
// Password | 密码
Password string `json:"password,optional,omitempty"`
// Nickname | 昵称
Nickname *string `json:"nickname,optional"`
// Roles | 角色代码列表
Roles []string `json:"roles,optional"`
// LoginRecord | 用户登录记录
LoginRecord *UserLoginRecordInfo `json:"loginRecord,optional"`
}
// 用户登录记录
UserLoginRecordInfo {
BaseID
TimeInfo
// 用户ID
UserID int64 `json:"userId,string,optional"`
// 最近一次登录时间
LastLoginAt string `json:"lastLoginAt,optional"`
// 最近一次登录IPv4
LastLoginIpv4 string `json:"lastLoginIpv4,optional"`
// 最近一次登录设备
LastLoginDevice string `json:"lastLoginDevice,optional"`
// 最近一次登录浏览器UA
LastLoginUA string `json:"lastLoginUa,optional"`
// 总登录次数
LoginCount uint64 `json:"loginCount,optional"`
}
// Token信息
TokenInfo {
BaseID
TimeInfo
// Status | 状态
Status string `json:"status,optional"`
// User's ID | 用户ID
UserID int64 `json:"userId,string,optional"`
// Token type | 凭证类型 [Bearer]
TokenType string `json:"tokenType,optional"`
// AccessToken | AccessToken 字符串
AccessToken string `json:"accessToken,optional"`
// RefreshToken | RefreshToken 字符串
RefreshToken string `json:"refreshYoken,optional"`
// Source | Token来源PCWeb/WechatMini/AlipayMini
Source string `json:"source,optional"`
// Expire Time | 过期时间
ExpiredAt string `json:"expiredAt,optional"`
}
// 用户社交平台信息
UserSocialInfo {
BaseID
TimeInfo
// 系统用户ID
UserID int64 `json:"userId,string,optional"`
// OAuth Provider | 服务提供商
Provider string `json:"provider,optional"`
// Access Token | 用户在提供商最近一次登录的访问凭证
AccessToken string `json:"accessToken,optional"`
// Refresh Token | 用户在提供商最近一次登录的刷新凭证
RefreshToken string `json:"refreshToken,optional"`
// User's ID | 提供商用户ID不一定存在
UID string `json:"uid,optional"`
// OpenID | 用户在提供商的OpenID
OpenID string `json:"openId,optional"`
// UnionID | 用户在提供商的UnionID
UnionID string `json:"unionId,optional"`
// Key | 用户在提供商的用于解密的key
Key string `json:"key,optional"`
// Expires in | 访问凭证过期时长,单位:秒
ExpiresIn uint64 `json:"expiresIn,optional"`
// User Profile | 提供商用户信息,不一定存在
UserProfile string `json:"userProfile,optional"`
}
)
type (
// 角色信息
RoleInfo {
BaseID
TimeInfo
// Status | 状态
Status string `json:"status,optional"`
// Role Code | 角色编码,可用于权限控制
Code string `json:"code,optional"`
// Role Name | 角色名
Name string `json:"name,optional"`
// Description | 角色描述
Description string `json:"description,optional"`
}
)
type (
DepartmentInfo {
BaseID
TimeInfo
// Status | 状态
Status string `json:"status,optional"`
// Department name | 部门名称
Name string `json:"name,optional"`
// Department leader | 部门负责人
LeaderID int64 `json:"leaderId,string,optional"`
// Remark | 备注
Remark string `json:"remark,optional"`
// Parent ID | 直接父级ID
ParentID int64 `json:"parentId,string,optional"`
// Leader | 部门负责人信息
Leader *UserInfo `json:"leader,optional"`
// Parent | 直接父级
Parent *DepartmentInfo `json:"parent,optional"`
// Children | 孩子列表
Children []*DepartmentInfo `json:"children,optional"`
}
)
type (
OauthProviderInfo {
BaseID
TimeInfo
// The provider's name | 提供商名称
Name string `json:"name,optional"`
// The client id | 客户端 id
ClientID string `json:"clientId,optional"`
// The client secret | 客户端密钥
ClientSecret string `json:"clientSecret,optional"`
// The redirect url | 跳转地址
RedirectURL string `json:"redirectUrl,optional"`
// The scopes | 权限范围
Scopes string `json:"scopes,optional"`
// The auth url of the provider | 认证地址
AuthURL string `json:"authUrl,optional"`
// The token url of the provider | 获取 Token 地址
TokenURL string `json:"tokenUrl,optional"`
// The URL to request user information by token | 用户信息请求地址
InfoURL string `json:"infoUrl,optional"`
// The description of the provider | 提供商描述
Description string `json:"description,optional"`
// The system internal oauth provider | 系统内置提供商
System bool `json:"system,optional"`
// The oauth provider init status | 提供商初始化状态
Init bool `json:"init,optional"`
}
)
type (
// District info | 地址信息
DistrictInfo {
BaseID
TimeInfo
// Name | 地区名称
Name string `json:"name"`
// Short name | 地区缩写,省级
ShortName string `json:"shortName"`
// Code | 地址编码
Code string `json:"code"`
// Province code | 省级行政编号,表示该地区归属
Province string `json:"province"`
// City | 地级行政编号,表示该地区归属
City string `json:"city"`
// Area | 县级行政编号,表示该地区归属
Area string `json:"area"`
// Street or Town | 乡级行政编号,表示该地区归属
Street string `json:"street"`
// Level | 地区级别 1-省、自治区、直辖市 2-地级市、地区、自治州、盟 3-市辖区、县级市、县 4-乡镇
Level uint32 `json:"level"`
// Latitude | 纬度
Latitude float64 `json:"latitude"`
// Longitude | 经度
Longitude float64 `json:"longitude"`
// Children | 子级
Children []*DistrictInfo `json:"children,optional"`
}
// 字典信息
DictionaryInfo {
BaseID
TimeInfo
// Status | 状态
Status string `json:"status,optional"`
// The title shown in the ui | 展示名称 建议配合i18n
Title string `json:"title,optional"`
// The name of dictionary for search | 字典搜索名称
Name string `json:"name,optional"`
// The description of dictionary | 字典的描述
Description string `json:"description,optional"`
// Details | 字典项
Details []*DictionaryDetailInfo `json:"details,optional"`
}
// 字典项信息
DictionaryDetailInfo {
BaseID
TimeInfo
// Status | 状态
Status string `json:"status,optional"`
// Sort number | 排序号
Sort uint32 `json:"sort,optional"`
// The title shown in the ui | 展示名称 建议配合i18n
Title string `json:"title,optional"`
// key | 键
Key string `json:"key,optional"`
// value | 值
Value string `json:"value,optional"`
// Dictionary ID | 字典ID
DictionaryID int64 `json:"dictionaryId,string,optional"`
// Dictionary | 字典信息
Dictionary *DictionaryInfo `json:"dictionary,optional"`
}
)

@ -0,0 +1,57 @@
syntax = "v1"
type (
// OAuth provider request | OAuth提供商查询请求
// swagger:parameters GetOauthProviderAdmin GetOauthProviderListAdmin
OauthProviderReq {
BaseID
*Pagination
// Name | 第三方提供商名称
//
// Required: false
// Example: wechat
Name string `form:"name,optional"`
// ClientId | 第三方客户端ID (like)
//
// Required: false
// Example: wx21k2j193j2ksdfaak291l
ClientId string `form:"clientId,optional"`
}
// OAuth provider list response | OAuth提供商查询返回
OauthProviderListResp {
Page *Pagination `json:"page,optional"`
List []*OauthProviderInfo `json:"list"`
}
)
@server(
jwt: Auth
group: oauthprovider_admin
middleware: Authority
prefix: /api/admin/oauth_provider
)
service api {
// Create oauth provider information | 创建第三方信息
@handler createOauthProviderAdmin
post /create (OauthProviderInfo)
// Update oauth provider information | 更新第三方信息
@handler updateOauthProviderAdmin
post /update (OauthProviderInfo)
// Delete oauth provider information | 删除第三方信息
@handler deleteOauthProviderAdmin
post /delete (BaseIDs)
// Get oauth provider list | 获取第三方信息列表
@handler getOauthProviderListAdmin
get /list (OauthProviderReq) returns (OauthProviderListResp)
// Get oauth provider by Params | 根据条件获取第三方信息
@handler getOauthProviderAdmin
get / (OauthProviderReq) returns (OauthProviderInfo)
}

@ -0,0 +1,59 @@
syntax = "v1"
type (
// Role request | 角色查询请求
// swagger:parameters GetRoleAdmin GetRoleListAdmin
RoleReq {
BaseID
*Pagination
// Name | 角色名称
//
// Required: false
// Example: wechat
Name string `form:"name,optional"`
// Code | 角色编码Like
//
// Required: false
// Example: Admin
Code string `form:"code,optional"`
}
// Role list response | 角色列表查询返回
RoleListResp {
// Page | 分页数据
Page *Pagination `json:"page,optional"`
// List | 数据列表
List []*RoleInfo `json:"list"`
}
)
@server(
jwt: Auth
group: role_admin
middleware: Authority
prefix: /api/admin/role
)
service api {
// Create role information | 创建角色
@handler createRoleAdmin
post /create (RoleInfo)
// Update role information | 更新角色
@handler updateRoleAdmin
post /update (RoleInfo)
// Delete role information | 删除角色信息
@handler deleteRoleAdmin
delete / (BaseIDs)
// Get role list | 获取角色列表
@handler getRoleListAdmin
get /list (RoleReq) returns (RoleListResp)
// Get Role | 根据条件获取角色
@handler getRoleAdmin
get / (RoleReq) returns (RoleInfo)
}

@ -0,0 +1,49 @@
syntax = "v1"
type (
// Token request | 查询凭证请求
// swagger:parameters GetTokenListAdmin
TokenReq {
BaseID
*Pagination
// User id | 用户ID
UserID int64 `json:"userId,string,optional" form:"userId,string,optional"`
// Token status | Token状态
Status string `json:"status,optional" form:"status,optional"`
// Provider source | 提供商来源
Source string `json:"source,optional" form:"source,optional"`
// Token type | 凭证类型 [Bearer]
//
// Example: Bearer
TokenType string `json:"tokenType,optional" form:"tokenType,optional"`
}
// Token list response | 凭证列表返回
TokenListResp {
// Page | 分页数据
Page *Pagination `json:"page,optional"`
// List | 数据列表
List []TokenInfo `json:"list"`
}
)
@server(
group: token_admin
prefix: /api/admin/token
jwt: Auth
middleware: Authority
)
service api {
// Get token list | 获取凭证列表
@handler getTokenListAdmin
get /list (TokenReq) returns (TokenListResp)
// Disable token | 禁用凭证(强制下线)
@handler disableTokenAdmin
post /disable (BaseID)
}

@ -1,9 +1,29 @@
//import "model.api"
syntax = "v1"
type (
// User request | 用户查询参数
// swagger:parameters GetUserAdmin GetUserListAdmin
UserReq {
BaseID
*Pagination
// Username | 用户名
Username string `json:"username,optional" form:"username,optional"`
// PhoneNumber | 手机号码
PhoneNumber string `json:"phoneNumber,optional" form:"phoneNumber,optional"`
// Email | 邮箱
Email string `json:"email,optional" form:"email,optional"`
// Nickname | 昵称
Nickname string `json:"nickname,optional" form:"nickname,optional"`
}
// User list response | 用户列表返回
UserListResp {
// Page | 分页数据
Page *Pagination `json:"page,optional"`
// List | 数据列表
List []*UserInfo `json:"list"`
}
)
@ -18,11 +38,31 @@ service api {
@handler createUserAdmin
post /create (UserInfo) returns (BaseID)
// Update user | 更新用户信息
@handler updateUserAdmin
post /update (UserInfo)
// Get user list | 获取用户列表
@handler getUserListAdmin
get /list (UserReq) returns (UserListResp)
// Get user | 获取用户
@handler getUserAdmin
get / (UserReq) returns (UserInfo)
// Delete user | 删除用户
@handler deleteUserAdmin
post / (BaseID)
delete / (BaseID)
}
@server(
group: user
prefix: /api/user
jwt: Auth
middleware: Authority
)
service api {
// Get Current User | 获取当前登录用户信息
@handler getCurrentUser
get / returns (UserInfo)
}
Loading…
Cancel
Save