diff --git a/.adonisrc.json b/.adonisrc.json index f362a26..0c3927c 100644 --- a/.adonisrc.json +++ b/.adonisrc.json @@ -23,7 +23,9 @@ "@adonisjs/lucid", "@adonisjs/auth", "@adonisjs/session", - "@adonisjs/view" + "@adonisjs/view", + "@kaperskyguru/adonis-cache", + "@adonisjs/redis" ], "aceProviders": [ "@adonisjs/repl" diff --git a/.env.example b/.env.example index 6a8b734..ff2b0a0 100644 --- a/.env.example +++ b/.env.example @@ -11,3 +11,7 @@ MYSQL_PASSWORD= MYSQL_DB_NAME=lucid SESSION_DRIVER=cookie CACHE_VIEWS=false +REDIS_CONNECTION=local +REDIS_HOST=127.0.0.1 +REDIS_PORT=6379 +REDIS_PASSWORD= diff --git a/config/cache.ts b/config/cache.ts new file mode 100644 index 0000000..60d744d --- /dev/null +++ b/config/cache.ts @@ -0,0 +1,56 @@ +/* + * @kaperskyguru/adonis-cache + * + * (c) Solomon Eseme + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import Env from '@ioc:Adonis/Core/Env' +import { CacheConfig } from '@ioc:Kaperskyguru/Adonis-Cache' + +const cacheConfig: CacheConfig = { + driver: Env.get('CACHE_DRIVER') as string, + + drivers: { + file: { + driver: 'file', + path: 'cache/data', + }, + + array: { + driver: 'array', + serialize: false, + }, + + database: { + driver: 'database', + table: 'cache', + connection: null, + lock_connection: null, + }, + + redis: { + driver: 'redis', + connection: 'cache', + lock_connection: 'default', + }, + + memcached: { + driver: Env.get('CACHE_DRIVER', 'memcached') as string, + persistent_id: Env.get('MEMCACHED_PERSISTENT_ID') as string, + sasl: [Env.get('MEMCACHED_USERNAME') as string, Env.get('MEMCACHED_PASSWORD') as string], + options: { + // Memcached::OPT_CONNECT_TIMEOUT : 2000, + }, + servers: { + host: Env.get('MEMCACHED_HOST', '127.0.0.1') as string, + port: Env.get('MEMCACHED_PORT', 11211) as string, + weight: 100, + }, + }, + }, +} + +export default cacheConfig diff --git a/config/redis.ts b/config/redis.ts new file mode 100644 index 0000000..9138ae6 --- /dev/null +++ b/config/redis.ts @@ -0,0 +1,46 @@ +/** + * Config source: https://git.io/JemcF + * + * Feel free to let us know via PR, if you find something broken in this config + * file. + */ + +import Env from '@ioc:Adonis/Core/Env' +import { redisConfig } from '@adonisjs/redis/build/config' + +/* +|-------------------------------------------------------------------------- +| Redis configuration +|-------------------------------------------------------------------------- +| +| Following is the configuration used by the Redis provider to connect to +| the redis server and execute redis commands. +| +| Do make sure to pre-define the connections type inside `contracts/redis.ts` +| file for AdonisJs to recognize connections. +| +| Make sure to check `contracts/redis.ts` file for defining extra connections +*/ +export default redisConfig({ + connection: Env.get('REDIS_CONNECTION'), + + connections: { + /* + |-------------------------------------------------------------------------- + | The default connection + |-------------------------------------------------------------------------- + | + | The main connection you want to use to execute redis commands. The same + | connection will be used by the session provider, if you rely on the + | redis driver. + | + */ + local: { + host: Env.get('REDIS_HOST'), + port: Env.get('REDIS_PORT'), + password: Env.get('REDIS_PASSWORD', ''), + db: 0, + keyPrefix: '', + }, + }, +}) diff --git a/contracts/redis.ts b/contracts/redis.ts new file mode 100644 index 0000000..c70ccf3 --- /dev/null +++ b/contracts/redis.ts @@ -0,0 +1,13 @@ +/** + * Contract source: https://git.io/JemcN + * + * Feel free to let us know via PR, if you find something broken in this config + * file. + */ + +import { InferConnectionsFromConfig } from '@adonisjs/redis/build/config' +import redisConfig from '../config/redis' + +declare module '@ioc:Adonis/Addons/Redis' { + interface RedisConnectionsList extends InferConnectionsFromConfig {} +} diff --git a/env.ts b/env.ts index 122dd43..e387558 100644 --- a/env.ts +++ b/env.ts @@ -27,5 +27,9 @@ export default Env.rules({ MYSQL_USER: Env.schema.string(), MYSQL_PASSWORD: Env.schema.string.optional(), MYSQL_DB_NAME: Env.schema.string(), - SESSION_DRIVER: Env.schema.string() + SESSION_DRIVER: Env.schema.string(), + REDIS_CONNECTION: Env.schema.enum(["local"] as const), + REDIS_HOST: Env.schema.string({ format: "host" }), + REDIS_PORT: Env.schema.number(), + REDIS_PASSWORD: Env.schema.string.optional(), }); diff --git a/package-lock.json b/package-lock.json index 5e53ac9..5ac7778 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,9 +11,11 @@ "@adonisjs/auth": "^8.2.3", "@adonisjs/core": "^5.9.0", "@adonisjs/lucid": "^18.4.0", + "@adonisjs/redis": "^7.3.4", "@adonisjs/repl": "^3.1.11", "@adonisjs/session": "^6.4.0", "@adonisjs/view": "^6.2.0", + "@kaperskyguru/adonis-cache": "^2.1.1", "axios": "^1.4.0", "child_process": "^1.0.2", "chokidar": "^3.5.3", @@ -480,6 +482,19 @@ "truncatise": "0.0.8" } }, + "node_modules/@adonisjs/redis": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@adonisjs/redis/-/redis-7.3.4.tgz", + "integrity": "sha512-74SApmgimjwU8QflnhANeo7CpQeP9aoObM217LJ51AtKwTvnb0yXaqdj2v60G9uCqcqZAIFWJmeUdXGgUwGcXw==", + "dependencies": { + "@poppinss/utils": "^5.0.0", + "@types/ioredis": "^4.28.10", + "ioredis": "^5.2.3" + }, + "peerDependencies": { + "@adonisjs/core": "^5.1.0" + } + }, "node_modules/@adonisjs/repl": { "version": "3.1.11", "resolved": "https://registry.npmjs.org/@adonisjs/repl/-/repl-3.1.11.tgz", @@ -837,6 +852,11 @@ "npm": ">=6.14.13" } }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, "node_modules/@japa/api-client": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/@japa/api-client/-/api-client-1.4.4.tgz", @@ -1027,6 +1047,23 @@ "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", "dev": true }, + "node_modules/@kaperskyguru/adonis-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@kaperskyguru/adonis-cache/-/adonis-cache-2.1.1.tgz", + "integrity": "sha512-FRBHd/QSAC/aUTQS0MW6h31O8CFUPy62U0GH5z11pZWVl1NmsbU8DBdYOQA45jyTjKR1cErLyI+lWqgrG0l9xw==", + "dependencies": { + "fs": "^0.0.1-security" + }, + "peerDependencies": { + "@adonisjs/core": "^5.1.1", + "@adonisjs/redis": "^7.0.2" + }, + "peerDependenciesMeta": { + "@adonisjs/redis": { + "optional": true + } + } + }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -1324,6 +1361,14 @@ "resolved": "https://registry.npmjs.org/@types/he/-/he-1.2.1.tgz", "integrity": "sha512-CdNmJMcSqX1BiP3iSsWt+VgixndRIDGzWyaGpBnW3i5heATSk5bJu2j3buutsoBQNjyryqxaNpr8M7fRsGL15w==" }, + "node_modules/@types/ioredis": { + "version": "4.28.10", + "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.28.10.tgz", + "integrity": "sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -2591,6 +2636,14 @@ "node": ">=6" } }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/co-compose": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/co-compose/-/co-compose-7.0.3.tgz", @@ -4874,6 +4927,29 @@ "node": ">= 0.10" } }, + "node_modules/ioredis": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", + "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, "node_modules/ip": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", @@ -5544,6 +5620,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", @@ -5561,6 +5642,11 @@ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -7370,6 +7456,25 @@ "esprima": "~4.0.0" } }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -8235,6 +8340,11 @@ "get-source": "^2.0.12" } }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -9605,6 +9715,16 @@ } } }, + "@adonisjs/redis": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@adonisjs/redis/-/redis-7.3.4.tgz", + "integrity": "sha512-74SApmgimjwU8QflnhANeo7CpQeP9aoObM217LJ51AtKwTvnb0yXaqdj2v60G9uCqcqZAIFWJmeUdXGgUwGcXw==", + "requires": { + "@poppinss/utils": "^5.0.0", + "@types/ioredis": "^4.28.10", + "ioredis": "^5.2.3" + } + }, "@adonisjs/repl": { "version": "3.1.11", "resolved": "https://registry.npmjs.org/@adonisjs/repl/-/repl-3.1.11.tgz", @@ -9895,6 +10015,11 @@ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.1.0.tgz", "integrity": "sha512-38DT60rumHfBYynif3lmtxMqMqmsOQIxQgEuPZxCk2yUYN0eqWpTACgxi0VpidvsJB8CRxCpvP7B3anK85FjtQ==" }, + "@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, "@japa/api-client": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/@japa/api-client/-/api-client-1.4.4.tgz", @@ -10071,6 +10196,14 @@ "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", "dev": true }, + "@kaperskyguru/adonis-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@kaperskyguru/adonis-cache/-/adonis-cache-2.1.1.tgz", + "integrity": "sha512-FRBHd/QSAC/aUTQS0MW6h31O8CFUPy62U0GH5z11pZWVl1NmsbU8DBdYOQA45jyTjKR1cErLyI+lWqgrG0l9xw==", + "requires": { + "fs": "^0.0.1-security" + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -10333,6 +10466,14 @@ "resolved": "https://registry.npmjs.org/@types/he/-/he-1.2.1.tgz", "integrity": "sha512-CdNmJMcSqX1BiP3iSsWt+VgixndRIDGzWyaGpBnW3i5heATSk5bJu2j3buutsoBQNjyryqxaNpr8M7fRsGL15w==" }, + "@types/ioredis": { + "version": "4.28.10", + "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.28.10.tgz", + "integrity": "sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==", + "requires": { + "@types/node": "*" + } + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -11312,6 +11453,11 @@ "shallow-clone": "^3.0.0" } }, + "cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==" + }, "co-compose": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/co-compose/-/co-compose-7.0.3.tgz", @@ -13081,6 +13227,22 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, + "ioredis": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", + "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", + "requires": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + } + }, "ip": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", @@ -13582,6 +13744,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", @@ -13599,6 +13766,11 @@ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -14983,6 +15155,19 @@ "esprima": "~4.0.0" } }, + "redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==" + }, + "redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "requires": { + "redis-errors": "^1.0.0" + } + }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -15651,6 +15836,11 @@ "get-source": "^2.0.12" } }, + "standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", diff --git a/package.json b/package.json index f1ff2c8..6040b81 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,11 @@ "@adonisjs/auth": "^8.2.3", "@adonisjs/core": "^5.9.0", "@adonisjs/lucid": "^18.4.0", + "@adonisjs/redis": "^7.3.4", "@adonisjs/repl": "^3.1.11", "@adonisjs/session": "^6.4.0", "@adonisjs/view": "^6.2.0", + "@kaperskyguru/adonis-cache": "^2.1.1", "axios": "^1.4.0", "child_process": "^1.0.2", "chokidar": "^3.5.3", diff --git a/start/routes.ts b/start/routes.ts index de5e271..6be8ea8 100644 --- a/start/routes.ts +++ b/start/routes.ts @@ -27,6 +27,8 @@ import moment from "moment"; import Product from "App/Models/Product"; import { sendDeviceInfora } from "App/utils/sendDeviceInfor"; import InfoDevice from "App/Models/InfoDevice"; +import LogReport from "App/Models/LogReport"; +import Cache from "@ioc:Kaperskyguru/Adonis-Cache"; runtimeCheckLogs(Env.get("FOLDER_LOGS")); @@ -300,11 +302,15 @@ Route.post("/api/sendMailInforDevice", async () => { // Route.post("/api/test", async () => { // try { -// let abc = await InfoDevice.findBy('SN', 'FHK0935F0Z3') -// let pattern = /[\x00-\x20\x7F]/g; -// if(abc?.$extras.PID.match(pattern)){ -// return "Loại" -// } +// const logs = await Cache.get('logs') + +// if(logs){ +// return {type: "cache", data: logs} +// }else{ +// let data = await LogReport.all(); +// Cache.set('logs', data, 120) +// return {type: "no cache", data: data} +// } // } catch (error) { // console.log(error) // } diff --git a/tsconfig.json b/tsconfig.json index 723c8a7..4251691 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -32,7 +32,9 @@ "@adonisjs/lucid", "@adonisjs/auth", "@adonisjs/session", - "@adonisjs/view" + "@adonisjs/view", + "@kaperskyguru/adonis-cache", + "@adonisjs/redis" ] } } \ No newline at end of file