skip to content

Student Information System API

[completed]Node.js, Express, PostgreSQL, Sequelizegithub ↗

Project Overview

My introduction to backend development. A Node.js + Express + PostgreSQL API with Sequelize ORM for managing students, courses, and enrollments. Built as a course assignment, but I kept polishing it after the grade was in.

Technology Stack

| Component | Technology | | --------- | --------------- | | Runtime | Node.js | | Framework | Express | | Database | PostgreSQL | | ORM | Sequelize | | Language | JavaScript |

What It Does

The API exposes CRUD endpoints for three core entities:

  • Students — Turkish ID (T.C. Kimlik Numarası), name, email, GPA, year.
  • Courses — code, title, credits, instructor.
  • Enrollments — links students to courses with grades.

Standard REST conventions: GET /students, POST /students, PATCH /students/:id, etc. Sequelize handles the SQL generation and migrations.

What I Learned

  • ORMs are a mixed bag. Sequelize gets you 80% of the way there with very little code, then makes the last 20% (complex joins, raw aggregations) more painful than it would be in plain SQL.
  • Migrations are not optional. The first time I needed to add a column to enrollments in production, I learned that lesson the hard way. Sequelize-CLI's migration workflow is clunky but works.
  • PostgreSQL's JSONB columns are a great escape hatch for fields you haven't fully designed yet. Sequelize supports them as DataTypes.JSONB.
  • HTTP status codes matter more than I thought. Returning 200 OK for everything (including failures) was my first instinct; it makes the API much harder to consume from any client.
  • npm run dev with nodemon + dotenv is the right stack for local development. Don't reach for Docker until you actually need it.