-
This commit is contained in:
248
user/README.md
Normal file
248
user/README.md
Normal file
@ -0,0 +1,248 @@
|
||||
# User Management Service
|
||||
|
||||
A comprehensive user management microservice built with Go backend and React frontend, designed to integrate with the Skybridge platform architecture.
|
||||
|
||||
## Features
|
||||
|
||||
- **Full CRUD Operations**: Create, read, update, and delete users
|
||||
- **Role-Based Access**: Admin, moderator, user, and viewer roles
|
||||
- **User Status Management**: Active, inactive, suspended, and pending states
|
||||
- **Advanced Search & Filtering**: Search by name/email, filter by role/status
|
||||
- **Pagination Support**: Handle large user datasets efficiently
|
||||
- **Micro-frontend Architecture**: Seamlessly integrates with the shell dashboard
|
||||
- **RESTful API**: Clean, well-documented API endpoints
|
||||
- **Database Migrations**: Automated schema management
|
||||
- **Health Checks**: Service health and readiness endpoints
|
||||
- **Audit Logging**: Track all user management operations
|
||||
|
||||
## Architecture
|
||||
|
||||
### Backend (Go)
|
||||
- **Framework**: Gin HTTP framework
|
||||
- **Database**: PostgreSQL with sqlx
|
||||
- **Architecture**: Clean architecture with repositories and services
|
||||
- **Authentication**: Header-based (development) / JWT (production)
|
||||
- **Logging**: Structured logging with Zap
|
||||
|
||||
### Frontend (React)
|
||||
- **Framework**: React 18+ with TypeScript
|
||||
- **UI Library**: Mantine v7
|
||||
- **Module Federation**: Webpack 5 Module Federation
|
||||
- **State Management**: React hooks and context
|
||||
- **HTTP Client**: Axios with interceptors
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Using Docker Compose (Recommended)
|
||||
|
||||
```bash
|
||||
# Start all services
|
||||
docker-compose up -d
|
||||
|
||||
# Check service health
|
||||
curl http://localhost:8090/health
|
||||
|
||||
# View logs
|
||||
docker-compose logs -f user-service
|
||||
|
||||
# Stop services
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### Development Setup
|
||||
|
||||
#### Backend
|
||||
```bash
|
||||
# Navigate to user service directory
|
||||
cd user
|
||||
|
||||
# Install dependencies
|
||||
go mod download
|
||||
|
||||
# Set environment variables
|
||||
export DB_HOST=localhost
|
||||
export DB_NAME=users
|
||||
export DB_USER=postgres
|
||||
export DB_PASSWORD=postgres
|
||||
|
||||
# Run the service
|
||||
go run cmd/server/main.go
|
||||
```
|
||||
|
||||
#### Frontend
|
||||
```bash
|
||||
# Navigate to web directory
|
||||
cd user/web
|
||||
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Start development server
|
||||
npm run dev
|
||||
# Frontend will be available at http://localhost:3004
|
||||
```
|
||||
|
||||
#### Full Platform Integration
|
||||
```bash
|
||||
# Start the shell dashboard
|
||||
cd web
|
||||
npm install
|
||||
npm run dev # Available at http://localhost:3000
|
||||
|
||||
# The user management module will load automatically at /app/user
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### User Management
|
||||
- `GET /api/users` - List users with filters
|
||||
- `POST /api/users` - Create new user
|
||||
- `GET /api/users/:id` - Get user by ID
|
||||
- `PUT /api/users/:id` - Update user
|
||||
- `DELETE /api/users/:id` - Delete user
|
||||
- `GET /api/users/email/:email` - Get user by email
|
||||
- `GET /api/users/exists/:email` - Check if user exists
|
||||
|
||||
### Health & Status
|
||||
- `GET /health` - Service health check
|
||||
- `GET /ready` - Service readiness check
|
||||
- `GET /api/docs` - API documentation
|
||||
|
||||
## Environment Variables
|
||||
|
||||
### Required
|
||||
- `DB_HOST` - Database host (default: localhost)
|
||||
- `DB_PORT` - Database port (default: 5432)
|
||||
- `DB_NAME` - Database name (default: users)
|
||||
- `DB_USER` - Database username
|
||||
- `DB_PASSWORD` - Database password
|
||||
|
||||
### Optional
|
||||
- `SERVER_HOST` - Server host (default: 0.0.0.0)
|
||||
- `SERVER_PORT` - Server port (default: 8090)
|
||||
- `APP_ENV` - Environment (development/production)
|
||||
- `LOG_LEVEL` - Logging level (debug/info/warn/error)
|
||||
- `AUTH_PROVIDER` - Authentication provider (header/jwt)
|
||||
- `AUTH_HEADER_USER_EMAIL` - Auth header name (default: X-User-Email)
|
||||
|
||||
## Database Schema
|
||||
|
||||
### Users Table
|
||||
```sql
|
||||
- id (UUID, primary key)
|
||||
- email (VARCHAR, unique)
|
||||
- first_name, last_name (VARCHAR)
|
||||
- display_name (VARCHAR, optional)
|
||||
- avatar (VARCHAR, optional)
|
||||
- role (ENUM: admin, moderator, user, viewer)
|
||||
- status (ENUM: active, inactive, suspended, pending)
|
||||
- last_login_at (TIMESTAMP, optional)
|
||||
- created_at, updated_at (TIMESTAMP)
|
||||
- created_by, updated_by (VARCHAR)
|
||||
```
|
||||
|
||||
### Additional Tables
|
||||
- `user_profiles` - Extended user profile information
|
||||
- `user_sessions` - Session management
|
||||
- `audit_events` - Audit logging
|
||||
|
||||
## Go Client Library
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/RyanCopley/skybridge/user/client"
|
||||
"github.com/RyanCopley/skybridge/user/internal/domain"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Create client
|
||||
userClient := client.NewUserClient("http://localhost:8090", "admin@example.com")
|
||||
|
||||
// Create user
|
||||
createReq := &domain.CreateUserRequest{
|
||||
Email: "john@example.com",
|
||||
FirstName: "John",
|
||||
LastName: "Doe",
|
||||
Role: "user",
|
||||
Status: "active",
|
||||
}
|
||||
|
||||
user, err := userClient.CreateUser(createReq)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// List users
|
||||
listReq := &domain.ListUsersRequest{
|
||||
Status: &domain.UserStatusActive,
|
||||
Limit: 10,
|
||||
}
|
||||
|
||||
response, err := userClient.ListUsers(listReq)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Frontend Integration
|
||||
|
||||
The user management frontend automatically integrates with the Skybridge shell dashboard through Module Federation. It appears in the navigation under "User Management" and is accessible at `/app/user`.
|
||||
|
||||
### Key Components
|
||||
- `UserManagement` - Main list view with search/filter
|
||||
- `UserForm` - Create/edit user form
|
||||
- `userService` - API client service
|
||||
- Type definitions for all data models
|
||||
|
||||
## Development
|
||||
|
||||
### Running Tests
|
||||
```bash
|
||||
# Backend tests
|
||||
go test -v ./test/...
|
||||
|
||||
# Frontend tests
|
||||
cd user/web
|
||||
npm test
|
||||
```
|
||||
|
||||
### Building
|
||||
```bash
|
||||
# Backend binary
|
||||
go build -o user-service ./cmd/server
|
||||
|
||||
# Frontend production build
|
||||
cd user/web
|
||||
npm run build
|
||||
```
|
||||
|
||||
## Deployment
|
||||
|
||||
### Docker
|
||||
```bash
|
||||
# Build image
|
||||
docker build -t user-service .
|
||||
|
||||
# Run container
|
||||
docker run -p 8090:8090 \
|
||||
-e DB_HOST=postgres \
|
||||
-e DB_PASSWORD=postgres \
|
||||
user-service
|
||||
```
|
||||
|
||||
### Integration with Skybridge Platform
|
||||
1. The user service runs on port 8090 (configurable)
|
||||
2. The frontend runs on port 3004 during development
|
||||
3. Module Federation automatically makes it available in the shell dashboard
|
||||
4. Authentication is handled via header forwarding from the main platform
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Follow the established patterns from the KMS service
|
||||
2. Maintain clean architecture separation
|
||||
3. Update tests for new functionality
|
||||
4. Ensure frontend follows Mantine design patterns
|
||||
5. Test Module Federation integration
|
||||
Reference in New Issue
Block a user