Skip to content
This repository has been archived by the owner on Nov 28, 2022. It is now read-only.

Commit

Permalink
Refactored duplicated members query generation
Browse files Browse the repository at this point in the history
no issue

- code for generating a members API query was duplicated across listing, export, and bulk delete
- extracted the duplicated code into a reusable method
- removed `?all=true` param generation for bulk members delete because we don't provide that option in the UI
  • Loading branch information
kevinansfield committed Apr 8, 2021
1 parent ecc05aa commit e46738d
Showing 1 changed file with 31 additions and 49 deletions.
80 changes: 31 additions & 49 deletions app/controllers/members.js
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,30 @@ export default class MembersController extends Controller {
return !!(this.label || this.paidParam || this.searchParam);
}

getApiQueryObject({extraFilters = []} = {}) {
let {label, paidParam, searchParam} = this;

let filters = [];

filters.concat(extraFilters);

if (label) {
filters.push(`label:'${label}'`);
}

if (paidParam !== null) {
if (paidParam === 'true') {
filters.push('status:-free');
} else {
filters.push('status:free');
}
}

let searchQuery = searchParam ? {search: searchParam} : {};

return Object.assign({}, {filter: filters.join('+')}, searchQuery);
}

// Actions -----------------------------------------------------------------

@action
Expand All @@ -166,25 +190,9 @@ export default class MembersController extends Controller {
@action
exportData() {
let exportUrl = ghostPaths().url.api('members/upload');
let downloadParams = new URLSearchParams();
let downloadParams = new URLSearchParams(this.getApiQueryObject());
downloadParams.set('limit', 'all');
let filters = [];
if (this.paidParam !== null) {
if (this.paidParam === 'true') {
filters.push('status:-free');
} else {
filters.push('status:free');
}
}
if (this.label !== null) {
filters.push(`label:${this.label}`);
}
if (this.searchText !== '') {
downloadParams.set('search', this.searchText);
}
if (filters.length) {
downloadParams.set('filter', filters.join('+'));
}

let iframe = document.getElementById('iframeDownload');

if (!iframe) {
Expand Down Expand Up @@ -292,26 +300,15 @@ export default class MembersController extends Controller {
this._startDate = startDate;

this.members = yield this.ellaSparse.array((range = {}, query = {}) => {
let filters = [];
if (label) {
filters.push(`label:'${label}'`);
}
if (paidParam !== null) {
if (paidParam === 'true') {
filters.push('status:-free');
} else {
filters.push('status:free');
}
}
filters.push(`created_at:<='${moment.utc(this._startDate).format('YYYY-MM-DD HH:mm:ss')}'`);
const searchQuery = searchParam ? {search: searchParam} : {};
const searchQuery = this.getApiQueryObject({
extraFilters: [`created_at:<='${moment.utc(this._startDate).format('YYYY-MM-DD HH:mm:ss')}'`]
});
const order = orderParam ? `${orderParam} desc` : `created_at desc`;

query = Object.assign({
order,
limit: range.length,
page: range.page,
filter: filters.join('+')
page: range.page
}, searchQuery, query);

return this.store.query('member', query).then((result) => {
Expand All @@ -327,23 +324,8 @@ export default class MembersController extends Controller {

@task({drop: true})
*deleteMembersTask() {
let {label, paidParam, searchParam} = this;

let filters = [];
if (label) {
filters.push(`label:'${label}'`);
}
if (paidParam !== null) {
if (paidParam === 'true') {
filters.push('status:-free');
} else {
filters.push('status:free');
}
}
let searchQuery = searchParam ? {search: searchParam} : {};
let allQuery = !label && !paidParam && !searchParam ? {all: true} : {};
const query = new URLSearchParams(this.getApiQueryObject());

let query = new URLSearchParams(Object.assign({}, {filter: filters.join('+')}, searchQuery, allQuery));
let url = `${this.ghostPaths.url.api('members')}?${query}`;

// response contains details of which members failed to be deleted
Expand Down

0 comments on commit e46738d

Please sign in to comment.