Răsfoiți Sursa

Merge pull request #1306 from weseek/refactor-external-account-api

refactor api
Yuki Takei 6 ani în urmă
părinte
comite
220c57b50a

+ 6 - 5
src/client/js/services/AdminExternalAccountsContainer.js

@@ -18,7 +18,7 @@ export default class AdminExternalAccountContainer extends Container {
     this.appContainer = appContainer;
 
     this.state = {
-      exteranalAccounts: JSON.parse(document.getElementById('admin-external-account-setting').getAttribute('external-account')) || [],
+      exteranalAccounts: [],
       totalAccounts: 0,
       activePage: 1,
       pagingLimit: Infinity,
@@ -57,12 +57,13 @@ export default class AdminExternalAccountContainer extends Container {
   async retrieveExternalAccountsByPagingNum(selectedPage) {
 
     const params = { page: selectedPage };
-    const response = await this.appContainer.apiv3.get('/users/external-accounts', params);
+    const { data } = await this.appContainer.apiv3.get('/users/external-accounts', params);
 
-    const exteranalAccounts = response.data.externalAccounts;
-    const totalAccounts = response.data.totalAccounts;
-    const pagingLimit = response.data.pagingLimit;
 
+    if (data.paginateResult == null) {
+      throw new Error('data must conclude \'paginateResult\' property.');
+    }
+    const { docs: exteranalAccounts, totalDocs: totalAccounts, limit: pagingLimit } = data.paginateResult;
     this.setState({
       exteranalAccounts,
       totalAccounts,

+ 0 - 26
src/server/models/external-account.js

@@ -149,32 +149,6 @@ class ExternalAccount {
     return this.create({ providerType, accountId, user: user._id });
   }
 
-  /**
-   * find all entities with pagination
-   *
-   * @see https://github.com/edwardhotchkiss/mongoose-paginate
-   *
-   * @static
-   * @param {any} opts mongoose-paginate options object
-   * @returns {Promise<any>} mongoose-paginate result object
-   * @memberof ExternalAccount
-   */
-  static findAllWithPagination(opts) {
-    const query = {};
-    const options = Object.assign({ populate: 'user' }, opts);
-    if (options.sort == null) {
-      options.sort = { accountId: 1, createdAt: 1 };
-    }
-    if (options.limit == null) {
-      options.limit = ExternalAccount.DEFAULT_LIMIT;
-    }
-
-    return this.paginate(query, options)
-      .catch((err) => {
-        debug('Error on pagination:', err);
-      });
-  }
-
 }
 
 module.exports = function(crowi) {

+ 1 - 11
src/server/routes/admin.js

@@ -486,17 +486,7 @@ module.exports = function(crowi, app) {
 
   actions.externalAccount = {};
   actions.externalAccount.index = function(req, res) {
-    const page = parseInt(req.query.page) || 1;
-
-    ExternalAccount.findAllWithPagination({ page })
-      .then((result) => {
-        const pager = createPager(result.total, result.limit, result.page, result.pages, MAX_PAGE_LIST);
-
-        return res.render('admin/external-accounts', {
-          accounts: result.docs,
-          pager,
-        });
-      });
+    return res.render('admin/external-accounts');
   };
 
   actions.externalAccount.remove = async function(req, res) {

+ 13 - 7
src/server/routes/apiv3/users.js

@@ -348,16 +348,22 @@ module.exports = (crowi) => {
    *              application/json:
    *                schema:
    *                  properties:
-   *                    external-account:
-   *                      type: object
-   *                      description: a result of `ExternalAccount.find`
+   *                    paginateResult:
+   *                      $ref: '#components/schemas/PaginateResult'
    */
   router.get('/external-accounts/', loginRequiredStrictly, adminRequired, async(req, res) => {
+    const page = parseInt(req.query.page) || 1;
+
     try {
-      const page = parseInt(req.query.page) || 1;
-      const result = await ExternalAccount.findAllWithPagination({ page });
-      const { docs: extenralAccounts, total: totalAccounts, limit: pagingLimit } = result;
-      return res.apiv3({ extenralAccounts, totalAccounts, pagingLimit });
+      const paginateResult = await ExternalAccount.paginate(
+        { status: { $ne: ExternalAccount.STATUS_DELETED } },
+        {
+          sort: { status: 1, username: 1, createdAt: 1 },
+          page,
+          limit: PAGE_ITEMS,
+        },
+      );
+      return res.apiv3({ paginateResult });
     }
     catch (err) {
       const msg = 'Error occurred in fetching external-account list';