Advertisement
Guest User

Untitled

a guest
Jul 13th, 2017
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. /**
  2. * MIT Licensed
  3. *
  4. * @author Fábio Pereira <fabio.pereira.gti@gmail.com>
  5. */
  6.  
  7. import {Storage} from "../../config";
  8.  
  9. /* Tempo em minutos */
  10. const defaultTime = 15;
  11.  
  12. /* 1 minuto em milesegundos */
  13. const MINUTE = 6000;
  14.  
  15. /* Configuração padrão */
  16. const defaultConfig = {
  17. db: Storage.Cache,
  18. time: defaultTime
  19. };
  20.  
  21. /* Função que pega a diferença em minutos entre duas datas */
  22. const getDateDiffInMinutes = (dateA = new Date(), dateB = new Date()) => {
  23. const timeA = dateA.getTime();
  24. const timeB = dateB.getTime();
  25.  
  26. return (timeA - timeB) / MINUTE;
  27. };
  28.  
  29.  
  30. class Cache {
  31.  
  32. /**
  33. * Construtor Cache
  34. *
  35. * @param {Object} config Json com as configurações de cache
  36. * @author Fábio Pereira <fabio.pereira.gti@gmail.com>
  37. * @constructor
  38. */
  39. constructor (config = defaultConfig) {
  40. this.config = config;
  41. }
  42.  
  43. /**
  44. * Verifica se o arquivo de cache está com a data expirada
  45. *
  46. * @param {string} cacheName URI da rota
  47. * @author Fábio Pereira <fabio.pereira.gti@gmail.com>
  48. * @return {bool} expired
  49. */
  50. async isExpired (cacheName) {
  51. await this.config.db.Cache.find({where: {key: btoa(cacheName)}}).
  52. then((data) => {
  53. if (Object.prototype.hasOwnProperty.call(data, expires)) {
  54. const now = new Date();
  55. const expires = new Date(data.expires);
  56.  
  57. // eslint-disable-next-line no-magic-numbers
  58. return getDateDiffInMinutes(now, expires) >= 0;
  59. }
  60.  
  61. return true;
  62. }).
  63. catch(() => true);
  64. }
  65.  
  66. /**
  67. * Salva o conteúdo no BD
  68. *
  69. * @param {string} cacheName URI da rota
  70. * @param {Object} data Conteúdo a ser armazenado no cache
  71. * @author Fábio Pereira <fabio.pereira.gti@gmail.com>
  72. * @return {bool} saved
  73. */
  74. save (cacheName, data) {
  75.  
  76. const now = new Date();
  77. const defaultTimeMs = defaultTime * MINUTE;
  78. }
  79.  
  80. /**
  81. * Retorna o conteúdo do cache
  82. *
  83. * @param {string} cacheName URI da rota
  84. * @author Fábio Pereira <fabio.pereira.gti@gmail.com>
  85. * @return {object} data Dados da rota
  86. */
  87. async get (cacheName) {
  88. await this.config.db.Cache.find({where: {key: btoa(cacheName)}}).
  89. then((data) => data).
  90. catch((err) => err);
  91. }
  92.  
  93. }
  94.  
  95. export default Cache;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement