Skip to content

Commit d13001c

Browse files
*
1 parent 0b67fc7 commit d13001c

File tree

5 files changed

+82
-249
lines changed

5 files changed

+82
-249
lines changed

graphql/resolvers/Company/index.js

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
11
import Company from "../../../server/models/Company";
2-
import {
3-
buildMongoConditionsFromFilters,
4-
FILTER_CONDITION_TYPE
5-
} from "@entria/graphql-mongo-helpers";
62
import Freight from "../../../server/models/Freight";
73

8-
const stringToRegexQuery = val => {
9-
return { $regex: new RegExp(val) };
4+
const convertJsonToDot = (obj, parent = [], keyValue = {}) => {
5+
for (let key in obj) {
6+
let keyPath = [...parent, key];
7+
if (obj[key] !== null && typeof obj[key] === "object") {
8+
Object.assign(keyValue, convertJsonToDot(obj[key], keyPath, keyValue));
9+
} else keyValue[keyPath.join(".")] = obj[key];
10+
}
11+
return keyValue;
1012
};
1113

12-
const CompanyFilterMapping = {
13-
level: {
14-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1
15-
},
16-
status: {
17-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1
18-
},
19-
name: {
20-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
21-
format: stringToRegexQuery
22-
}
14+
const stringToRegexQuery = val => {
15+
return { $regex: new RegExp(val) };
2316
};
2417

2518
export default {
@@ -31,12 +24,8 @@ export default {
3124
return company;
3225
},
3326
companys: async (parent, { page, perpage, filter }, context, info) => {
34-
const filterResult = buildMongoConditionsFromFilters(
35-
null,
36-
filter,
37-
CompanyFilterMapping
38-
);
39-
const companys = await Company.find(filterResult.conditions)
27+
const conditions = convertJsonToDot(filter);
28+
const companys = await Company.find(conditions)
4029
.skip(perpage * (page - 1))
4130
.limit(perpage)
4231
.exec();

graphql/resolvers/Freight/index.js

Lines changed: 21 additions & 175 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,19 @@
11
import Freight from "../../../server/models/Freight";
22
import Company from "../../../server/models/Company";
33
import Location from "../../../server/models/Location";
4-
import {
5-
buildMongoConditionsFromFilters,
6-
FILTER_CONDITION_TYPE
7-
} from "@entria/graphql-mongo-helpers";
84

95
const stringToRegexQuery = val => ({ $regex: new RegExp(val) });
106

11-
const OriginFilterMapping = {
12-
city: {
13-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
14-
key: "destination.city"
15-
},
16-
stateuf: {
17-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
18-
key: "destination.state.uf"
19-
},
20-
statename: {
21-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
22-
key: "destination.state.name"
23-
},
24-
statebase: {
25-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
26-
key: "origin.state.uf"
7+
const convertJsonToDot = (obj, parent = [], keyValue = {}) => {
8+
for (let key in obj) {
9+
let keyPath = [...parent, key];
10+
if (obj[key] !== null && typeof obj[key] === "object") {
11+
Object.assign(keyValue, convertJsonToDot(obj[key], keyPath, keyValue));
12+
} else keyValue[keyPath.join(".")] = obj[key];
2713
}
14+
return keyValue;
2815
};
2916

30-
const DestinationFilterMapping = {
31-
city: {
32-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
33-
key: "origin.city"
34-
},
35-
stateuf: {
36-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
37-
key: "origin.state.uf"
38-
},
39-
statename: {
40-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
41-
key: "origin.state.name"
42-
},
43-
statebase: {
44-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
45-
key: "destination.state.uf"
46-
}
47-
};
48-
49-
const querysfreight = [];
50-
5117
const freightaggregate = async (groupby, conditions) => {
5218
const data = await Freight.aggregate([
5319
{
@@ -74,141 +40,22 @@ const freightaggregate = async (groupby, conditions) => {
7440
return Array.from(Object.keys(data), p => data[p]._id);
7541
};
7642

77-
const FreightFilterMapping = {
78-
site: {
79-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1
80-
},
81-
status: {
82-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1
83-
},
84-
km: {
85-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
86-
format: stringToRegexQuery
87-
},
88-
price: {
89-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
90-
format: stringToRegexQuery
91-
},
92-
weight: {
93-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
94-
format: stringToRegexQuery
95-
},
96-
cargo: {
97-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
98-
format: stringToRegexQuery
99-
},
100-
especie: {
101-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
102-
format: stringToRegexQuery
103-
},
104-
complement: {
105-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
106-
format: stringToRegexQuery
107-
},
108-
tracking: {
109-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
110-
format: stringToRegexQuery
111-
},
112-
note: {
113-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
114-
format: stringToRegexQuery
115-
},
116-
vehicles: {
117-
type: FILTER_CONDITION_TYPE.CUSTOM_CONDITION,
118-
format: vehicles => {
119-
if (!vehicles) return [];
120-
return { vehicles: { $in: vehicles } };
121-
}
122-
},
123-
bodies: {
124-
type: FILTER_CONDITION_TYPE.CUSTOM_CONDITION,
125-
format: bodies => {
126-
if (!bodies) return [];
127-
return { bodies: { $in: bodies } };
128-
}
129-
},
130-
origincode: {
131-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
132-
key: "origin.code"
133-
},
134-
origincity: {
135-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
136-
key: "origin.city"
137-
},
138-
originstateuf: {
139-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
140-
key: "origin.state.uf"
141-
},
142-
originstatename: {
143-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
144-
key: "origin.state.name"
145-
},
146-
destinationcode: {
147-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
148-
key: "destination.code"
149-
},
150-
destinationcity: {
151-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
152-
key: "destination.city"
153-
},
154-
destinationstateuf: {
155-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
156-
key: "destination.state.uf"
157-
},
158-
destinationstatename: {
159-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
160-
key: "destination.state.name"
161-
},
162-
companyname: {
163-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
164-
key: "company.name"
165-
},
166-
companylevel: {
167-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
168-
key: "company.level"
169-
},
170-
companystatus: {
171-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
172-
key: "company.status"
173-
},
174-
company_id: {
175-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
176-
key: "company._id"
177-
}
178-
};
179-
18043
export default {
18144
Query: {
18245
stateOrigin: async (parent, args, context, info) => {
183-
const { conditions } = buildMongoConditionsFromFilters(
184-
null,
185-
args.filter,
186-
OriginFilterMapping
187-
);
46+
const conditions = convertJsonToDot(args.filter);
18847
return await freightaggregate("origin.state.uf", conditions);
18948
},
19049
stateDestination: async (parent, args, context, info) => {
191-
const { conditions } = buildMongoConditionsFromFilters(
192-
null,
193-
args.filter,
194-
DestinationFilterMapping
195-
);
50+
const conditions = convertJsonToDot(args.filter);
19651
return await freightaggregate("destination.state.uf", conditions);
19752
},
19853
cityOrigin: async (parent, args, context, info) => {
199-
const { conditions } = buildMongoConditionsFromFilters(
200-
null,
201-
args.filter,
202-
OriginFilterMapping
203-
);
54+
const conditions = convertJsonToDot(args.filter);
20455
return await freightaggregate("origin.city", conditions);
20556
},
20657
cityDestination: async (parent, args, context, info) => {
207-
const { conditions } = buildMongoConditionsFromFilters(
208-
null,
209-
args.filter,
210-
DestinationFilterMapping
211-
);
58+
const conditions = convertJsonToDot(args.filter);
21259
return await freightaggregate("destination.city", conditions);
21360
},
21461
freight: async (parent, { _id }, context, info) => {
@@ -218,14 +65,13 @@ export default {
21865
.exec();
21966
},
22067
freights: async (parent, args, context, info) => {
221-
const { page, perpage, filter } = args;
222-
223-
const { conditions } = buildMongoConditionsFromFilters(
224-
null,
225-
filter,
226-
FreightFilterMapping
227-
);
228-
68+
const { page = 1, perpage = 20, filter } = args;
69+
const { vehicles, bodies, ...resto } = convertJsonToDot(filter);
70+
const conditions = {
71+
vehicles: !vehicles ? [] : { vehicles: { $in: vehicles } },
72+
bodies: !bodies ? [] : { bodies: { $in: bodies } },
73+
...resto
74+
};
22975
const res = await Freight.aggregate([
23076
{
23177
$lookup: {
@@ -254,9 +100,9 @@ export default {
254100
{ $unwind: "$destination" },
255101
{ $unwind: "$origin" },
256102
{ $unwind: "$company" },
257-
{ $match: conditions }
258-
// skip
259-
// limit
103+
{ $match: conditions },
104+
{ $skip: (page - 1) * perpage },
105+
{ $limit: perpage }
260106
]).exec();
261107

262108
const totalcount = await Freight.countDocuments(conditions).exec();

graphql/resolvers/Location/index.js

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,21 @@
11
import Location from "../../../server/models/Location";
2-
import {
3-
buildMongoConditionsFromFilters,
4-
FILTER_CONDITION_TYPE
5-
} from "@entria/graphql-mongo-helpers";
62

7-
const LocationFilterMapping = {
8-
code: {
9-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1
10-
},
11-
city: {
12-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1
13-
},
14-
stateuf: {
15-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
16-
key: "state.uf"
17-
},
18-
statename: {
19-
type: FILTER_CONDITION_TYPE.MATCH_1_TO_1,
20-
key: "state.name"
3+
const convertJsonToDot = (obj, parent = [], keyValue = {}) => {
4+
for (let key in obj) {
5+
let keyPath = [...parent, key];
6+
if (obj[key] !== null && typeof obj[key] === "object") {
7+
Object.assign(keyValue, convertJsonToDot(obj[key], keyPath, keyValue));
8+
} else keyValue[keyPath.join(".")] = obj[key];
219
}
10+
return keyValue;
2211
};
2312

2413
export default {
2514
Query: {
2615
location: async (parent, { filter }, context, info) => {
2716
if (!filter) throw new Error("Insert a param.");
28-
const filterResult = buildMongoConditionsFromFilters(
29-
null,
30-
filter,
31-
LocationFilterMapping
32-
);
33-
return await Location.findOne(filterResult.conditions).exec();
17+
const conditions = convertJsonToDot(filter);
18+
return await Location.findOne(conditions).exec();
3419
},
3520
locations: async (parent, { page, perpage, fiter }, context, info) => {
3621
const filterResult = buildMongoConditionsFromFilters(

0 commit comments

Comments
 (0)