Skip to content

Releases: mbatchelor81/GitLab-Migration

v1.1.0 - GraphQL API

Choose a tag to compare

@mbatchelor81 mbatchelor81 released this 06 Mar 03:24

Highlights

GraphQL API

  • Full GraphQL layer using Netflix DGS framework alongside REST API
  • User mutations: createUser, login, updateUser
  • Article and comment queries/mutations
  • Profile queries with follow state
  • Custom exception handler mapping domain errors to GraphQL error codes
  • Schema defined in src/main/resources/schema/schema.graphqls

Cursor Pagination

  • New CursorPageParameter with cursor, limit, and direction (NEXT/PREV)
  • CursorPager<T> result container with hasNext/hasPrevious
  • Node interface for pageable data objects
  • Supports both offset and cursor pagination modes

Bug Fixes

  • Fixed JWT token expiry returning 500 instead of 401
  • Fixed GraphQL stack trace leakage in error responses
  • Improved slug generation to avoid collisions

Security

  • GraphQL errors no longer expose internal stack traces
  • Auth exceptions properly map to UNAUTHENTICATED error code

v1.0.0 - MVP REST API

Choose a tag to compare

@mbatchelor81 mbatchelor81 released this 06 Mar 03:24

Highlights

Core API

  • Full RealWorld spec implementation: users, articles, comments, tags, profiles
  • JWT-based stateless authentication with configurable secret and session timeout
  • CQRS architecture separating read and write paths
  • MyBatis persistence with SQLite backend
  • Flyway database migrations with seed data

Architecture

  • Four-layer DDD design: api → application → core → infrastructure
  • Domain entities with no framework dependencies in core layer
  • Offset-based pagination (max 100 items per page)

DevOps

  • Dockerfile with multi-stage build (gradle:7.4-jdk11 → eclipse-temurin:11-jre)
  • Jenkins CI pipeline with build, lint (Spotless), and test stages
  • Kubernetes deployment manifests

Known Limitations

  • SQLite single-writer lock not suitable for multi-instance production
  • No rate limiting on API endpoints
  • Article slugs can collide for similar titles