diff --git a/src/index.jsx b/src/index.jsx index 1de121c..abf04eb 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -5,7 +5,7 @@ import { App } from "./App"; import * as serviceWorker from "./serviceWorker"; import { Auth0Provider } from "./utils/auth0-spa"; import history from "./utils/history"; -import Firebase, { FirebaseContext } from "./services/Firebase"; +import { FirebaseContext } from "./services/Firebase"; const onRedirectCallBack = (appState) => { history.push( diff --git a/src/services/Firebase/config.json b/src/services/Firebase/config.json deleted file mode 100644 index 4321b29..0000000 --- a/src/services/Firebase/config.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "API_KEY": "AIzaSyCAvCuQeoPjni7HRYMHKNu6mEhUdL4C9oQ", - "AUTH_DOMAIN": "devprojects-4749c.firebaseapp.com", - "DB_URL": "https://devprojects-4749c.firebaseio.com", - "PROJECT_ID": "devprojects-4749c", - "STORAGE_BUCKET": "devprojects-4749c.appspot.com", - "MSG_SENDER_ID": "944434165278", - "APP_ID": "1:944434165278:web:51ce06178b813d9c9f200f", - "MEASUREMENT_ID": "G-BZFZL8P4TT" -} \ No newline at end of file diff --git a/src/services/Firebase/context.js b/src/services/Firebase/context.ts similarity index 100% rename from src/services/Firebase/context.js rename to src/services/Firebase/context.ts diff --git a/src/services/Firebase/firebase.js b/src/services/Firebase/firebase.js deleted file mode 100644 index a83e994..0000000 --- a/src/services/Firebase/firebase.js +++ /dev/null @@ -1,101 +0,0 @@ -import app from "firebase/app"; -import "firebase/firestore"; -import config from "./config.json"; - -const CONFIG = { - apiKey: config.API_KEY, - authDomain: config.AUTH_DOMAIN, - databaseURL: config.DB_URL, - projectId: config.PROJECT_ID, - storageBucket: config.STORAGE_BUCKET, - messagingSenderId: config.MSG_SENDER_ID, - appId: config.APP_ID, - measurementId: config.MEASUREMENT_ID, - // apiKey: process.env.API_KEY , - // authDomain: process.env.AUTH_DOMAIN, - // databaseURL: process.env.DB_URL, - // projectId: process.env.PROJECT_ID, - // storageBucket: process.env.STORAGE_BUCKET, - // messagingSenderId: process.env.MSG_SENDER_ID, - // appId: process.env.APP_ID, - // measurementId: process.env.MEASUREMENT_ID, -}; - -const FAVS = "favs"; - -/** - * Firebase initializes the Application and provides method to interact with - * Firebase services as auth and firestore. - */ -export default class Firebase { - constructor() { - app.initializeApp(CONFIG); - this.db = app.firestore(); - this.collection = this.db.collection("mealPlannerUsers"); - } - - /** - * Get infos for user 'email'. - */ - getByEmail = async (email) => { - const infos = await this.collection - .where("email", "==", email) - .limit(1) - .get(); - - const favs = await this.getFavsByEmail(email); - - return { infos, favs }; - }; - - /** - * Get user's favourite recipes - * */ - getFavsByEmail = async (email) => { - let favs = []; - const query = await this.collection - .doc(email) - .collection(FAVS) - .where("isFav", "==", true) - // .orderBy("timestamp", "desc") - .limit(10) - .get(); - - query.forEach((doc) => favs.push(doc.data())); - - return favs; - }; - - isFav = async (email, idMeal) => { - const query = await this.collection - .doc(email) - .collection(FAVS) - .doc(idMeal) - .get(); - - const obj = query.data(); - return obj && !!obj.isFav; - // .where("isFav", "==", true); - // return !!query; - }; - - /** - * Create or update favourite status for an authenticated user. - */ - addToFavs = async (email, idMeal, strMeal, strMealThumb, isFav) => { - this.collection - .doc(email) - .collection(FAVS) - .doc(idMeal) - .set({ - email, - idMeal, - strMeal, - strMealThumb, - isFav, - // timestamp: app.FieldValue.serverTimestamp(), - }) - // .then(() => console.log("Fav object created.", isFav)) - .catch((err) => console.error("Error adding favs to database", err)); - }; -} diff --git a/src/services/Firebase/firebase.ts b/src/services/Firebase/firebase.ts new file mode 100644 index 0000000..bbc956d --- /dev/null +++ b/src/services/Firebase/firebase.ts @@ -0,0 +1,96 @@ +import app from "firebase/app"; +import "firebase/firestore"; + +const CONFIG = { + apiKey: process.env.REACT_APP_API_KEY, + authDomain: process.env.REACT_APP_AUTH_DOMAIN, + databaseURL: process.env.REACT_APP_DB_URL, + projectId: process.env.REACT_APP_PROJECT_ID, + storageBucket: process.env.REACT_APP_STORAGE_BUCKET, + messagingSenderId: process.env.REACT_APP_MSG_SENDER_ID, + appId: process.env.REACT_APP_APP_ID, + measurementId: process.env.REACT_APP_MEASUREMENT_ID, +}; + +const FAVS = "favs"; + +/** + * Firebase initializes the Application and provides method to interact with + * Firebase services as auth and firestore. + */ +export default class Firebase { + #db: any; + #collection: any; + + constructor() { + app.initializeApp(CONFIG); + this.#db = app.firestore(); + this.#collection = this.#db.collection("mealPlannerUsers"); + } + + /** + * Get infos for user 'email'. + */ + getByEmail = async (email: string) => { + const infos = await this.#collection + .where("email", "==", email) + .limit(1) + .get(); + + const favs = await this.getFavsByEmail(email); + + return { infos, favs }; + }; + + /** + * Get user's favourite recipes + * */ + getFavsByEmail = async (email: string) => { + let favs = [] as any[]; + const query = await this.#collection + .doc(email) + .collection(FAVS) + .where("isFav", "==", true) + .limit(10) + .get(); + + query.forEach((doc: any) => favs.push(doc.data())); + + return favs; + }; + + isFav = async (email: string, idMeal: string) => { + const query = await this.#collection + .doc(email) + .collection(FAVS) + .doc(idMeal) + .get(); + + const obj = query.data(); + return obj?.isFav; + }; + + /** + * Create or update favourite status for an authenticated user. + */ + addToFavs = async ( + email: string, + idMeal: string, + strMeal: string, + strMealThumb: string, + isFav: boolean + ) => { + this.#collection + .doc(email) + .collection(FAVS) + .doc(idMeal) + .set({ + email, + idMeal, + strMeal, + strMealThumb, + isFav, + }) + .catch((err: any) => console.error("Error adding favs to database", err)); + }; +} diff --git a/src/services/Firebase/index.js b/src/services/Firebase/index.ts similarity index 74% rename from src/services/Firebase/index.js rename to src/services/Firebase/index.ts index e929577..6682c79 100644 --- a/src/services/Firebase/index.js +++ b/src/services/Firebase/index.ts @@ -1,4 +1,4 @@ -// This file centralize all Firebase related exports +// This file centralizes all Firebase related exports import Firebase from "./firebase"; import FirebaseContext, { useFirebase } from "./context"; diff --git a/src/utils/auth_config.json.example b/src/utils/auth_config.json.example deleted file mode 100644 index da7df5f..0000000 --- a/src/utils/auth_config.json.example +++ /dev/null @@ -1,5 +0,0 @@ -/* This is a dummy auth0 config file. Use https://auth0.com/ to create your own set of keys */ -{ - "domain": "{DOMAIN}", - "clientId": "{CLIENT_ID}" -} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index a583456..e39b30d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es6", "lib": [ "dom", "dom.iterable",