Skip to content

Commit

Permalink
#11: Configures firebase and creates routes
Browse files Browse the repository at this point in the history
  • Loading branch information
williamquintas committed May 30, 2022
1 parent cf2b5f0 commit 917357d
Show file tree
Hide file tree
Showing 8 changed files with 1,267 additions and 13 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

firebaseConfig.json

# dependencies
/node_modules
/.pnp
Expand Down
15 changes: 15 additions & 0 deletions config/firebase.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import * as admin from "firebase-admin";
import * as firebaseConfig from "../firebaseConfig.json";

if (!admin.apps.length) {
try {
admin.initializeApp({
credential: admin.credential.cert(firebaseConfig as admin.ServiceAccount),
databaseURL: process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL,
});
} catch (error) {
console.log("Firebase admin initialization error", error?.stack);
}
}

export default admin;
9 changes: 9 additions & 0 deletions models/ICoordinatesData.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export interface ICoordinatesData {
date?: string;
time?: string;
id?: string;
line?: string;
latitude?: string;
longitude?: string;
speed?: string;
}
6 changes: 6 additions & 0 deletions models/ISession.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { ICoordinatesData } from "./ICoordinatesData";

export interface ISession {
id: string;
coordinates: ICoordinatesData[];
}
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"@types/node": "^17.0.32",
"@types/react": "^18.0.9",
"@types/react-dom": "^18.0.3",
"firebase-admin": "^10.2.0",
"next": "^12.1.6",
"papaparse": "^5.3.2",
"react": "^18.1.0",
Expand Down
39 changes: 39 additions & 0 deletions pages/api/session/[sessionId].ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { NextApiRequest, NextApiResponse } from "next";
import admin from "../../../config/firebase";
import { ICoordinatesData } from "../../../models/ICoordinatesData";

export default async (req: NextApiRequest, res: NextApiResponse) => {
const db = admin.firestore();
const { method, query, body } = req;

try {
if (method == "PUT") {
const { sessionId } = query;
const docRef = db.doc(`sessions/${sessionId}`);

try {
await db.runTransaction(async (transaction) => {
const snapshot = await transaction.get(docRef);
const coordinates = docRef.collection("coordinates");
const coordinatesData = body as ICoordinatesData;
const coordinatesRef = coordinates.doc(
`${coordinatesData.date}T${coordinatesData.time}`
);
await transaction.create(coordinatesRef, coordinatesData);
});
res.status(200).json({ id: docRef.id });
} catch (err) {
console.error(
`Error while adding coordinate to session ${sessionId}.`,
err
);
res.status(500).json({ statusCode: 500, message: err.message });
}
} else {
res.setHeader("Allow", ["PUT"]);
res.status(405).end(`Method ${method} Not Allowed`);
}
} catch (err: any) {
res.status(500).json({ statusCode: 500, message: err.message });
}
};
20 changes: 20 additions & 0 deletions pages/api/session/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { NextApiRequest, NextApiResponse } from "next";
import admin from "../../../config/firebase";

export default async (req: NextApiRequest, res: NextApiResponse) => {
const db = admin.firestore();
const { method } = req;

try {
if (method == "POST") {
const id = new Date().valueOf().toString();
await db.doc(`sessions/${id}`).create({});
res.status(200).json({ id });
} else {
res.setHeader("Allow", ["POST"]);
res.status(405).end(`Method ${method} Not Allowed`);
}
} catch (err: any) {
res.status(500).json({ statusCode: 500, message: err.message });
}
};
Loading

0 comments on commit 917357d

Please sign in to comment.