- Replaced Apollo Server with Mercurius for GraphQL API - Updated resolvers to use Mercurius-compatible GraphQL implementation - Migrated from Express to Fastify for server framework - Improved error handling with GraphQL error extensions - Added Zod for environment variable validation - Updated Prisma schema and migrations - Configured CORS and WebSocket subscriptions - Simplified GraphQL schema and resolver structure - Enhanced type safety and code organization - Replaced Apollo Server with Mercurius for GraphQL API - Updated resolvers to use Mercurius-compatible GraphQL implementation - Migrated from Express to Fastify for server framework - Improved error handling with GraphQL error extensions - Added Zod for environment variable validation - Updated Prisma schema and migrations - Configured CORS and WebSocket subscriptions - Simplified GraphQL schema and resolver structure - Enhanced type safety and code organization Reviewed-on: #1 Co-authored-by: Jusemon <juansmm@outlook.com> Co-committed-by: Jusemon <juansmm@outlook.com>
2.1 KiB
2.1 KiB
Unreal Chat API
The backend API for the Unreal Chat application, built with Mercurius, GraphQL, and Prisma.
Features
- GraphQL API with Mercurius
- Real-time subscriptions for messages and rooms
- Prisma ORM with MariaDB
- User authentication
- Chat rooms and messaging
Getting Started
Prerequisites
- Node.js (v18 or later)
- npm (v10 or later)
- MariaDB or MySQL
Installation
- Install dependencies:
npm install
- Set up the database:
Make sure you have MariaDB running and update the connection string in prisma/.env
if needed.
- Run Prisma migrations:
npm run prisma:migrate
- Start the development server:
npm run dev
The API will be available at http://localhost:8080/graphql.
Available Scripts
npm run dev
- Start the development servernpm run build
- Build the applicationnpm run start
- Start the production servernpm run prisma:generate
- Generate Prisma clientnpm run prisma:migrate
- Run Prisma migrationsnpm run prisma:studio
- Open Prisma Studio
API Documentation
Authentication
For development purposes, authentication is simplified. In a production environment, you would use JWT tokens.
GraphQL Schema
The GraphQL schema includes the following main types:
User
: Represents a user in the systemRoom
: Represents a chat roomMessage
: Represents a message in a chat room
Queries
me
: Get the current userusers
: Get all usersuser(id: ID!)
: Get a user by IDrooms
: Get all public roomsroom(id: ID!)
: Get a room by IDmessages(roomId: ID!)
: Get messages in a room
Mutations
register(email: String!, username: String!, password: String!)
: Register a new userlogin(email: String!, password: String!)
: Login a usercreateRoom(name: String!, description: String, isPrivate: Boolean)
: Create a new roomjoinRoom(roomId: ID!)
: Join a roomleaveRoom(roomId: ID!)
: Leave a roomsendMessage(content: String!, roomId: ID!)
: Send a message to a room
Subscriptions
messageAdded(roomId: ID!)
: Subscribe to new messages in a roomroomAdded
: Subscribe to new rooms