payment.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { defineStore } from 'pinia';
  2. import { ref } from 'vue';
  3. const getPixExpiresAt = (payment) => payment?.pix?.expires_at ?? payment?.expires_at ?? null;
  4. const isFutureDate = (date) => {
  5. if (!date) return false;
  6. const time = new Date(date).getTime();
  7. return Number.isFinite(time) && time > Date.now();
  8. };
  9. export const usePaymentStore = defineStore('payment', () => {
  10. const pixPaymentsByServicePackageId = ref({});
  11. const getValidPixPaymentForServicePackage = (servicePackageId) => {
  12. const payment = pixPaymentsByServicePackageId.value[servicePackageId] ?? null;
  13. if (!payment) return null;
  14. if (!isFutureDate(getPixExpiresAt(payment))) {
  15. clearPixPaymentForServicePackage(servicePackageId);
  16. return null;
  17. }
  18. return payment;
  19. };
  20. const setPixPaymentForServicePackage = (servicePackageId, payment) => {
  21. if (!servicePackageId || !payment) return;
  22. pixPaymentsByServicePackageId.value = {
  23. ...pixPaymentsByServicePackageId.value,
  24. [servicePackageId]: payment,
  25. };
  26. };
  27. const clearPixPaymentForServicePackage = (servicePackageId) => {
  28. if (!servicePackageId || !pixPaymentsByServicePackageId.value[servicePackageId]) return;
  29. const payments = { ...pixPaymentsByServicePackageId.value };
  30. delete payments[servicePackageId];
  31. pixPaymentsByServicePackageId.value = payments;
  32. };
  33. return {
  34. pixPaymentsByServicePackageId,
  35. getValidPixPaymentForServicePackage,
  36. setPixPaymentForServicePackage,
  37. clearPixPaymentForServicePackage,
  38. };
  39. });