From ae5d53bcf39e265e0d004c5d3c8058fd59a20553 Mon Sep 17 00:00:00 2001 From: Reallag Date: Sat, 10 Jun 2023 18:31:54 +0200 Subject: [PATCH] =?UTF-8?q?Podpora=20notifikac=C3=AD,=20zat=C3=ADm=20jen?= =?UTF-8?q?=20gotify?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/package.json | 4 ++- client/src/notifikace.ts | 0 client/yarn.lock | 5 +++ server/src/notifikace.ts | 69 ++++++++++++++++++++++++++++++++++++++++ server/src/service.ts | 20 ++++++------ server/src/types.ts | 17 ++++++++++ 6 files changed, 105 insertions(+), 10 deletions(-) create mode 100644 client/src/notifikace.ts create mode 100644 server/src/notifikace.ts diff --git a/client/package.json b/client/package.json index 2f702f2..4f4b7d7 100644 --- a/client/package.json +++ b/client/package.json @@ -51,5 +51,7 @@ "last 1 safari version" ] }, - "devDependencies": {} + "devDependencies": { + "prettier": "^2.8.8" + } } diff --git a/client/src/notifikace.ts b/client/src/notifikace.ts new file mode 100644 index 0000000..e69de29 diff --git a/client/yarn.lock b/client/yarn.lock index 8523c51..8b64f2c 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -7569,6 +7569,11 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== +prettier@^2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" diff --git a/server/src/notifikace.ts b/server/src/notifikace.ts new file mode 100644 index 0000000..23a5f34 --- /dev/null +++ b/server/src/notifikace.ts @@ -0,0 +1,69 @@ +/** Notifikace pro gotify*/ +import axios, {AxiosError, AxiosResponse} from 'axios'; +import {NotififaceInput, NotifikaceData, UdalostEnum} from "./types"; + +const url = 'your_URL_here'; // Place your URL here + +export const gotifyCall = async (data: NotififaceInput): Promise => { + + const options = { + headers: {"Content-Type": "application/json"}, + data: { + title: "Luncher", + message: `${data.udalost} - spustil:${data.user}`, + priority: 7, + }, + }; + + try { + const response = await axios.post(url, options); + response.data = { + success: true, + message: "Notifikace doručena", + }; + return response; + } catch (error: unknown) { + if (axios.isAxiosError(error)) { + const axiosError = error as AxiosError; + if (axiosError.response) { + axiosError.response.data = { + success: false, + message: "fail", + }; + return axiosError.response; + } + } + // Handle unknown error without a response + return { + status: 500, + statusText: 'Unknown error', + headers: {}, // empty headers + data: {success: false, message: "fail"}, + config: {}, // empty config + }; + } +}; + +/** Zavolá notifikace na všechny konfigurované způsoby notifikace, přetížení proměných na false pro jednotlivé způsoby je vypne*/ +export const callNotifikace = async ({input, teams = true, gotify = true}: NotifikaceData) => { + const notifications = []; + + if (gotify) { + notifications.push(gotifyCall(input)); + } + + /* Zatím není + if (teams) { + notifications.push(teamsCall(input)); + }*/ + + // Add more notifications as necessary + + try { + const results = await Promise.all(notifications); + return results; + } catch (error) { + console.error("Error in callNotifikace: ", error); + // Handle the error as needed + } +}; \ No newline at end of file diff --git a/server/src/service.ts b/server/src/service.ts index 41b2bac..b254654 100644 --- a/server/src/service.ts +++ b/server/src/service.ts @@ -1,7 +1,7 @@ -import { ClientData, Locations, Order, Pizza, PizzaDayState, PizzaOrder, PizzaSize } from "./types"; -import { db } from "./database"; -import { getHumanDate, getIsWeekend } from "./utils"; -import { formatDate } from "./utils"; +import {ClientData, Locations, Order, Pizza, PizzaDayState, PizzaOrder, PizzaSize, UdalostEnum} from "./types"; +import {db} from "./database"; +import {formatDate, getHumanDate, getIsWeekend} from "./utils"; +import {callNotifikace} from "./notifikace"; /** Vrátí dnešní datum, případně fiktivní datum pro účely vývoje a testování. */ function getToday(): Date { @@ -36,6 +36,7 @@ export function createPizzaDay(creator: string): ClientData { } const data: ClientData = { pizzaDay: { state: PizzaDayState.CREATED, creator, orders: [] }, ...clientData }; db.set(today, data); + callNotifikace({input:{udalost:UdalostEnum.ZAHAJENA_PIZZA,user:creator}}) return data; } @@ -95,7 +96,7 @@ export function addPizzaOrder(login: string, pizza: Pizza, size: PizzaSize) { /** * Odstraní danou objednávku pizzy. - * + * * @param login login uživatele * @param pizzaOrder objednávka pizzy */ @@ -126,7 +127,7 @@ export function removePizzaOrder(login: string, pizzaOrder: PizzaOrder) { /** * Uzamkne možnost editovat objednávky pizzy. - * + * * @param login login uživatele * @returns aktuální data pro uživatele */ @@ -149,7 +150,7 @@ export function lockPizzaDay(login: string) { /** * Odekmne možnost editovat objednávky pizzy. - * + * * @param login login uživatele * @returns aktuální data pro uživatele */ @@ -172,7 +173,7 @@ export function unlockPizzaDay(login: string) { /** * Nastaví stav pizza day na "pizzy objednány". - * + * * @param login login uživatele * @returns aktuální data pro uživatele */ @@ -190,12 +191,13 @@ export function finishPizzaOrder(login: string) { } clientData.pizzaDay.state = PizzaDayState.ORDERED; db.set(today, clientData); + callNotifikace({input:{udalost:UdalostEnum.ZAHAJENA_PIZZA,user:clientData?.pizzaDay?.creator}}) return clientData; } /** * Nastaví stav pizza day na "pizzy doručeny". - * + * * @param login login uživatele * @returns aktuální data pro uživatele */ diff --git a/server/src/types.ts b/server/src/types.ts index dbdddca..6d38c23 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -1,3 +1,5 @@ +import exp from "constants"; + export interface Choices { [location: string]: string[], } @@ -65,4 +67,19 @@ export enum Locations { VLASTNI = 'Mám vlastní', OBJEDNAVAM = 'Objednávám', NEOBEDVAM = 'Neobědvám', +} + +export enum UdalostEnum{ + ZAHAJENA_PIZZA="Zahájen pizza day", + OBJEDNANA_PIZZA="Objednána pizza" +} + +export interface NotififaceInput{ + udalost:UdalostEnum, + user:string, +} +export interface NotifikaceData{ + input:NotififaceInput, + gotify?:boolean, + teams?:boolean, } \ No newline at end of file