Skip to content

Instantly share code, notes, and snippets.

View lucasraziel's full-sized avatar

LUCAS SOARES DO REGO lucasraziel

  • FVSystem
  • Aracaju-SE-Brasil
View GitHub Profile
@lucasraziel
lucasraziel / RedisCacheProvider.ts
Created May 18, 2022 23:29
RedisCacheProvider.ts in __tests__ in Usando NPM Package para criar uma Arquitetura Limpa - Parte 3
import { Data } from '@fvsystem/cache-template';
import RedisCacheProvider from '../src/provider/RedisCacheProvider';
jest.mock('ioredis');
let redisCacheProvider: RedisCacheProvider;
describe('RedisCacheProvider', () => {
beforeEach(() => {
redisCacheProvider = new RedisCacheProvider({});
@lucasraziel
lucasraziel / ioredis.ts
Last active May 18, 2022 23:25
ioredis.ts in Usando NPM Package para criar uma Arquitetura Limpa - Parte 3
/* eslint-disable no-restricted-syntax */
import { FakeCacheProvider } from '@fvsystem/cache-template';
import { RedisOptions } from 'ioredis';
class Redis {
fakeCache: FakeCacheProvider;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
constructor(options: RedisOptions) {
this.fakeCache = new FakeCacheProvider();
@lucasraziel
lucasraziel / index.ts
Created May 18, 2022 23:20
index.ts in Usando NPM Package para criar uma Arquitetura Limpa - Parte 3
import RedisCacheProvider from './provider/RedisCacheProvider';
export default RedisCacheProvider;
@lucasraziel
lucasraziel / RedisCacheProvider.ts
Created May 18, 2022 23:17
RedisCacheProvider in Usando NPM Package para criar uma Arquitetura Limpa - Parte 3
import { CacheTemplate, Data, SaveOptions } from '@fvsystem/cache-template';
import Redis, { RedisOptions } from 'ioredis';
import debug from 'debug';
const log = debug('fvsystem-template-cache');
export default class RedisCacheProvider implements CacheTemplate {
private client: Redis;
constructor(options: RedisOptions) {
@lucasraziel
lucasraziel / index.ts
Created May 18, 2022 22:52
index.ts cache-template Usando NPM Package para criar uma Arquitetura Limpa - Parte 3
import Data from './dto/data';
import SaveOptions from './dto/saveOptions';
import CacheTemplate from './template/CacheTemplate';
import FakeCacheProvider from './fake/FakeCacheProvider';
export { Data, CacheTemplate, FakeCacheProvider, SaveOptions };
export default CacheTemplate;
@lucasraziel
lucasraziel / test.js
Created May 13, 2022 21:03
test.js test for time
it('should be able to remove value after some time', async () => {
const data: Data<number> = {
key: 'test',
data: 1,
};
jest.useFakeTimers();
fakeCacheProvider.save(data, 'app:', { ttlInSeconds: 3 });
@lucasraziel
lucasraziel / FakeCacheProvider.ts
Created May 13, 2022 21:01
FackeCacheProvider save Usando NPM Package para criar uma Arquitetura Limpa - Parte 2
async save(
value: Data,
prefix: string,
options?: SaveOptions
): Promise<void> {
this.cache.set(`${prefix}${value.key}`, value.data);
if (options?.ttlInSeconds) {
setTimeout(() => {
this.invalidate(value.key, prefix);
}, options.ttlInSeconds * 1000);
@lucasraziel
lucasraziel / CacheTemplate.ts
Created May 13, 2022 20:58
CacheTemplate.ts final Usando NPM Package para criar uma Arquitetura Limpa - Parte 2
import Data from '../dto/data';
import SaveOptions from '../dto/saveOptions';
export default interface ICacheProvider {
save(value: Data, prefix: string, options?: SaveOptions): Promise<void>;
invalidate(key: string, prefix: string): Promise<void>;
recover<T = unknown>(key: string, prefix: string): Promise<T | null>;
}
@lucasraziel
lucasraziel / saveOptions.ts
Created May 13, 2022 20:56
saveOptions Usando NPM Package para criar uma Arquitetura Limpa - Parte 2
export default interface SaveOptions {
ttlInSeconds?: number;
}
@lucasraziel
lucasraziel / test.ts
Created May 13, 2022 20:33
test.ts Usando NPM Package para criar uma Arquitetura Limpa - Parte 2
import { FakeCacheProvider, Data } from '../src/index';
let fakeCacheProvider: FakeCacheProvider;
describe('Tests', () => {
beforeEach(() => {
fakeCacheProvider = new FakeCacheProvider();
});
it('should be abble to add and recover value', async () => {
const data: Data<number> = {