mock平台

group.js 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. const yapi = require('../yapi.js');
  2. const baseModel = require('./base.js');
  3. class groupModel extends baseModel {
  4. getName() {
  5. return 'group';
  6. }
  7. getSchema() {
  8. return {
  9. uid: Number,
  10. group_name: String,
  11. group_desc: String,
  12. add_time: Number,
  13. up_time: Number,
  14. type: { type: String, default: 'public', enum: ['public', 'private'] },
  15. members: [
  16. {
  17. uid: Number,
  18. role: { type: String, enum: ['owner', 'dev'] },
  19. username: String,
  20. email: String
  21. }
  22. ],
  23. custom_field1: {
  24. name: String,
  25. enable: { type: Boolean, default: false }
  26. }
  27. // custom_field2: {
  28. // name: String,
  29. // enable: { type: Boolean, default: false }
  30. // },
  31. // custom_field3: {
  32. // name: String,
  33. // enable: { type: Boolean, default: false }
  34. // }
  35. };
  36. }
  37. save(data) {
  38. let m = new this.model(data);
  39. return m.save();
  40. }
  41. get(id) {
  42. return this.model
  43. .findOne({
  44. _id: id
  45. })
  46. .exec();
  47. }
  48. updateMember(data) {
  49. return this.model.update(
  50. {
  51. 'members.uid': data.uid
  52. },
  53. {
  54. $set: {
  55. 'members.$.username': data.username,
  56. 'members.$.email': data.email
  57. }
  58. },
  59. { multi: true }
  60. );
  61. }
  62. getByPrivateUid(uid) {
  63. return this.model
  64. .findOne({
  65. uid: uid,
  66. type: 'private'
  67. })
  68. .select('group_name _id group_desc add_time up_time type custom_field1')
  69. .exec();
  70. }
  71. getGroupById(id) {
  72. return this.model
  73. .findOne({
  74. _id: id
  75. })
  76. .select('uid group_name group_desc add_time up_time type custom_field1')
  77. .exec();
  78. }
  79. checkRepeat(name) {
  80. return this.model.countDocuments({
  81. group_name: name
  82. });
  83. }
  84. // 分组数量统计
  85. getGroupListCount() {
  86. return this.model.countDocuments({ type: 'public' });
  87. }
  88. addMember(id, data) {
  89. return this.model.update(
  90. {
  91. _id: id
  92. },
  93. {
  94. // $push: { members: data },
  95. $push: { members: { $each: data } }
  96. }
  97. );
  98. }
  99. delMember(id, uid) {
  100. return this.model.update(
  101. {
  102. _id: id
  103. },
  104. {
  105. $pull: { members: { uid: uid } }
  106. }
  107. );
  108. }
  109. changeMemberRole(id, uid, role) {
  110. return this.model.update(
  111. {
  112. _id: id,
  113. 'members.uid': uid
  114. },
  115. {
  116. $set: { 'members.$.role': role }
  117. }
  118. );
  119. }
  120. checkMemberRepeat(id, uid) {
  121. return this.model.countDocuments({
  122. _id: id,
  123. 'members.uid': uid
  124. });
  125. }
  126. list() {
  127. return this.model
  128. .find({
  129. type: 'public'
  130. })
  131. .select('group_name _id group_desc add_time up_time type uid custom_field1')
  132. .exec();
  133. }
  134. getAuthList(uid){
  135. return this.model.find({
  136. $or: [{
  137. 'members.uid': uid,
  138. 'type': 'public'
  139. }, {
  140. 'type': 'public',
  141. uid
  142. }]
  143. }).select(' _id group_name group_desc add_time up_time type uid custom_field1')
  144. .exec();
  145. }
  146. findByGroups(ids = []){
  147. return this.model.find({
  148. _id: {
  149. $in: ids
  150. },
  151. type: 'public'
  152. })
  153. }
  154. del(id) {
  155. return this.model.remove({
  156. _id: id
  157. });
  158. }
  159. up(id, data) {
  160. return this.model.update(
  161. {
  162. _id: id
  163. },
  164. {
  165. custom_field1: data.custom_field1,
  166. group_name: data.group_name,
  167. group_desc: data.group_desc,
  168. up_time: yapi.commons.time()
  169. }
  170. );
  171. }
  172. getcustomFieldName(name) {
  173. return this.model
  174. .find({
  175. 'custom_field1.name': name,
  176. 'custom_field1.enable': true
  177. })
  178. .select('_id')
  179. .exec();
  180. }
  181. search(keyword) {
  182. return this.model
  183. .find({
  184. group_name: new RegExp(keyword, 'i')
  185. })
  186. .limit(10);
  187. }
  188. }
  189. module.exports = groupModel;