Cloud Functions - HeroPhil/DHBW-KinoCinema GitHub Wiki

In diesem Dokument werden die einzelnen Cloud-Functions erläutert. Die Erklärungen sollten dabei eine Funktionsbeschreibung, eine Parameterbeschreibung und die Verwendung im Frondend umfassen.

Table of contents

Cloud-Functions-Verzeichnis

database-getAllMovies({ })

  • Funktionsbeschreibung: Mit der database-getAllMovies({ }) Funktion kann der gesamte Datenbestand an Filmen abgefragt werden.

  • Parameterbeschreibung: Es wird ein leeres Objekt als Parameter übergeben.

  • Verwendung im Frontend:

async function getMovies() {
    let ausgabeP = document.getElementById("ausgabe");

    ausgabeP.innerHTML = "";

    let movies = await functions.httpsCallable('database-getAllMovies')({ });
    console.log(movies);

    let ausgabeString = "";
    movies.data.forEach( movie => {
        console.log(movie);
        let content = movie.data;
        ausgabeString += "<b>" + content.name + "</b><br \\>" + content.description + "<br \\><hr \\>";
    });
    ausgabeP.innerHTML = ausgabeString;
}

database-getMovieByID({id})

  • Funktionsbeschreibung: Mit der getMovieByID({id}) Funktion kann ein Film über eine bestimmte id abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt muss die id des Filmes es mitgegeben werden.

  • Verwendung im Frontend:

async function getOneMovie() {
    const sample_id = "2q0KTjjgsK2RNRg65OX6";
    const param = {id: sample_id};

    functions.httpsCallable('database-getMovieByID')(param)
        .then(result => {
            console.log(result.data);
        })
        .catch((error) => {console.error(error)});
}

database-getTopMovies({amount})

  • Funktionsbeschreibung: Mit der getTopMovies({amount}) Funktion kann eine bestimmte Anzahl an Filmen mit der höchsten priority abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt muss ein Integer mitgegeben werden. Eine Zahl als String ist auch möglich, da der Parameter anschließend als Integer geparsed wird. Der Parameter gibt an wie viele Filme man erhalten möchte. Hierbei handelt es sich dann um die n höchstbewerteten Filme in der Datenbank.

  • Verwendung im Frontend:

async function getTopMovies() {
    const sampleAmount = 3;
    const param = {amount: sampleAmount};

    let movies = await functions.httpsCallable('database-getTopMovies')(param);

    console.log(movies);

    let ausgabeString = "";
    movies.data.forEach( movie => {
        let content = movie.data;
        ausgabeString += "<b>" + content.name + "</b><br \\>" + content.description + "<br \\><hr \\>";
    });
    console.log(ausgabeString);
}

database-getAllScreenings({<since>, <sublevel>})

  • Funktionsbeschreibung: Mit der getAllScreenings({<since>, <sublevel>}) Funktion können alle Vorstellungen abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt können hierbei zwei Werte mitgeben. Diese sind beide optional und werden, wenn nicht anders übergeben mit dem Wert 0 verarbeitet. Der sublevel Parameter ermöglicht die Abfrage der Referenzen in einem Vorstellungs-Objekt. Der Integer gibt die sublevel an, die ebenfalls abgefragt werden sollen. So lassen sich beispielsweise direkt Informationen über den Film, der in einer Vorstellung referenziert wird, ermitteln. Der since Parameter ermöglicht die Abfrage von Vorstellungen seit einem bestimmten Zeitpunkt. Standardmäßig werden alle Vorstellungen seit dem 1. Jan. 1970 00:00 (UTC) abgefragt, da dieser Zeitpunkt den Wert 0 im since Parameter darstellt. Für den jetzigen Zeitpunkt sind die Millisekunden seit diesem Zeitpunkt (1. Jan. 1970) anzugeben. Ein entsprechendes Beispiel hierfür kann dem folgenden Stichpunkt entnommen werden.

  • Verwendung im Frontend:

async function getAllScreenings() {
    const sampleSublevel = 4;
    const date = Math.floor(Date.now());
    const param = {
        sublevel: sampleSublevel,
        since: date
    };

    let screenings = await functions.httpsCallable('database-getAllScreenings')(param);

    console.log(screenings);
}

database-getScreeningsOfMovieByID({id, <since>, <until>, <sublevel>})

  • Funktionsbeschreibung: Mit der getScreeningsOfMovieByID({id, <since>, <until>, <sublevel>}) Funktion können alle Vorstellungen eines bestimmten Films abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt muss die id eines Films mitgegeben werden. Als weitere Parameter können im Objekt zwei Werte mitgeben. Diese sind beide optional und werden, wenn nicht anders übergeben mit dem Wert 0 verarbeitet. Der sublevel Parameter ermöglicht die Abfrage der Referenzen in einem Vorstellungs-Objekt. Der Integer gibt die sublevel an, die ebenfalls abgefragt werden sollen. So lassen sich beispielsweise direkt Informationen über den Film, der in einer Vorstellung referenziert wird, ermitteln. Der since Parameter ermöglicht die Abfrage von Vorstellungen seit einem bestimmten Zeitpunkt. Standardmäßig werden alle Vorstellungen seit dem 1. Jan. 1970 00:00 (UTC) abgefragt, da dieser Zeitpunkt den Wert 0 im since Parameter darstellt. Der until Parameter gibt den Zeitpunkt bis wann die Veranstaltungen beginnen. Für den jetzigen Zeitpunkt sind die Millisekunden seit diesem Zeitpunkt (1. Jan. 1970) anzugeben. Ein entsprechendes Beispiel hierfür kann dem folgenden Stichpunkt entnommen werden.

  • Verwendung im Frontend:

async function getScreeningsOfMovie() {
    const sample_id = "2q0KTjjgsK2RNRg65OX6";
    const sampleSublevel = 4;
    const date = Math.floor(Date.now());
    const param = {
        id: sample_id,
        sublevel: sampleSublevel,
        since: date
    };

    let screenings = await functions.httpsCallable('database-getScreeningsOfMovieByID')(param);

    console.log(screenings);
} 

database-getBookedSeatsByScreeningID({id})

  • Funktionsbeschreibung: Mit der getBookedSeatsByScreeningID({id}) Funktion können die gebuchten Tickets einer Vorstellung abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Dieses Objekt beinhaltet als id eine Vorstellungsnummer (ScreeningID).

  • Verwendung im Frontend:

async function getBookedSeatsByScreeningID() {
    const sample_id = "1amK0ylg8lgUd3Jj44rM";
    const param = {
        id: sample_id
    };

    await functions.httpsCallable('database-getBookedSeatsByScreeningID')(param)
        .then(result => {
            console.log(result.data);
        })
        .catch((error) => {console.error(error)});
} 

Die Funktion gibt ein Array zurück. In diesem Array liegen Reihen (ebenfalls Arrays). In den Reihen-Arrays sind die einzelnen Sitze als Boolean abgebildet. True bedeutet in diesem Fall, dass bereits ein Ticket für den Sitz existiert. False bedeutet in diesem Fall, dass der Sitz noch frei ist. Die Datenstruktur der response sieht also wie folgt aus:

[[false, false, true],[false, false, false],[true,true,true],[false,false,true]]

Im oberen Beispiel findet die Vorstellung in einem Saal mit 4 Reihen und 3 Sitzen pro Reihe statt. Das erste Subarray ist die erste Reihe (von der Leinwand aus). Folglich sind 5 Plätze belegt (Reihe 1 Sitz 3, Reihe 3 Sitz 1, Reihe 3 Sitz 2, Reihe 3 Sitz 3, Reihe 4 Sitz 3).

database-getMoviesByCategory({category, <amount>})

  • Funktionsbeschreibung: Mit der getMoviesByCategory({category, <amount>}) Funktion können Filme einer Kategorie abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt muss die category der gewünschten Filme mitgegeben werden. Als weiteres Feld kann im Objekt eine Anzahl (limit amount) mitgegeben werden. Dieses Feld ist optional und wird, wenn nicht anders übergeben, mit dem Wert 5 verarbeitet.

  • Verwendung im Frontend:

async function getMoviesByCategory() {
    const category = "Abenteuer";
    const amount = 3;
    const param = {
        category: category,
        amount : amount
    };

    let movies = await functions.httpsCallable('database-getMoviesByCategory')(param);

    console.log(movies);
} 

database-getTicketsOfCurrentUser({<amount>, <orderByAttribute>, <order>, <sublevel>})

  • Funktionsbeschreibung: Mit der getTicketsOfCurrentUser({<amount>, <orderByAttribute>, <order>, <sublevel>}) Funktion können Tickets des aktuellen Nutzers abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt können verschiedene Felder mitgegeben werden. Alle Felder sind optional. Das gängigste Feld, das angepasst werden kann, wird hier vermutlich das amount Feld sein. Dieses Feld wird, wenn nicht anders übergeben, mit dem Wert 99999 verarbeitet.

  • Verwendung im Frontend:

async function getTicketsOfCurrentUser() {
    const amount = 10;
    const param = {
        amount: amount
    };

    let tickets = await functions.httpsCallable('database-getTicketsOfCurrentUser')(param);

    console.log(tickets);
} 

database-getTicketByID({id, <sublevel>})

  • Funktionsbeschreibung: Mit der getTicketByID({id, <sublevel>}) Funktion kann ein Ticket über eine id abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt muss eine id mitgegeben werden. Zusätzlich kann noch das sublevel angepasst werden. Der sublevel Parameter ist optional und standardmäßig mit 3 initialisiert.

  • Verwendung im Frontend:

async function getTicketByID() {
    const param = {
        id: "kM6uzhzTc2KPVWSsY0yD"
    };

    let ticket = await functions.httpsCallable('database-getTicketByID')(param);

    console.log(ticket);
} 

database-createTicket({screening, row, seat})

  • Funktionsbeschreibung: Mit der createTicket({screening, row, seat}) Funktion kann ein Ticket gebucht werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt muss das screening und der Sitz angegeben werden. Für den Sitz sind der row und der seat Parameter mitzugeben.

  • Verwendung im Frontend:

async function createTicket() {
    const param = {
        screening: "1amK0ylg8lgUd3Jj44rM",
        row: 2,
        seat: 3
    };

    let ticket = await functions.httpsCallable('database-createTicket')(param);

    console.log(ticket);
} 

database-addMovie({categories[], <cover>, description, duration, name, priority})

  • Funktionsbeschreibung: Mit der addMovie({categories[], <cover>, description, duration, name, priority}) Funktion kann ein neuer Film in der Datenbank angelegt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt müssen folgende Felder angegeben werden: categories[] (Ein String[] mit allen Kategorien des Films), cover (also der Link zum Bucket mit dem Filmposter, optional), description, duration (Spieldauer des Filmes als Integer), name, priority (Ranking des Filmes zwischen 0 und 100)

  • Verwendung im Frontend:

async function addMovie() {
    const param = {
        categories: ["Abenteuer","Action"],
        description: "Hier ausführliche Beschreibung einfügen",
        duration: 98,
        name: "Langer Film mit schlechten Bewertungen",
        priority: 54
    };

    let movie = await functions.httpsCallable('database-addMovie')(param);

    console.log(movie);
} 

database-updateMovie({id, newData: {<categories[]>, <cover>, <description>, <duration>, <name>, <priority>}})

  • Funktionsbeschreibung: Mit der updateMovie({id, newData: {<categories[]>, <cover>, <description>, <duration>, <name>, <priority>}}) Funktion kann ein bestehender Film in der Datenbank bearbeitet werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt müssen die id des Filmes und alle Änderungen (Änderungen als Objekt) newData mitgegeben werden.

  • Verwendung im Frontend:

async function updateMovie() {
    const param = {
        id: "2q0KTjjgsK2RNRg65OX6",
        newData: {
            description: "Der Film hat jetzt auch Outtakes",
            duration: 111,
            name: "Längerer Film"
        }
    };

    let movie = await functions.httpsCallable('database-updateMovie')(param);

    console.log(movie);
} 

database-addScreening({movie, hall, price, startTime, <repetitions>, <increments>})

  • Funktionsbeschreibung: Mit der addScreening({movie, hall, price, startTime, <repetitions>, <increments>}) Funktion kann ein Screening für einen bestehenden Film erstellt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt müssen alle Parameter für ein Screening mitgegeben werden: movie, hall, price, startTime. Für wiederholende Screenings können optional der repetitions (Anzahl der Wiederholungen) und der increments (zeitlicher Abstand zwischen zwei Wiederholungen) Parameter mitgegeben werden.

  • Verwendung im Frontend:

async function addScreening() {
    const param = {
        movie: "2q0KTjjgsK2RNRg65OX6",
        hall: "Rg65q0KTjjgOX6",
        price: 10,
        startTime: 17297847322,
        repetitions: 5,
        increments: 60*60*24*7
    };

    let screening = await functions.httpsCallable('database-addScreening')(param);

    console.log(screening);
}

database-updateScreening({id, newData: {<movie>, <hall>, <price>, <startTime>}})

  • Funktionsbeschreibung: Mit der updateScreening({id, newData: {<movie>, <hall>, <price>, <startTime>}}) Funktion kann ein bestehendes Screening in der Datenbank bearbeitet werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt müssen die id des Screenings und alle Änderungen (Änderungen als Objekt) newData mitgegeben werden.

  • Verwendung im Frontend:

async function updateScreening() {
    const param = {
        id: "KTjg65OXjgs2q0K2RNR6",
        newData: {
            price: 15,
            startTime: 1978354822
        }
    };

    let screening = await functions.httpsCallable('database-updateScreening')(param);

    console.log(screening);
} 

database-getInformationOfCurrentUser({ })

  • Funktionsbeschreibung: Mit der getInformationOfCurrentUser({ }) Funktion kann ein bestehender Nutzer aus der Datenbank ausgelesen werden.

  • Parameterbeschreibung: Diese Funktion benötigt ein leeres Objekt als Parameter.

  • Verwendung im Frontend:

async function getInformationOfCurrentUser() {
    let user = await functions.httpsCallable('database-getInformationOfCurrentUser')({});
    console.log(user);
} 

database-updateInformationOfCurrentUser({newData: {<city>, <displayName>, <firstName>, <lastName>, <phone>, <primaryAddress>, <secondaryAddress>, <zipCode>}})

  • Funktionsbeschreibung: Mit der updateInformationOfCurrentUser({newData: {<city>, <displayName>, <firstName>, <lastName>, <phone>, <primaryAddress>, <secondaryAddress>, <zipCode>}}) Funktion kann ein bestehender Nutzer in der Datenbank bearbeitet werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Dieses Objekt umfasst das Objekt newData mit allen Änderungen. Alle Änderungen sind optional.

  • Verwendung im Frontend:

async function updateInformationOfCurrentUser() {
    const param = {
        newData: {
            firstName: "Bernd",
            lastName: "Müller"
        }
    };

    let user = await functions.httpsCallable('database-updateInformationOfCurrentUser')(param);

    console.log(user);
} 

database-promoteUserToAdminByID({id})

  • Funktionsbeschreibung: Mit der promoteUserToAdminByID({id}) Funktion kann ein Admin einen anderen Nutzer in der Datenbank zum Admin erklären.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mit der id mitgegeben.

  • Verwendung im Frontend:

async function promoteUserToAdminByID() {
    const param = {
        id: "KN0XXAwejfb5zcTinAYGrGFI2"
    };

    let user = await functions.httpsCallable('database-promoteUserToAdminByID')(param);

    console.log(user);
} 

database-degradeAdminToUserByID({id})

  • Funktionsbeschreibung: Mit der degradeAdminToUserByID({id}) Funktion kann ein Admin einen anderen Admin in der Datenbank zum einfachen User degradieren.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mit der id mitgegeben.

  • Verwendung im Frontend:

async function degradeAdminToUserByID() {
    const param = {
        id: "KN0XXAwejfb5zcTinAYGrGFI2"
    };

    let user = await functions.httpsCallable('database-degradeAdminToUserByID')(param);

    console.log(user);
} 

database-checkIfCurrentUserIsAdmin({ })

  • Funktionsbeschreibung: Mit der checkIfCurrentUserIsAdmin({ }) Funktion kann getestet werden ob der angemeldete Nutzer Admin-Operationen ausführen kann.

  • Parameterbeschreibung: Als Parameter wird ein leeres Objekt mitgegeben.

  • Verwendung im Frontend:

async function checkIfCurrentUserIsAdmin() {
    let user = await functions.httpsCallable('database-checkIfCurrentUserIsAdmin')({ });

    console.log(user);
} 

database-getAllHalls({<sublevel>})

  • Funktionsbeschreibung: Mit der getAllHalls({<sublevel>}) Funktion können alle Vorstellungsräume abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt kann ein Wert mitgeben werden. Dieser ist optional und wird, wenn nicht anders übergeben mit dem Wert 0 verarbeitet. Der sublevel Parameter ermöglicht die Abfrage der Referenzen in einem Hall-Objekt. Der Integer gibt die sublevel an, die ebenfalls abgefragt werden sollen. So lassen sich beispielsweise direkt Informationen über die Reihen des Raumes mit abfragen. Ein entsprechendes Beispiel hierfür kann dem folgenden Stichpunkt entnommen werden.

  • Verwendung im Frontend:

async function getAllHalls() {
    const sampleSublevel = 4;
    const param = {
        sublevel: sampleSublevel
    };

    let halls = await functions.httpsCallable('database-getAllHalls')(param);

    console.log(halls);
}

database-addHall({name, width, rows})

  • Funktionsbeschreibung: Mit der addHall({name, width, rows}) Funktion können neue Vorstellungsräume hinzugefügt werden.

  • Parameterbeschreibung: Die Funktion erhält ein Objekt mit drei Feldern. Der Parameter name gibt die Bezeichnung des neues Saales als String an. Zum Beispiel "Kino 3". Der Parameter width gibt die Breite des neues Saales als Nummer an. Der Parameter rows beschreibt die Reihen des neuen Saals als Array. Das Array muss Objekte mit den Feldern count und id haben. Pro Element im Array werden also count-mal die Reihen mit dem Typ der id angefügt. So niedriger der Index des Objektes im Array desto näher an der Leinwand ist die Reihe.

  • Verwendung im Frontend:

async function addHall() {
    const name = "Kino 3";
    const width = 8;
    const rows = [
        {
            id: "FUK07mCFAQJ9cB8iRzLy",
            count: 4
        },
        {
            id: "b2XavROfh9b6GLjiQu33",
            count: 5
        }
    ];
    const param = {
        name: name,
        width: width,
        rows: rows
    };

    let hall = await functions.httpsCallable('database-addHall')(param);

    console.log(hall);
}

database-getAllRowTypes({ })

  • Funktionsbeschreibung: Mit der getAllRowTypes({ }) Funktion können alle Sitzreihentypen abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein leeres Objekt mitgegeben.

  • Verwendung im Frontend:

async function getAllRowTypes() {

    let rowTypes = await functions.httpsCallable('database-getAllRowTypes')({});

    console.log(rowTypes);
}

database-getAllCategories({ })

  • Funktionsbeschreibung: Mit der getAllCategories({ }) Funktion kann die Menge aller Kategorien, die Filme in unserer Datenbank besitzen, abgefragt werden.

  • Parameterbeschreibung: Als Parameter wird ein leeres Objekt mitgegeben.

  • Verwendung im Frontend:

async function getAllCategories() {

    let categories = await functions.httpsCallable('database-getAllCategories')({});

    console.log(categories );
}
⚠️ **GitHub.com Fallback** ⚠️