# 6、userDao - 用户表

# 注意:

  • Dao层代码必须写在 router/dao/modules/ 目录

  • 文件名必须以 xxxDao.js 这样的格式命名(即必须Dao.js结尾)

  • 最终通过 await vk.daoCenter.xxxDao.xxxx(); 形式进行调用

# userDao示例代码

/**
 * 用户相关表操作
 */
const dbName_user = "uni-id-users";												// 用户

var dao = {};
var util = {};
// 初始化
dao.init = function(obj){
	util = obj;
}
/**
 * 获取用户信息
 * 调用示例
 * await vk.daoCenter.userDao.findById(user_id);
 * data 请求参数说明
 * @params {String} user_id 用户ID
 */
dao.findById = async (user_id) => {
	let { vk , db, _ } = util;
	let res = {};
	// 数据库操作开始-----------------------------------------------------------
	res = await vk.baseDao.findById({
		dbName:dbName_user,
		id:user_id,
		fieldJson:{ token:false, password:false },
	});
	// 数据库操作结束-----------------------------------------------------------
	return res;
};

/**
 * 获取用户信息,根据
 * _id
 * username
 * mobile
 * email
 * wx_openid.app-plus
 * wx_openid.mp-weixin
 * wx_unionid
 * ali_openid
 * my_invite_code
 * 调用示例
 await vk.daoCenter.userDao.findByUserInfo({
	mobile:mobile
 });
 * data 请求参数说明
 * @params {Object} userInfo 用户信息
 */
dao.findByUserInfo = async (userInfo) => {
	let { vk , db, _ } = util;
	let res;
	// 数据库操作开始-----------------------------------------------------------
	let whereJson = {};
	let list = [
		"_id",
		"username",
		"mobile",
		"email",
		"wx_openid.app-plus",
		"wx_openid.mp-weixin",
		"wx_unionid",
		"ali_openid",
		"my_invite_code"
	];
	let orArr = [];
	for(let i=0; i<list.length; i++){
	  let keyName = list[i];
		let orObj = {};
		if(vk.pubfn.isNotNull(userInfo[keyName])) orObj[keyName] = userInfo[keyName];
		if(vk.pubfn.isNotNull(orObj)){
			orArr.push(orObj);
		}
	}
	if(orArr.length > 0){
		whereJson = _.or(orArr);
		res = await vk.baseDao.findByWhereJson({
			dbName:dbName_user,
			fieldJson:{ token:false, password:false },
			whereJson:whereJson
		});
	}
	// 数据库操作结束-----------------------------------------------------------
	return res;
};
/**
 * 根据ID数组获取用户列表 最多支持500个
 * 调用示例
 * await vk.daoCenter.userDao.listByIds(userIdArr);
 * data 请求参数说明
 * @params {Array} userIdArr 用户ID数组
 */
dao.listByIds = async (userIdArr) => {
	let { vk , db, _ } = util;
	let res = {};
	let selectRes = await vk.baseDao.select({
		dbName:dbName_user,
		pageIndex:1,
		pageSize:500,
		fieldJson:{ token:false, password:false },
		whereJson:{
			_id:_.in(userIdArr)
		},
	});
	res = selectRes.rows;
	// 数据库操作结束-----------------------------------------------------------
	return res;
};
/**
 * 根据手机号直接注册账号并登录
 * 若手机号已存在,则直接登录
 * @params {Object} data 参数
 * mobile          手机号  必填
 * password        初始密码
 * inviteCode      邀请人的邀请码
 * myInviteCode    设置当前注册用户自己的邀请码
 * needPermission  设置为true时会在checkToken时返回用户权限(permission),建议在管理控制台中使用
 * 调用示例
 await vk.daoCenter.userDao.registerUserByMobile({
	 mobile,
 });
 */
dao.registerUserByMobile = async (data) => {
	let { vk , db, _, uniID } = util;
	let res = {};
	let {
		mobile,
		password,
		inviteCode,
		myInviteCode,
		needPermission
	} = data;
	// 数据库操作开始-----------------------------------------------------------
	let code = vk.pubfn.random(6);
	// 设置验证码
	await uniID.setVerifyCode({
		mobile,
		code,
		expiresIn:60,
		type:"login"
	});
	// 若手机号不存在,则注册并登录。存在,则直接登录。
	res = await uniID.loginBySms({
		mobile,
		code,
		password,
		inviteCode,
		myInviteCode,
		needPermission
	});
	if(res.uid && vk.pubfn.isNull(res.userInfo)){
		res.userInfo = await vk.daoCenter.userDao.findById(res.uid);
	}
	// 数据库操作结束-----------------------------------------------------------
	return res;
};

module.exports = dao;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
最后修改时间: 8/29/2021, 15:32:34