prime-sdk 1.1.4 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +115 -0
  2. package/dist/app.module.js +15 -1
  3. package/dist/app.module.js.map +1 -1
  4. package/dist/app.service.d.ts +3 -1
  5. package/dist/app.service.js +14 -10
  6. package/dist/app.service.js.map +1 -1
  7. package/dist/external/redis/interfaces/redis.interface.d.ts +7 -0
  8. package/dist/external/redis/interfaces/redis.interface.js +5 -0
  9. package/dist/external/redis/interfaces/redis.interface.js.map +1 -0
  10. package/dist/external/redis/redis.provider.d.ts +5 -0
  11. package/dist/external/redis/redis.provider.js +46 -0
  12. package/dist/external/redis/redis.provider.js.map +1 -0
  13. package/dist/external/redis/redis.service.d.ts +10 -0
  14. package/dist/external/redis/redis.service.js +45 -0
  15. package/dist/external/redis/redis.service.js.map +1 -0
  16. package/dist/external/redis/types/ioredis.types.d.ts +19 -0
  17. package/dist/external/redis/types/ioredis.types.js +9 -0
  18. package/dist/external/redis/types/ioredis.types.js.map +1 -0
  19. package/dist/index.d.ts +5 -1
  20. package/dist/index.js +9 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/lib/cache/cache.d.ts +10 -0
  23. package/dist/lib/cache/cache.js +38 -0
  24. package/dist/lib/cache/cache.js.map +1 -0
  25. package/dist/lib/cache/cache.module.d.ts +5 -0
  26. package/dist/lib/cache/cache.module.js +37 -0
  27. package/dist/lib/cache/cache.module.js.map +1 -0
  28. package/dist/lib/cache/interfaces/cache.interface.d.ts +7 -0
  29. package/dist/lib/cache/interfaces/cache.interface.js +5 -0
  30. package/dist/lib/cache/interfaces/cache.interface.js.map +1 -0
  31. package/dist/tsconfig.build.tsbuildinfo +1 -1
  32. package/package.json +2 -1
  33. package/src/app.module.ts +15 -1
  34. package/src/app.service.ts +14 -2
  35. package/src/external/redis/interfaces/redis.interface.ts +13 -0
  36. package/src/external/redis/redis.provider.ts +41 -0
  37. package/src/external/redis/redis.service.ts +32 -0
  38. package/src/external/redis/types/ioredis.types.ts +23 -0
  39. package/src/index.ts +15 -0
  40. package/src/lib/cache/cache.module.ts +28 -0
  41. package/src/lib/cache/cache.ts +22 -0
  42. package/src/lib/cache/interfaces/cache.interface.ts +13 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prime-sdk",
3
- "version": "1.1.4",
3
+ "version": "1.2.0",
4
4
  "description": "swiss army knife",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,6 +32,7 @@
32
32
  "@nestjs/config": "^3.2.2",
33
33
  "@nestjs/core": "^10.0.0",
34
34
  "@nestjs/platform-express": "^10.0.0",
35
+ "ioredis": "^5.4.1",
35
36
  "reflect-metadata": "^0.2.0",
36
37
  "rxjs": "^7.8.1"
37
38
  },
package/src/app.module.ts CHANGED
@@ -5,6 +5,10 @@ import { StorageModule } from './lib/storage/storage.module';
5
5
  import { EventModule } from './lib/events/event.module';
6
6
  import { CryptoModule } from './lib/crypto/crypto.module';
7
7
  import { EmailModule } from './lib/email/email.module';
8
+ import { CacheModule } from './lib/cache/cache.module';
9
+ import { TypeRedis } from './external/redis/types/ioredis.types';
10
+ import { ICache } from './lib/cache/interfaces/cache.interface';
11
+ import { Cache } from './lib/cache/cache';
8
12
 
9
13
  //Example
10
14
  @Module({
@@ -49,8 +53,18 @@ import { EmailModule } from './lib/email/email.module';
49
53
  endpoint: 'http://localhost:4566/',
50
54
  region: 'us-east-1',
51
55
  }),
56
+ CacheModule.forRoot({
57
+ type: TypeRedis.SIMPLE,
58
+ connection: {
59
+ host: 'localhost',
60
+ port: 6379,
61
+ },
62
+ redisOptions: {
63
+ db: 5,
64
+ },
65
+ }),
52
66
  ],
53
- providers: [AppService],
67
+ providers: [AppService, { provide: ICache, useClass: Cache }],
54
68
  exports: [],
55
69
  })
56
70
  export class AppModule {}
@@ -1,9 +1,10 @@
1
- import { Injectable } from '@nestjs/common';
1
+ import { Inject, Injectable } from '@nestjs/common';
2
2
  import { IConsumer } from './lib/queue/interfaces/consumer.interface';
3
3
  import { Message } from '@aws-sdk/client-sqs';
4
4
  import { Queue } from './lib/queue/queue';
5
5
  import { Storage } from './lib/storage/storage';
6
6
  import { Events } from './lib/events/events';
7
+ import { ICache } from './lib/cache/interfaces/cache.interface';
7
8
 
8
9
  @Injectable()
9
10
  export class AppService implements IConsumer {
@@ -11,6 +12,7 @@ export class AppService implements IConsumer {
11
12
  private readonly queueHandler: Queue,
12
13
  private readonly storage: Storage,
13
14
  private readonly event: Events,
15
+ @Inject(ICache) private readonly cache: ICache,
14
16
  ) {
15
17
  this.queueHandler.handler({
16
18
  QueueUrl: `${'teste'}`,
@@ -20,9 +22,19 @@ export class AppService implements IConsumer {
20
22
  });
21
23
  }
22
24
 
23
- handleMessage(message: Message | Message[]): Promise<void> {
25
+ async handleMessage(message: Message | Message[]): Promise<void> {
24
26
  console.log(message);
25
27
 
28
+ const key = `data:${new Date().toISOString()}`;
29
+
30
+ this.cache.set(key, JSON.stringify(message));
31
+
32
+ const value = await this.cache.get(key);
33
+
34
+ console.log(value);
35
+
36
+ this.cache.delete(key);
37
+
26
38
  const data = JSON.stringify({ teste: new Date().toISOString() });
27
39
 
28
40
  this.event.triggerEvent({
@@ -0,0 +1,13 @@
1
+ export interface IRedisService {
2
+ setRedisKey(
3
+ key: string,
4
+ value: Date | number | Buffer | string,
5
+ ttl?: number,
6
+ ): Promise<void>;
7
+
8
+ getRedisKey(key: string): Promise<string>;
9
+
10
+ deleteRedisKey(key: string): Promise<void>;
11
+ }
12
+
13
+ export const IRedisService = Symbol('IRedisService');
@@ -0,0 +1,41 @@
1
+ import { DynamicModule, Module } from '@nestjs/common';
2
+ import { Redis, Cluster } from 'ioredis';
3
+ import {
4
+ ClusterRedisSetup,
5
+ SimpleRedisSetup,
6
+ TypeRedis,
7
+ } from './types/ioredis.types';
8
+
9
+ const RedisProvider = (params: SimpleRedisSetup | ClusterRedisSetup) => {
10
+ return {
11
+ provide: 'CONNECTION_REDIS',
12
+ useFactory: (): Redis | Cluster => {
13
+ switch (params.type) {
14
+ case TypeRedis.SIMPLE:
15
+ return new Redis({
16
+ port: params.connection.port,
17
+ host: params.connection.host,
18
+ ...(params.redisOptions && { ...params.redisOptions }),
19
+ });
20
+ case TypeRedis.CLUSTER:
21
+ const cluster = new Redis.Cluster(
22
+ params.nodes,
23
+ params.clusterOptions,
24
+ );
25
+ return cluster;
26
+ }
27
+ },
28
+ };
29
+ };
30
+
31
+ @Module({})
32
+ export class RedisModule {
33
+ static forRoot(params: SimpleRedisSetup | ClusterRedisSetup): DynamicModule {
34
+ const redisProvider = RedisProvider(params);
35
+ return {
36
+ module: RedisModule,
37
+ providers: [redisProvider],
38
+ exports: [redisProvider],
39
+ };
40
+ }
41
+ }
@@ -0,0 +1,32 @@
1
+ import { Inject, Injectable } from '@nestjs/common';
2
+ import { Cluster, Redis } from 'ioredis';
3
+ import { IRedisService } from './interfaces/redis.interface';
4
+
5
+ @Injectable()
6
+ export class RedisService implements IRedisService {
7
+ constructor(
8
+ @Inject('CONNECTION_REDIS') private readonly client: Cluster | Redis,
9
+ ) {}
10
+
11
+ async setRedisKey(
12
+ key: string,
13
+ value: Date | number | Buffer | string,
14
+ ttl?: number,
15
+ ): Promise<void> {
16
+ if (value instanceof Date) {
17
+ value = value.toISOString();
18
+ }
19
+ if (ttl) {
20
+ await this.client.set(key, value, 'EX', ttl);
21
+ } else {
22
+ await this.client.set(key, value);
23
+ }
24
+ }
25
+ async getRedisKey(key: string): Promise<string> {
26
+ return await this.client.get(key);
27
+ }
28
+
29
+ async deleteRedisKey(key: string): Promise<void> {
30
+ await this.client.del(key);
31
+ }
32
+ }
@@ -0,0 +1,23 @@
1
+ import { ClusterOptions, RedisOptions } from 'ioredis';
2
+
3
+ export enum TypeRedis {
4
+ SIMPLE = 'simple',
5
+ CLUSTER = 'cluster',
6
+ }
7
+
8
+ export type Connection = {
9
+ port: number;
10
+ host: string;
11
+ };
12
+
13
+ export type SimpleRedisSetup = {
14
+ type: TypeRedis.SIMPLE;
15
+ connection: Connection;
16
+ redisOptions?: RedisOptions;
17
+ };
18
+
19
+ export type ClusterRedisSetup = {
20
+ type: TypeRedis.CLUSTER;
21
+ nodes: Connection[];
22
+ clusterOptions?: ClusterOptions;
23
+ };
package/src/index.ts CHANGED
@@ -18,6 +18,15 @@ import { CryptoModule } from './lib/crypto/crypto.module';
18
18
  import { Crypto } from './lib/crypto/crypto';
19
19
  import { ICrypto } from './lib/crypto/interfaces/crypto.interface';
20
20
 
21
+ import { CacheModule } from './lib/cache/cache.module';
22
+ import { Cache } from './lib/cache/cache';
23
+ import { ICache } from './lib/cache/interfaces/cache.interface';
24
+ import {
25
+ SimpleRedisSetup,
26
+ ClusterRedisSetup,
27
+ TypeRedis,
28
+ } from './external/redis/types/ioredis.types';
29
+
21
30
  export {
22
31
  QueueModule,
23
32
  Queue,
@@ -34,4 +43,10 @@ export {
34
43
  CryptoModule,
35
44
  Crypto,
36
45
  ICrypto,
46
+ CacheModule,
47
+ Cache,
48
+ ICache,
49
+ SimpleRedisSetup,
50
+ ClusterRedisSetup,
51
+ TypeRedis,
37
52
  };
@@ -0,0 +1,28 @@
1
+ import { DynamicModule, Module } from '@nestjs/common';
2
+ import { RedisModule } from '../../external/redis/redis.provider';
3
+ import { RedisService } from '../../external/redis/redis.service';
4
+ import {
5
+ ClusterRedisSetup,
6
+ SimpleRedisSetup,
7
+ } from '../../external/redis/types/ioredis.types';
8
+ import { IRedisService } from '../../external/redis/interfaces/redis.interface';
9
+ import { ICache } from './interfaces/cache.interface';
10
+ import { Cache } from './cache';
11
+
12
+ @Module({})
13
+ export class CacheModule {
14
+ static forRoot(params: SimpleRedisSetup | ClusterRedisSetup): DynamicModule {
15
+ return {
16
+ module: CacheModule,
17
+ imports: [RedisModule.forRoot(params)],
18
+ providers: [
19
+ { provide: ICache, useClass: Cache },
20
+ { provide: IRedisService, useClass: RedisService },
21
+ ],
22
+ exports: [
23
+ { provide: ICache, useClass: Cache },
24
+ { provide: IRedisService, useClass: RedisService },
25
+ ],
26
+ };
27
+ }
28
+ }
@@ -0,0 +1,22 @@
1
+ import { Inject, Injectable } from '@nestjs/common';
2
+ import { ICache } from './interfaces/cache.interface';
3
+ import { IRedisService } from 'src/external/redis/interfaces/redis.interface';
4
+
5
+ @Injectable()
6
+ export class Cache implements ICache {
7
+ constructor(@Inject(IRedisService) private readonly client: IRedisService) {}
8
+ async set(
9
+ key: string,
10
+ value: string | number | Date | Buffer,
11
+ ttl?: number,
12
+ ): Promise<void> {
13
+ await this.client.setRedisKey(key, value, ttl);
14
+ }
15
+ async get(key: string): Promise<string> {
16
+ return await this.client.getRedisKey(key);
17
+ }
18
+
19
+ async delete(key: string): Promise<void> {
20
+ await this.client.deleteRedisKey(key);
21
+ }
22
+ }
@@ -0,0 +1,13 @@
1
+ export interface ICache {
2
+ set(
3
+ key: string,
4
+ value: Date | number | Buffer | string,
5
+ ttl?: number,
6
+ ): Promise<void>;
7
+
8
+ get(key: string): Promise<string>;
9
+
10
+ delete(key: string): Promise<void>;
11
+ }
12
+
13
+ export const ICache = Symbol('ICache');