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.
- database-getAllMovies({ })
- database-getMovieByID({id})
- database-getTopMovies({amount})
- database-getAllScreenings({<since>, <sublevel>})
- database-getScreeningsOfMovieByID({id, <since>, <until>, <sublevel>})
- database-getBookedSeatsByScreeningID({id})
- database-getMoviesByCategory({category, <amount>})
- database-getTicketsOfCurrentUser({<amount>, <orderByAttribute>, <order>, <sublevel>})
- database-getTicketByID({id, <sublevel>})
- database-createTicket({screening, row, seat})
- database-addMovie({categories[], <cover>, description, duration, name, priority})
- database-updateMovie({id, newData: {<categories[]>, <cover>, <description>, <duration>, <name>, <priority>}})
- database-addScreening({movie, hall, price, startTime, <repetitions>, <increments>})
- database-updateScreening(id, newData: {<movie>, <hall>, <price>, <startTime>})
- database-getInformationOfCurrentUser({ })
- database-updateInformationOfCurrentUser({newData: {<city>, <displayName>, <firstName>, <lastName>, <phone>, <primaryAddress>, <secondaryAddress>, <zipCode>}})
- database-promoteUserToAdminByID({id})
- database-degradeAdminToUserByID({id})
- database-checkIfCurrentUserIsAdmin({ })
- database-getAllHalls({<sublevel>})
- database-addHall({name, width, rows})
- database-getAllRowTypes({ })
- database-getAllCategories({ })
-
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;
}
-
Funktionsbeschreibung: Mit der
getMovieByID({id})
Funktion kann ein Film über eine bestimmteid
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)});
}
-
Funktionsbeschreibung: Mit der
getTopMovies({amount})
Funktion kann eine bestimmte Anzahl an Filmen mit der höchstenpriority
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);
}
-
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 diesublevel
an, die ebenfalls abgefragt werden sollen. So lassen sich beispielsweise direkt Informationen über den Film, der in einer Vorstellung referenziert wird, ermitteln. Dersince
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 imsince
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);
}
-
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. Dersublevel
Parameter ermöglicht die Abfrage der Referenzen in einem Vorstellungs-Objekt. Der Integer gibt diesublevel
an, die ebenfalls abgefragt werden sollen. So lassen sich beispielsweise direkt Informationen über den Film, der in einer Vorstellung referenziert wird, ermitteln. Dersince
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 imsince
Parameter darstellt. Deruntil
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);
}
-
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).
-
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);
}
-
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);
}
-
Funktionsbeschreibung: Mit der
getTicketByID({id, <sublevel>})
Funktion kann ein Ticket über eineid
abgefragt werden. -
Parameterbeschreibung: Als Parameter wird ein Objekt mitgegeben. Im Objekt muss eine
id
mitgegeben werden. Zusätzlich kann noch dassublevel
angepasst werden. Dersublevel
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);
}
-
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 derrow
und derseat
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);
}
-
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);
}
-
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 derrepetitions
(Anzahl der Wiederholungen) und derincrements
(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);
}
-
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);
}
-
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);
}
-
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);
}
-
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);
}
-
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);
}
-
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 diesublevel
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);
}
-
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 Parameterwidth
gibt die Breite des neues Saales als Nummer an. Der Parameterrows
beschreibt die Reihen des neuen Saals als Array. Das Array muss Objekte mit den Felderncount
undid
haben. Pro Element im Array werden alsocount
-mal die Reihen mit dem Typ derid
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);
}
-
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);
}
-
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 );
}