Skip to content

CarterIrish/savepoint-api

Repository files navigation

SavePoint

A Node.js REST API for cataloguing and exploring your personal game library. Built for IGME 430 – Rich Media Web App Development II at RIT.

Live: https://savepoint-api-74f955603809.herokuapp.com/


About

SavePoint is a web API that allows users to access, search, filter, and manage a dataset of video games. It is built from scratch using only Node's built-in http and fs modules — no web server frameworks. The server also hosts a client-facing webpage for interacting with the data and a documentation page for developers.


Project Structure

SavePoint/
├── .github/
│   └── workflows/
│       └── node.js.yml     # GitHub Actions CI workflow
├── client/                 # Static files served to the browser
│   ├── index.html          # Main client-facing page
│   ├── docs.html           # API documentation page
│   ├── main.js             # Client-side fetch logic
│   └── mainStyle.css       # Stylesheet
├── db/
│   └── games.json          # IGDB-sourced game dataset
├── src/                    # Server-side code
│   ├── server.js           # Entry point, routing, and body parsing
│   ├── htmlResponses.js    # Handlers for static file responses
│   ├── jsonResponses.js    # Handlers for JSON API responses
│   └── store.js            # In-memory data store
├── eslint.config.js        # ESLint flat config
├── package.json
└── README.md

API Endpoints

Full endpoint documentation is available at the /docs page.

JSON API Routes

Method Endpoint Description
GET/HEAD /api/games Returns summary list of all games. Supports ?name, ?genre, ?platform, ?limit
GET/HEAD /api/games/:idOrSlug Returns a single game by numeric ID or slug
GET/HEAD /api/genres Returns a deduplicated list of all genres
GET/HEAD /api/platforms Returns a deduplicated list of all platforms
POST /api/games Creates a new game entry (201)
POST /api/games/:idOrSlug Updates an existing game (204)

Static Routes

Method Endpoint Description
GET/HEAD / Main client page
GET/HEAD /docs API documentation page
GET/HEAD /mainStyle.css Stylesheet
GET/HEAD /main.js Client script

Requirements Met

  • Data loaded from .json file at server startup
  • Static files served by the Node server
  • 4 GET endpoints with query parameter support
  • 2 POST endpoints accepting JSON and x-www-form-urlencoded
  • Status codes: 200, 201, 204, 400, 404
  • Content-Type and Content-Length headers on all responses
  • HEAD request support on all GET endpoints
  • 404 response for invalid URLs
  • Client page using fetch() with Accept and Content-Type headers
  • API documentation page
  • ESLint with js/recommended spec
  • GitHub Actions CI
  • Deployed to Heroku

Author

Carter Irish IGME 430 – RIT, Spring 2025

About

A Node.js REST API for cataloguing and exploring your personal game library. Built for IGME 430 at RIT.

Resources

License

Stars

Watchers

Forks

Contributors