Procházet zdrojové kódy

feat: convert slackId to growi user

https://youtrack.weseek.co.jp/issue/GW-7697
- Add method to find username by slack Id
- Convert slack Id to growi username if slack Id exists (on progress)
mudana před 4 roky
rodič
revize
2c68d4cd77

+ 1 - 0
packages/app/src/client/services/PersonalContainer.js

@@ -56,6 +56,7 @@ export default class PersonalContainer extends Container {
         lang: currentUser.lang,
         lang: currentUser.lang,
         isGravatarEnabled: currentUser.isGravatarEnabled,
         isGravatarEnabled: currentUser.isGravatarEnabled,
         apiToken: currentUser.apiToken,
         apiToken: currentUser.apiToken,
+        slackId: currentUser.slackId,
       });
       });
     }
     }
     catch (err) {
     catch (err) {

+ 13 - 12
packages/app/src/components/Me/BasicInfoSettings.jsx

@@ -79,18 +79,6 @@ class BasicInfoSettings extends React.Component {
             )}
             )}
           </div>
           </div>
         </div>
         </div>
-        <div className="form-group row">
-          <label htmlFor="userForm[slackId]" className="text-left text-md-right col-md-3 col-form-label">{t('Slack ID')}</label>
-          <div className="col-md-6">
-            <input
-              className="form-control"
-              type="text"
-              name="userForm[slackId]"
-              defaultValue={personalContainer.state.slackId}
-              onChange={(e) => { personalContainer.changeSlackId(e.target.value) }}
-            />
-          </div>
-        </div>
 
 
         <div className="form-group row">
         <div className="form-group row">
           <label className="text-left text-md-right col-md-3 col-form-label">{t('Disclose E-mail')}</label>
           <label className="text-left text-md-right col-md-3 col-form-label">{t('Disclose E-mail')}</label>
@@ -140,6 +128,19 @@ class BasicInfoSettings extends React.Component {
             }
             }
           </div>
           </div>
         </div>
         </div>
+        <div className="form-group row">
+          <label htmlFor="userForm[slackId]" className="text-left text-md-right col-md-3 col-form-label">{t('Slack ID')}</label>
+          <div className="col-md-6">
+            <input
+              className="form-control"
+              type="text"
+              key={personalContainer.state.slackId}
+              name="userForm[slackId]"
+              defaultValue={personalContainer.state.slackId}
+              onChange={(e) => { personalContainer.changeSlackId(e.target.value) }}
+            />
+          </div>
+        </div>
 
 
         <div className="row my-3">
         <div className="row my-3">
           <div className="offset-4 col-5">
           <div className="offset-4 col-5">

+ 7 - 0
packages/app/src/server/models/user.js

@@ -690,6 +690,13 @@ module.exports = function(crowi) {
     user.save();
     user.save();
   };
   };
 
 
+  userSchema.statics.findUserBySlackId = function(slackId) {
+    if (slackId == null) {
+      return Promise.resolve(null);
+    }
+    return this.findOne({ slackId });
+  };
+
   class UserUpperLimitException {
   class UserUpperLimitException {
 
 
     constructor() {
     constructor() {

+ 10 - 2
packages/app/src/server/service/slack-command-handler/keep.js

@@ -12,6 +12,7 @@ module.exports = (crowi) => {
   const createPageService = new CreatePageService(crowi);
   const createPageService = new CreatePageService(crowi);
   const BaseSlackCommandHandler = require('./slack-command-handler');
   const BaseSlackCommandHandler = require('./slack-command-handler');
   const handler = new BaseSlackCommandHandler();
   const handler = new BaseSlackCommandHandler();
+  const { User } = crowi.models;
 
 
   handler.handleCommand = async function(growiCommand, client, body, respondUtil) {
   handler.handleCommand = async function(growiCommand, client, body, respondUtil) {
     await respondUtil.respond({
     await respondUtil.respond({
@@ -89,6 +90,11 @@ module.exports = (crowi) => {
     });
     });
   }
   }
 
 
+  function findUserBySlackId(slackId) {
+    const userData = User.findUserBySlackId(slackId);
+    return userData ? userData.username : slackId;
+  }
+
   handler.keepGetMessages = async function(client, channelId, newest, oldest) {
   handler.keepGetMessages = async function(client, channelId, newest, oldest) {
     let result;
     let result;
 
 
@@ -148,16 +154,18 @@ module.exports = (crowi) => {
       .forEach((message) => {
       .forEach((message) => {
         // increment contentsBody while removing the same headers
         // increment contentsBody while removing the same headers
         // exclude header
         // exclude header
+
+        const messageUsername = findUserBySlackId(message.user);
         const lastMessageTs = Math.floor(lastMessage.ts / 60);
         const lastMessageTs = Math.floor(lastMessage.ts / 60);
         const messageTs = Math.floor(message.ts / 60);
         const messageTs = Math.floor(message.ts / 60);
-        if (lastMessage.user === message.user && lastMessageTs === messageTs) {
+        if (lastMessage.user === messageUsername && lastMessageTs === messageTs) {
           cleanedContents.push(`${message.text}\n`);
           cleanedContents.push(`${message.text}\n`);
         }
         }
         // include header
         // include header
         else {
         else {
           const ts = (parseInt(message.ts) - grwTzoffset) * 1000;
           const ts = (parseInt(message.ts) - grwTzoffset) * 1000;
           const time = format(new Date(ts), 'h:mm a');
           const time = format(new Date(ts), 'h:mm a');
-          cleanedContents.push(`${message.user}  ${time}\n${message.text}\n`);
+          cleanedContents.push(`${messageUsername}  ${time}\n${message.text}\n`);
           lastMessage = message;
           lastMessage = message;
         }
         }
       });
       });