import axios, { AxiosRequestConfig } from 'axios' import { toast } from 'react-toastify' import { IMailSubject } from '../models/mailSubject.model' import { IMonthlyInfo } from '../models/monthlyInfo.model' import { IMonthlyNews } from '../models/monthlyNews.model' import { IPoll } from '../models/poll.model' export class NewsletterService { /** * Saves a mail subject for selected month * @param date * @param subject * @param axiosHeaders */ public saveMailSubject = async ( date: Date, subject: string, axiosHeaders: AxiosRequestConfig ): Promise<void> => { try { await axios.put( `/api/animator/mailSubject`, { month: date.getMonth() + 1, year: date.getFullYear(), subject: subject, }, axiosHeaders ) toast.success('Objet de la newsletter enregistré !') } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { toast.error( "Erreur lors de l’enregistrement de l'objet de la newsletter" ) } console.error(e) } } /** * Gets the mail subject for selected month * @param date * @param axiosHeaders */ public getSingleMailSubject = async ( date: Date, axiosHeaders: AxiosRequestConfig ): Promise<IMailSubject | null> => { try { const { data } = await axios.get( `/api/animator/mailSubject/${date.getFullYear()}/${ date.getMonth() + 1 }`, axiosHeaders ) return data as IMailSubject } catch (e) { console.error('error', e) return null } } /** * Deletes the mail subject for selected month * @param date * @param axiosHeaders */ public deleteMailSubject = async ( date: Date, axiosHeaders: AxiosRequestConfig ): Promise<void> => { try { await axios.delete( `/api/animator/mailSubject/${date.getFullYear()}/${ date.getMonth() + 1 }`, axiosHeaders ) toast.success('Objet de la newsletter supprimé !') } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { toast.error("Erreur lors de la suppression de l'objet de la newsletter") } console.error(e) } } /** * Creates a monthlyInfo for selected month * @param date * @param info */ public saveMonthlyInfo = async ( date: Date, info: string, image: string, axiosHeaders: AxiosRequestConfig ): Promise<void> => { try { await axios.put( `/api/animator/monthlyInfo`, { month: date.getMonth() + 1, year: date.getFullYear(), info: info, image: image, }, axiosHeaders ) toast.success('Information du mois enregistrée !') } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { toast.error('Erreur lors de l’enregistrement des informations du mois') } console.error(e) } } /** * Gets the information for selected month * @param date * @param axiosHeaders */ public getSingleMonthlyInfo = async ( date: Date, axiosHeaders: AxiosRequestConfig ): Promise<IMonthlyInfo | null> => { try { const { data } = await axios.get( `/api/animator/monthlyInfo/${date.getFullYear()}/${ date.getMonth() + 1 }`, axiosHeaders ) return data as IMonthlyInfo } catch (e) { console.error('error', e) return null } } /** * Deletes a Monthly Info for selected month * @param date * @param axiosHeaders */ public deleteMonthlyInfo = async ( date: Date, axiosHeaders: AxiosRequestConfig ): Promise<void> => { try { await axios.delete( `/api/animator/monthlyInfo/${date.getFullYear()}/${ date.getMonth() + 1 }`, axiosHeaders ) toast.success('Informations du mois supprimées !') } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { toast.error('Erreur lors de la suppression des informations du mois') } console.error(e) } } /** * Creates a monthlyNews for selected month * @param date * @param title * @param content */ public saveMonthlyNews = async ( date: Date, title: string, content: string, axiosHeaders: AxiosRequestConfig ): Promise<void> => { try { await axios.put( `/api/animator/monthlyNews`, { month: date.getMonth() + 1, year: date.getFullYear(), title: title, content: content, }, axiosHeaders ) toast.success('Nouveautés du mois enregistrés !') } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { toast.error('Erreur lors de l’enregistrement des nouveautés du mois') } console.error(e) } } /** * Gets a news title and content for selected month * @param date * @param axiosHeaders */ public getSingleMonthlyNews = async ( date: Date, axiosHeaders: AxiosRequestConfig ): Promise<IMonthlyNews | null> => { try { const { data } = await axios.get( `/api/animator/monthlyNews/${date.getFullYear()}/${ date.getMonth() + 1 }`, axiosHeaders ) return data as IMonthlyNews } catch (e) { console.error('error', e) return null } } /** * Deletes a Monthly News for selected month * @param date * @param axiosHeaders */ public deleteMonthlyNews = async ( date: Date, axiosHeaders: AxiosRequestConfig ): Promise<void> => { try { await axios.delete( `/api/animator/monthlyNews/${date.getFullYear()}/${ date.getMonth() + 1 }`, axiosHeaders ) toast.success('Nouveautés du mois supprimées !') } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { toast.error('Erreur lors de la suppression des nouveautés du mois') } console.error(e) } } /** * Creates a poll with question and link for selected month * @param date * @param question * @param link */ public savePoll = async ( date: Date, question: string, link: string, axiosHeaders: AxiosRequestConfig ): Promise<void> => { try { await axios.put( `/api/animator/poll`, { month: date.getMonth() + 1, year: date.getFullYear(), link: link, question: question, }, axiosHeaders ) toast.success('Sondage enregistré !') } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { toast.error('Erreur lors de l’enregistrement du sondage') } console.error(e) } } /** * Gets a poll with question and link for selected month * @param date * @param axiosHeaders */ public getSinglePoll = async ( date: Date, axiosHeaders: AxiosRequestConfig ): Promise<IPoll | null> => { try { const { data } = await axios.get( `/api/animator/poll/${date.getFullYear()}/${date.getMonth() + 1}`, axiosHeaders ) return data as IPoll } catch (e) { console.error('error', e) return null } } /** * Deletes a poll for selected month * @param date * @param axiosHeaders */ public deletePoll = async ( date: Date, axiosHeaders: AxiosRequestConfig ): Promise<void> => { try { await axios.delete( `/api/animator/poll/${date.getFullYear()}/${date.getMonth() + 1}`, axiosHeaders ) toast.success('Sondage supprimé !') } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { toast.error('Erreur lors de la suppression du sondage') } console.error(e) } } }