BCC Member's App

Jurisprudence fetishist gets off on technicality.

Description

The backend server for Baguio Country Club's mobile app, one of the flagship projects of the Club during that fiscal year. My biggest project yet in terms of stability requirements and number of end-users.

Features

Static Data Endpoints

  • Good old CRUD.

Reservation

  • Create and cancel reservations for various club facilities and provide functionality to view reservation history.

  • Dynamically cancel expired reservations according to Club policies.

File Handling

  • Accept image uploads and process incoming files to optimize space, including size scaling and format conversion. Additionally, save metadata to the database.

  • Batch-process files regularly provided by the Finance department and accurately map each file to specific tables in the database.

  • Efficiently serve images and documents to users as required.

This part of the server has evolved to a new, standalone system. See here.

Account Management

  • Issue accounts and facilitate password changes as required.

  • Manage OTP storage, process OTP requests, and handle the dispatch of OTPs to users.

Real-time Chat

  • Monitor and identify active clients eligible for bidirectional data transfer, and facilitate the exchange of data using socket protocols.

Logging and Data Visualization

  • Store logs and various data that are used for metric analysis and report generation.

Security

  • Handle identity generation and authentication.

  • Prevent data from being accessed by unauthorized entities.

  • Implement industry-standard security practices such as input sanitation and rate-limiting.

Work Done

Design

  • Reviewed code of a rudimentary proof-of-concept server (PHP) developed by a separate duo of programmers.

  • Collaborated with frontend developer to create a basic backend structure, taking into consideration ideas from the existing server.

  • Designed database schema and created entity-relationship charts to ensure efficient data storage and relationships.

  • Designed the data-flow of discrete components (such as login and OTP processes), then finalized overall server architecture.

Interviews/Presentations

  • Conducted manager interviews to gather requirements and ensure system met business needs.

  • Presented the design and system functionalities to managers to gather additional feedback.

Development

  • Developed new server in Typescript, in concert with the frontend developer integrating the endpoints, and conducting continuous testing to ensure endpoint functionality and data integrity.

  • Created environments for development and testing purposes.

  • Created database, tables, views, and stored procedures.

During the development of this backend, I also had to change the existing proxy server due to security and compatibility issues of the old one. See here.

Deployment

  • Setup DNS records and configured the newly-crafted proxy server to work with these records.

  • Several months after the initial deployment, redeployed server code and migrated database from old machine to a new one.

Testing

  • Continuous testing to ensure response and load-handling capabilities, including:

    • data validation and error handling

    • data security and access control

    • data backup and recovery procedures

Documentation

  • Documented system's design and inner workings, as well as API endpoints, to ensure transparency and ease of maintenance.

Security

  • Implemented security measures to adhere to industry standards and reduce potential attack vectors.

  • Periodically check the logs for any unusual events.

Maintenance

  • Monitored and maintained server upkeep, fixing bugs and addressing issues as they arise.

  • Update code in response to each requirement addition and policy changes.

  • Collaborated with Finance department to generate monthly documents for each member and process them through the database.

Tech Stack

Backend

Express.js Socket.io

  • pm2 - Backend monitoring and parallelization (via clustering).

Data Storage

MicrosoftSQLServer Docker Redis

Testing

  • mocha + supertest + chai - Endpoint testing.

  • grafana k6 + locust.py - Load testing

Utilities

  • GitHub

  • Swagger

  • Python - batch processing of files (ex. file renaming, PDF manipulation via PyMuPDF)

  • pino + prometheus + grafana loki - Logging, visualization, and data analysis.

  • sharp + multer - image processing

  • cron - run scheduled jobs

  • draw.IO - generate ERD charts

  • MermaidJS - generate charts to visualize data flow and backend design

  • Docker + Uptime Kuma - backend health monitor tool and notification service

Series 1 of 4 in the Featured Collection.

Last updated