Skip to content

Commit

Permalink
Merge pull request #283 from bettersg/refactor/api/middleware
Browse files Browse the repository at this point in the history
Refactor: Utilise Express built in middleware functionality
  • Loading branch information
sarge1989 committed Apr 20, 2024
2 parents cd1cf66 + 761d2be commit cac1d8e
Showing 1 changed file with 54 additions and 30 deletions.
84 changes: 54 additions & 30 deletions functions/src/definitions/api/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,49 +16,73 @@ import checkOTPHandler from "./handlers/checkOTP"
import deleteCheckerHandler from "./handlers/deleteChecker"
import { validateFirebaseIdToken } from "./middleware/validator"

// Type for supported HTTP methods
type HttpMethod = "get" | "post" | "put" | "delete" | "patch"

config()

if (!admin.apps.length) {
admin.initializeApp()
}

// Usage

const app = express()
const checkersRouter = express.Router()
const messagesRouter = express.Router()

// Route Registration Helper
function secureRoute(
path: string,
handler: RequestHandler,
method: HttpMethod = "get"
) {
app[method](path, validateFirebaseIdToken, handler)
}
checkersRouter.post("/checkers", validateFirebaseIdToken, postCheckerHandler)

checkersRouter.get(
"/checkers/:checkerId",
validateFirebaseIdToken,
getCheckerHandler
)

checkersRouter.patch(
"/checkers/:checkerId",
validateFirebaseIdToken,
patchCheckerHandler
)

checkersRouter.delete(
"/checkers/:checkerId",
validateFirebaseIdToken,
deleteCheckerHandler
)

secureRoute("/checkers/:checkerId", getCheckerHandler, "get")
secureRoute("/checkers/:checkerId", patchCheckerHandler, "patch")
secureRoute("/checkers/:checkerId", deleteCheckerHandler, "delete")
secureRoute("/checkers/:checkerId/pendingCount", getCheckerPendingCount)
secureRoute("/checkers", postCheckerHandler, "post")
secureRoute("/checkers/:checkerId/otp/check", checkOTPHandler, "post")
secureRoute("/checkers/:checkerId/otp", postOTPHandler, "post")
secureRoute("/checkers/:checkerId/votes", getCheckerVotesHandler, "get")
secureRoute(
checkersRouter.get(
"/checkers/:checkerId/pendingCount",
validateFirebaseIdToken,
getCheckerPendingCount
)

checkersRouter.post(
"/checkers/:checkerId/otp/check",
validateFirebaseIdToken,
checkOTPHandler
)

checkersRouter.post(
"/checkers/:checkerId/otp",
validateFirebaseIdToken,
postOTPHandler
)

checkersRouter.get(
"/checkers/:checkerId/votes",
validateFirebaseIdToken,
getCheckerVotesHandler
)

messagesRouter.get(
"/messages/:messageId/voteRequests/:voteRequestId",
getVoteHandler,
"get"
validateFirebaseIdToken,
getVoteHandler
)
secureRoute(

messagesRouter.patch(
"/messages/:messageId/voteRequests/:voteRequestId",
patchVoteRequestHandler,
"patch"
validateFirebaseIdToken,
patchVoteRequestHandler
)

const main = express()
main.use("/api", app)
app.use("/api", [checkersRouter, messagesRouter])

const apiHandler = onRequest(
{
Expand All @@ -68,7 +92,7 @@ const apiHandler = onRequest(
"WHATSAPP_CHECKERS_BOT_PHONE_NUMBER_ID",
],
},
main
app
)

export { apiHandler }

0 comments on commit cac1d8e

Please sign in to comment.