Student Information System API
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
enrollmentsin production, I learned that lesson the hard way. Sequelize-CLI's migration workflow is clunky but works. - PostgreSQL's
JSONBcolumns are a great escape hatch for fields you haven't fully designed yet. Sequelize supports them asDataTypes.JSONB. - HTTP status codes matter more than I thought. Returning
200 OKfor everything (including failures) was my first instinct; it makes the API much harder to consume from any client. npm run devwithnodemon+dotenvis the right stack for local development. Don't reach for Docker until you actually need it.