Просмотр исходного кода

Merge pull request #5037 from weseek/imprv/user-group-create

imprv: User group create
Haku Mizuki 4 лет назад
Родитель
Сommit
00b7af3e7a

+ 13 - 3
packages/app/src/server/models/user-group.js

@@ -13,7 +13,7 @@ const schema = new mongoose.Schema({
   name: { type: String, required: true, unique: true },
   createdAt: { type: Date, default: Date.now },
   parent: { type: ObjectId, ref: 'UserGroup', index: true },
-  description: { type: String },
+  description: { type: String, default: '' },
 });
 schema.plugin(mongoosePaginate);
 
@@ -110,8 +110,18 @@ class UserGroup {
     return this.estimatedDocumentCount();
   }
 
-  static createGroupByName(name) {
-    return this.create({ name });
+  static async createGroup(name, description, parentId) {
+    // create without parent
+    if (parentId == null) {
+      return this.create({ name, description });
+    }
+
+    // create with parent
+    const parent = await this.findOne({ _id: parentId });
+    if (parent == null) {
+      throw Error('Parent does not exist.');
+    }
+    return this.create({ name, description, parent });
   }
 
   async updateName(name) {

+ 5 - 2
packages/app/src/server/routes/apiv3/user-group.js

@@ -86,6 +86,8 @@ module.exports = (crowi) => {
 
   validator.create = [
     body('name', 'Group name is required').trim().exists({ checkFalsy: true }),
+    body('description', 'Description must be a string').optional().isString(),
+    body('parentId', 'ParentId must be a string').optional().isString(),
   ];
 
   /**
@@ -119,11 +121,12 @@ module.exports = (crowi) => {
    *                      description: A result of `UserGroup.createGroupByName`
    */
   router.post('/', loginRequiredStrictly, adminRequired, csrf, validator.create, apiV3FormValidator, async(req, res) => {
-    const { name } = req.body;
+    const { name, description = '', parentId } = req.body;
 
     try {
       const userGroupName = crowi.xss.process(name);
-      const userGroup = await UserGroup.createGroupByName(userGroupName);
+      const userGroupDescription = crowi.xss.process(description);
+      const userGroup = await UserGroup.createGroup(userGroupName, userGroupDescription, parentId);
 
       return res.apiv3({ userGroup }, 201);
     }