(queries = {})
| 76 | }; |
| 77 | |
| 78 | const fetchPaginatedTaskRequests = async (queries = {}) => { |
| 79 | try { |
| 80 | let taskRequestsSnapshot = taskRequestsCollection; |
| 81 | let { next, prev, size, q: queryString } = queries; |
| 82 | if (size) size = parseInt(size); |
| 83 | |
| 84 | const rqlQueryParser = new RQLQueryParser(queryString); |
| 85 | |
| 86 | const filterQueries = rqlQueryParser.getFilterQueries(); |
| 87 | |
| 88 | for (const [filterKey, filterValue] of Object.entries(filterQueries)) { |
| 89 | const valuesList = filterValue |
| 90 | .map((query) => |
| 91 | query.operator === Operators.INCLUDE ? Reflect.get(TASK_REQUEST_FILTER_VALUES, query.value) : null |
| 92 | ) |
| 93 | .filter(Boolean); |
| 94 | |
| 95 | if (Reflect.has(TASK_REQUEST_FILTER_KEYS, filterKey)) { |
| 96 | const fieldName = Reflect.get(TASK_REQUEST_FILTER_KEYS, filterKey); |
| 97 | taskRequestsSnapshot = taskRequestsSnapshot.where(fieldName, "in", valuesList); |
| 98 | } |
| 99 | } |
| 100 | |
| 101 | const sortQueries = rqlQueryParser.getSortQueries(); |
| 102 | const sortQueryEntries = Object.entries(sortQueries); |
| 103 | |
| 104 | if (sortQueryEntries.length) { |
| 105 | for (const [sortKey, sortValue] of sortQueryEntries) { |
| 106 | if (Reflect.has(TASK_REQUEST_SORT_KEYS, sortKey) && Reflect.has(TASK_REQUEST_SORT_VALUES, sortValue)) { |
| 107 | const sortField = Reflect.get(TASK_REQUEST_SORT_KEYS, sortKey); |
| 108 | const orderDirection = Reflect.get(TASK_REQUEST_SORT_VALUES, sortValue); |
| 109 | taskRequestsSnapshot = taskRequestsSnapshot.orderBy(sortField, orderDirection); |
| 110 | } |
| 111 | } |
| 112 | } else { |
| 113 | const defaultField = Reflect.get(TASK_REQUEST_SORT_KEYS, "created"); |
| 114 | taskRequestsSnapshot = taskRequestsSnapshot.orderBy(defaultField, "desc"); |
| 115 | } |
| 116 | |
| 117 | if (next) { |
| 118 | const data = await taskRequestsCollection.doc(next).get(); |
| 119 | if (!data.data()) { |
| 120 | return { |
| 121 | statusCode: 400, |
| 122 | error: "Bad Request", |
| 123 | message: `${TASK_REQUEST_ERROR_MESSAGE.INVALID_NEXT}: ${next}`, |
| 124 | }; |
| 125 | } |
| 126 | taskRequestsSnapshot = taskRequestsSnapshot.startAfter(data).limit(size); |
| 127 | } else if (prev) { |
| 128 | const data = await taskRequestsCollection.doc(prev).get(); |
| 129 | if (!data.data()) { |
| 130 | return { |
| 131 | statusCode: 400, |
| 132 | error: "Bad Request", |
| 133 | message: `${TASK_REQUEST_ERROR_MESSAGE.INVALID_PREV}: ${prev}`, |
| 134 | }; |
| 135 | } |
no test coverage detected