This repository was archived by the owner on Oct 19, 2025. It is now read-only.
Repository navigation
Expand file tree
/
Copy pathindex.js
More file actions
105 lines (87 loc) · 2.06 KB
/
Copy pathindex.js
File metadata and controls
105 lines (87 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
"use strict";
// class GreaterThanQuery extends BaseQuery {
// constructor(key, value) {
// super();
// this.key = key;
// this.value = value;
// }
// static create(key, name) {
// return new GreaterThanQuery(key, name);
// }
// toMongoQuery() {
// const query = {};
// query[this.key] = {$gt: this.value};
// return query;
// }
// }
class BaseQuery {
constructor() {
this.criteria = {};
}
toMongoQuery() {
return this.criteria;
}
toJSON() {
return `Query: ${JSON.stringify(this)}`;
}
}
class SimpleQuery extends BaseQuery {
constructor(criteria) {
super();
this.criteria = criteria;
}
static create(criteria) {
return new SimpleQuery(criteria);
}
}
class Query extends BaseQuery {
constructor(criteria) {
super();
this.queries = [];
if (criteria != null) {
this.queries = [SimpleQuery.create(criteria)];
}
}
static create(criteria) {
return new Query(criteria);
}
or(...criteria) {
this.queries.push(OrQuery.create(criteria));
return this;
}
and(...criteria) {
this.queries.push(AndQuery.create(criteria));
return this;
}
toMongoQuery() {
this.queries.forEach((query) => {
const mongoQuery = query.toMongoQuery();
Object.getOwnPropertyNames(mongoQuery).forEach((key) => {
this.criteria[key] = mongoQuery[key];
});
});
return super.toMongoQuery();
}
}
class AndQuery extends BaseQuery {
constructor(criteria) {
super();
this.criteria.$and = criteria;
}
static create(criteria) {
return new AndQuery(criteria);
}
}
class OrQuery extends BaseQuery {
constructor(criteria) {
super();
this.criteria.$or = criteria;
}
static create(criteria) {
return new OrQuery(criteria);
}
}
module.exports = {
Query: Query,
SimpleQuery: SimpleQuery
}