Skip to content

Commit ce54e35

Browse files
committed
feat: add or clause to ObjectId
1 parent 36d87ba commit ce54e35

File tree

4 files changed

+40
-19
lines changed

4 files changed

+40
-19
lines changed

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@athenna/database",
3-
"version": "5.15.0",
3+
"version": "5.16.0",
44
"description": "The Athenna database handler for SQL/NoSQL.",
55
"license": "MIT",
66
"author": "João Lenon <lenon@athenna.io>",

src/database/drivers/MongoDriver.ts

+30-16
Original file line numberDiff line numberDiff line change
@@ -1213,8 +1213,8 @@ export class MongoDriver extends Driver<Connection, Collection> {
12131213
*/
12141214
public whereIn(column: string, values: any[]) {
12151215
values = values.flatMap(value => {
1216-
if (ObjectId.isValid(value)) {
1217-
return [value, ObjectId.ifValidSwap(value)]
1216+
if (ObjectId.isValidStringOrObject(value)) {
1217+
return [value, new ObjectId(value)]
12181218
}
12191219

12201220
return [value]
@@ -1230,8 +1230,8 @@ export class MongoDriver extends Driver<Connection, Collection> {
12301230
*/
12311231
public whereNotIn(column: string, values: any[]) {
12321232
values = values.flatMap(value => {
1233-
if (ObjectId.isValid(value)) {
1234-
return [value, ObjectId.ifValidSwap(value)]
1233+
if (ObjectId.isValidStringOrObject(value)) {
1234+
return [value, new ObjectId(value)]
12351235
}
12361236

12371237
return [value]
@@ -1361,8 +1361,8 @@ export class MongoDriver extends Driver<Connection, Collection> {
13611361
*/
13621362
public orWhereIn(column: string, values: any[]) {
13631363
values = values.flatMap(value => {
1364-
if (ObjectId.isValid(value)) {
1365-
return [value, ObjectId.ifValidSwap(value)]
1364+
if (ObjectId.isValidStringOrObject(value)) {
1365+
return [value, new ObjectId(value)]
13661366
}
13671367

13681368
return [value]
@@ -1378,8 +1378,8 @@ export class MongoDriver extends Driver<Connection, Collection> {
13781378
*/
13791379
public orWhereNotIn(column: string, values: any[]) {
13801380
values = values.flatMap(value => {
1381-
if (ObjectId.isValid(value)) {
1382-
return [value, ObjectId.ifValidSwap(value)]
1381+
if (ObjectId.isValidStringOrObject(value)) {
1382+
return [value, new ObjectId(value)]
13831383
}
13841384

13851385
return [value]
@@ -1533,19 +1533,26 @@ export class MongoDriver extends Driver<Connection, Collection> {
15331533
const keysToSwap = Object.keys(condition).filter(key => {
15341534
const value = condition[key]
15351535

1536-
if (ObjectId.isValid(value)) {
1536+
if (ObjectId.isValidStringOrObject(value)) {
15371537
return true
15381538
}
15391539

15401540
return false
15411541
})
15421542

15431543
keysToSwap.forEach(key => {
1544+
if (!condition.$or) {
1545+
condition.$or = []
1546+
}
1547+
15441548
const objectId = condition[key]
15451549

1546-
condition[key] = {
1547-
$or: [{ [key]: objectId }, { [key]: new ObjectId(objectId) }]
1548-
}
1550+
condition.$or.push(
1551+
{ [key]: objectId },
1552+
{ [key]: new ObjectId(objectId) }
1553+
)
1554+
1555+
delete condition[key]
15491556
})
15501557

15511558
return condition
@@ -1557,19 +1564,26 @@ export class MongoDriver extends Driver<Connection, Collection> {
15571564
const keysToSwap = Object.keys(condition).filter(key => {
15581565
const value = condition[key]
15591566

1560-
if (ObjectId.isValid(value)) {
1567+
if (ObjectId.isValidStringOrObject(value)) {
15611568
return true
15621569
}
15631570

15641571
return false
15651572
})
15661573

15671574
keysToSwap.forEach(key => {
1575+
if (!condition.$or) {
1576+
condition.$or = []
1577+
}
1578+
15681579
const objectId = condition[key]
15691580

1570-
condition[key] = {
1571-
$or: [{ [key]: objectId }, { [key]: new ObjectId(objectId) }]
1572-
}
1581+
condition.$or.push(
1582+
{ [key]: objectId },
1583+
{ [key]: new ObjectId(objectId) }
1584+
)
1585+
1586+
delete condition[key]
15731587
})
15741588

15751589
return condition

src/helpers/ObjectId.ts

+7
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ export class ObjectId {
2424
return mongoose.isValidObjectId(objectId) && new mongoose.Types.ObjectId(objectId) == objectId
2525
}
2626

27+
/**
28+
* Validate if is a valid object id string or ObjectID object.
29+
*/
30+
public static isValidStringOrObject(objectId: any): boolean {
31+
return this.isValidString(objectId) || this.isValidObject(objectId)
32+
}
33+
2734
/**
2835
* Validate if is a valid object id string.
2936
*/

0 commit comments

Comments
 (0)