|
1 | 1 | const _ = require('lodash'); |
2 | 2 | const moment = require('moment'); |
3 | 3 |
|
4 | | -const elasticsearch = require('../util/elasticsearch'); |
5 | 4 | const AddressMetadata = require('../model/address-metadata'); |
| 5 | +const elasticsearch = require('../util/elasticsearch'); |
| 6 | +const getTrader = require('./get-trader'); |
6 | 7 |
|
7 | 8 | const getSuggestedTraders = async limit => { |
8 | 9 | const response = await elasticsearch.getClient().search({ |
@@ -105,20 +106,30 @@ const getValidTraderAddresses = async (addresses, limit) => { |
105 | 106 | response.body.aggregations.matching_takers.takers.buckets, |
106 | 107 | ); |
107 | 108 |
|
108 | | - const validAddresses = buckets.map(bucket => bucket.key); |
| 109 | + const validAddresses = _.uniq(buckets.map(bucket => bucket.key)); |
109 | 110 |
|
110 | 111 | return validAddresses; |
111 | 112 | }; |
112 | 113 |
|
| 114 | +function escapeRegex(text) { |
| 115 | + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); |
| 116 | +} |
| 117 | + |
113 | 118 | const searchTraders = async (query, options) => { |
114 | 119 | if (query === '' || query === null) { |
115 | 120 | const traders = await getSuggestedTraders(options.limit); |
116 | 121 |
|
117 | 122 | return traders; |
118 | 123 | } |
119 | 124 |
|
| 125 | + const trader = await getTrader(query); |
| 126 | + |
| 127 | + if (trader !== null) { |
| 128 | + return [trader]; |
| 129 | + } |
| 130 | + |
120 | 131 | const metadatas = await AddressMetadata.find({ |
121 | | - name: new RegExp(query, 'ig'), |
| 132 | + name: new RegExp(escapeRegex(query), 'ig'), |
122 | 133 | }) |
123 | 134 | .sort({ name: 1 }) |
124 | 135 | .limit(options.limit) |
|
0 commit comments