Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
This commit is contained in:
Denis Bykhov 2021-12-08 15:14:55 +06:00 committed by GitHub
parent 9018fc143e
commit b926118e84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 43 additions and 15 deletions

View File

@ -9811,7 +9811,7 @@ packages:
dev: false
file:projects/contact-resources.tgz_476f694f64637160ae71e12ff57815b9:
resolution: {integrity: sha512-I563510HapGECL9TC1qo8OQsLhKaMl/ttdIWN6vL+XOPcJY+YnmLrMmo0UNMcbCo8liNfvrNmjgbnjpSdl2ikg==, tarball: file:projects/contact-resources.tgz}
resolution: {integrity: sha512-5aEH1fHFn/BbM8mJcS2gPNW9koEkNtX8P3uC+iEID5xQPUuJV5rsfba17/Iq2bYj5DeLkyvNO5wAwoECwVCvRA==, tarball: file:projects/contact-resources.tgz}
id: file:projects/contact-resources.tgz
name: '@rush-temp/contact-resources'
version: 0.0.0
@ -10140,7 +10140,7 @@ packages:
dev: false
file:projects/lead-resources.tgz_476f694f64637160ae71e12ff57815b9:
resolution: {integrity: sha512-JO4mPZzFqoE1LYtroNwlQAUPqc2nbyarfsVlsnAC0uX87jvl7HA78tCDVzuh8LHZfexY0ilrcu1Y0ItOymdT9g==, tarball: file:projects/lead-resources.tgz}
resolution: {integrity: sha512-o80Jqqi39oV9wTk/nhjlU53bHy92gsqqCQo1nWTsPLlMB+R1nYY5/Yw/GFxsuVHSzbzjmahUnkHIOxltJMSTig==, tarball: file:projects/lead-resources.tgz}
id: file:projects/lead-resources.tgz
name: '@rush-temp/lead-resources'
version: 0.0.0
@ -10407,7 +10407,7 @@ packages:
dev: false
file:projects/model-lead.tgz_typescript@4.4.3:
resolution: {integrity: sha512-uj6uS5KfwNIUxmSBOMO5fZT/OlT3JgXlo4OGEmg0LSGHRXUBI5nAkbLevY81kVQbtN3mKB7MPz1nLm09cxuhSw==, tarball: file:projects/model-lead.tgz}
resolution: {integrity: sha512-qEMZ6aUEiEZgFvIMcqR8lTVkKKiUNM4eAa5OeLjnDmY1TkFF60EJpnE0e2D1SzO8zPdS+cDH+jT9FqRvXtkO9A==, tarball: file:projects/model-lead.tgz}
id: file:projects/model-lead.tgz
name: '@rush-temp/model-lead'
version: 0.0.0
@ -10846,7 +10846,7 @@ packages:
dev: false
file:projects/prod.tgz_sass@1.42.1+typescript@4.4.3:
resolution: {integrity: sha512-BsM4OYUp0S0TI6LsvclxVQ0kG6U9Oj4gbGbD38jUPIy02pVP82bS2WrAWh7/s3H4j+sbUnmmrVRulaDAcw34rw==, tarball: file:projects/prod.tgz}
resolution: {integrity: sha512-EiXyXpntXiKwZYik5KcFitoFzvuRz3SaDN5fdwaB+IYXKXEk7Y+9Q/z8CWX4xpLZDBMDMQyTuj/fJRO2qxC52w==, tarball: file:projects/prod.tgz}
id: file:projects/prod.tgz
name: '@rush-temp/prod'
version: 0.0.0
@ -10920,7 +10920,7 @@ packages:
dev: false
file:projects/recruit-resources.tgz_476f694f64637160ae71e12ff57815b9:
resolution: {integrity: sha512-jJZMXXqVj+ovkyBhJrgToGioIbSmbf7otw3GrGcO/SuZ87j21EZHEY5vKaFAhuXDOriTz7UeajmGmUsx2H7okA==, tarball: file:projects/recruit-resources.tgz}
resolution: {integrity: sha512-V7iAy6fX/2McQ0gZjvzHL4qA4ETElxXHEBh6ZnXBuYE8ht0sqLIXSGdgJstxyR++MWTe5ZM7l4GS/re3zYGdnw==, tarball: file:projects/recruit-resources.tgz}
id: file:projects/recruit-resources.tgz
name: '@rush-temp/recruit-resources'
version: 0.0.0
@ -11241,7 +11241,7 @@ packages:
dev: false
file:projects/task-resources.tgz_e1367da94684b005adf08f025c517b1a:
resolution: {integrity: sha512-zueI7N0xsHL7n4RRTJzNqXaDvrdC/BgotXDMVEFz4TKTvJuwGZ/39TfLaLQM0b/AWvDJV3iG3WS0z9ZMbtHc2g==, tarball: file:projects/task-resources.tgz}
resolution: {integrity: sha512-8q7drsS3cuBhtj4PIl+/QIH8QDt0fZWk89fH3FxY/3Oog8Xd5dGkBH4YdPHUSyk9k5u9iS/P8OwvR9CKMBmxRg==, tarball: file:projects/task-resources.tgz}
id: file:projects/task-resources.tgz
name: '@rush-temp/task-resources'
version: 0.0.0
@ -11427,7 +11427,7 @@ packages:
dev: false
file:projects/tool.tgz:
resolution: {integrity: sha512-klTUXsaa1dlq4wR1u+u3vJ8Vh8Z+StBadUgTZ1r0aqYjVXx9npJFqF+PHucl2LbZ0gDeHqC7crbxfGuui9na1Q==, tarball: file:projects/tool.tgz}
resolution: {integrity: sha512-yYYJSLJDN7MZB9u4wzXJuUQfQdx3K5eJ1xtcuniq/NO7c2Am0tmCP5F64l7LyGc+kUQpOoj3vBl58H1tjtgJfw==, tarball: file:projects/tool.tgz}
name: '@rush-temp/tool'
version: 0.0.0
dependencies:
@ -11439,6 +11439,7 @@ packages:
'@typescript-eslint/eslint-plugin': 5.4.0_87dbf04088b125598d0271706532eaf3
'@typescript-eslint/parser': 5.4.0_eslint@7.32.0+typescript@4.4.3
commander: 8.2.0
cross-env: 7.0.3
esbuild: 0.12.29
eslint: 7.32.0
eslint-config-standard-with-typescript: 21.0.1_05a8ea1454e6ca4c9f98b94b8f3abf9c

View File

@ -12,11 +12,12 @@
"bundle": "esbuild src/index.ts --bundle --minify --platform=node > bundle.js",
"docker:build": "docker build -t anticrm/tool .",
"docker:push": "docker push anticrm/tool",
"run-local": "MINIO_ACCESS_KEY=minioadmin MINIO_SECRET_KEY=minioadmin MONGO_URL=mongodb://localhost:27017 TRANSACTOR_URL=ws:/localhost:3333 MINIO_ENDPOINT=localhost TELEGRAM_DATABASE=telegram-service ts-node ./src/index.ts",
"run-local": "cross-env MINIO_ACCESS_KEY=minioadmin MINIO_SECRET_KEY=minioadmin MONGO_URL=mongodb://localhost:27017 TRANSACTOR_URL=ws:/localhost:3333 MINIO_ENDPOINT=localhost TELEGRAM_DATABASE=telegram-service ts-node ./src/index.ts",
"lint": "eslint src",
"format": "prettier --write src && eslint --fix src"
},
"devDependencies": {
"cross-env": "^7.0.3",
"@anticrm/platform-rig": "~0.6.0",
"@types/heft-jest": "^1.0.2",
"@typescript-eslint/eslint-plugin": "^5.4.0",

View File

@ -114,10 +114,10 @@ export abstract class MemDb extends TxProcessor {
result = findProperty(result, key, value)
}
if (options?.sort !== undefined) resultSort(result, options?.sort)
if (options?.lookup !== undefined) result = this.lookup(result as T[], options.lookup)
if (options?.sort !== undefined) resultSort(result, options?.sort)
result = result.slice(0, options?.limit)
return clone(result) as T[]
}

View File

@ -75,7 +75,15 @@ function arrayOrValue (vv: any): any[] {
export function resultSort<T extends Doc> (result: T[], sortOptions: SortingQuery<T>): void {
const sortFunc = (a: any, b: any): number => {
for (const key in sortOptions) {
const result = typeof a[key] === 'string' ? a[key].localeCompare(b[key]) : a[key] - b[key]
let aValue = getNestedValue(key, a)
if (typeof aValue === 'object') {
aValue = JSON.stringify(aValue)
}
let bValue = getNestedValue(key, b)
if (typeof bValue === 'object') {
bValue = JSON.stringify(bValue)
}
const result = typeof aValue === 'string' ? aValue.localeCompare(bValue) : aValue - bValue
if (result !== 0) return result * (sortOptions[key] as number)
}
return 0

View File

@ -41,7 +41,7 @@ function Delete (object: Doc): void {
label: 'Delete object',
message: 'Do you want to delete this object?'
}, undefined, (result) => {
if (result !== undefined) {
if (result) {
deleteObject(getClient(), object)
}
})

View File

@ -92,6 +92,23 @@ abstract class MongoAdapterBase extends TxProcessor {
pipeline.push({ $lookup: step })
}
}
if (options.sort !== undefined) {
const sort = {} as any
for (const _key in options.sort) {
let key = _key as string
if (_key.startsWith('$lookup.')) {
key = key.replace('$lookup.', '')
const keys = key.split('.')
keys[0] = keys[0] + '_lookup'
key = keys.join('.')
}
sort[key] = options.sort[_key] === SortingOrder.Ascending ? 1 : -1
}
pipeline.push({ $sort: sort })
}
if (options.limit !== undefined) {
pipeline.push({ $limit: options.limit })
}
const domain = this.hierarchy.getDomain(clazz)
const cursor = this.db.collection(domain).aggregate(pipeline)
const result = (await cursor.toArray()) as FindResult<T>
@ -125,9 +142,7 @@ abstract class MongoAdapterBase extends TxProcessor {
}
const domain = this.hierarchy.getDomain(_class)
let cursor = this.db.collection(domain).find<T>(this.translateQuery(_class, query))
if (options?.limit !== undefined) {
cursor = cursor.limit(options.limit)
}
if (options !== null && options !== undefined) {
if (options.sort !== undefined) {
const sort: Sort = {}
@ -137,6 +152,9 @@ abstract class MongoAdapterBase extends TxProcessor {
}
cursor = cursor.sort(sort)
}
if (options.limit !== undefined) {
cursor = cursor.limit(options.limit)
}
}
return await cursor.toArray()
}