Skip to content
Snippets Groups Projects
consent.service.ts 3.11 KiB
Newer Older
Guilhem CARRON's avatar
Guilhem CARRON committed
import {
  ConsentPaginationEntity,
  IConsentPagination,
} from './../models/consent.model'
Bastien DUMONT's avatar
Bastien DUMONT committed
import axios, { AxiosRequestConfig } from 'axios'
Guilhem CARRON's avatar
Guilhem CARRON committed
import { ConsentEntity, IConsent } from '../models/consent.model'
import { toast } from 'react-toastify'
import { DateTime } from 'luxon'

export class ConsentService {
  /**
   * Search for consents
   * @param search
Bastien DUMONT's avatar
Bastien DUMONT committed
   * @param axiosHeaders
Guilhem CARRON's avatar
Guilhem CARRON committed
   */
  public searchConsent = async (
    search: string,
Bastien DUMONT's avatar
Bastien DUMONT committed
    axiosHeaders: AxiosRequestConfig
Guilhem CARRON's avatar
Guilhem CARRON committed
  ): Promise<IConsent[] | null> => {
    try {
Bastien DUMONT's avatar
Bastien DUMONT committed
      const { data } = await axios.get(
        `/api/admin/consent?search=${search}`,
        axiosHeaders
      )
Guilhem CARRON's avatar
Guilhem CARRON committed
      const consentEntities = data as ConsentEntity[]
      return consentEntities.map((entity) => this.parseConsent(entity))
    } catch (e: any) {
      if (e.response.status === 403) {
        toast.error(
          "Unauthorized : You don't have the rights to do this operation"
        )
      } else {
        toast.error('Failed to search consents')
Guilhem CARRON's avatar
Guilhem CARRON committed
      }
      console.error(e)
      return null
    }
  }

  /**
   * Gets consents
   * @param limit
   * @param page
Bastien DUMONT's avatar
Bastien DUMONT committed
   * @param axiosHeaders
Guilhem CARRON's avatar
Guilhem CARRON committed
   */
  public getConsents = async (
    limit: number,
    page: number,
Bastien DUMONT's avatar
Bastien DUMONT committed
    axiosHeaders: AxiosRequestConfig
Guilhem CARRON's avatar
Guilhem CARRON committed
  ): Promise<IConsentPagination | null> => {
    try {
      const { data } = await axios.get(
        `/api/admin/consent?limit=${limit}&page=${page}`,
Bastien DUMONT's avatar
Bastien DUMONT committed
        axiosHeaders
Guilhem CARRON's avatar
Guilhem CARRON committed
      )
      const consentPagination = data as ConsentPaginationEntity
      return this.parseConsentPagination(consentPagination)
    } catch (e: any) {
      if (e.response.status === 403) {
        toast.error(
          "Unauthorized : You don't have the rights to do this operation"
        )
      } else {
        toast.error('Failed to get consents')
Guilhem CARRON's avatar
Guilhem CARRON committed
      }
      console.error(e)
      return null
    }
  }

  /**
   * Converts consent entity into consent
   * @param consentEntity
   */
  public parseConsent = (consentEntity: ConsentEntity): IConsent => {
    const startDate: string = DateTime.fromISO(consentEntity.CreatedAt, {
      zone: 'utc',
    })
      .setLocale('fr-FR')
      .toLocaleString()
    const endDate: string = DateTime.fromISO(consentEntity.endDate, {
      zone: 'utc',
    })
      .setLocale('fr-FR')
      .toLocaleString()

Bastien DUMONT's avatar
Bastien DUMONT committed
    return {
Guilhem CARRON's avatar
Guilhem CARRON committed
      ID: consentEntity.ID,
      startDate: startDate,
      endDate: endDate,
      firstname: consentEntity.firstname,
      lastname: consentEntity.lastname,
      pointID: consentEntity.pointID,
      address: consentEntity.address,
      postalCode: consentEntity.postalCode,
Bastien DUMONT's avatar
Bastien DUMONT committed
      city: consentEntity.city,
Guilhem CARRON's avatar
Guilhem CARRON committed
    }
  }

  /**
   * Converts consent pagination entity into consent pagination
   * @param consentPaginationEntity
   */
  public parseConsentPagination = (
    consentPaginationEntity: ConsentPaginationEntity
  ): IConsentPagination => {
    const rows = consentPaginationEntity.rows.map((consent) =>
      this.parseConsent(consent)
    )

    const consentPagination: IConsentPagination = {
      rows: rows,
      totalRows: consentPaginationEntity.totalRows,
      totalPages: consentPaginationEntity.totalPages,
    }
    return consentPagination
  }
}