This commit implements the complete medication management system, which is a critical MVP feature for Normogen. Features Implemented: - 7 fully functional API endpoints for medication CRUD operations - Dose logging system (taken/skipped/missed) - Real-time adherence calculation with configurable periods - Multi-person support for families managing medications together - Comprehensive security (JWT authentication, ownership verification) - Audit logging for all operations API Endpoints: - POST /api/medications - Create medication - GET /api/medications - List medications (by profile) - GET /api/medications/:id - Get medication details - PUT /api/medications/:id - Update medication - DELETE /api/medications/:id - Delete medication - POST /api/medications/:id/log - Log dose - GET /api/medications/:id/adherence - Calculate adherence Security: - JWT authentication required for all endpoints - User ownership verification on every request - Profile ownership validation - Audit logging for all CRUD operations Multi-Person Support: - Parents can manage children's medications - Caregivers can track family members' meds - Profile-based data isolation - Family-focused workflow Adherence Tracking: - Real-time calculation: (taken / total) × 100 - Configurable time periods (default: 30 days) - Tracks taken, missed, and skipped doses - Actionable health insights Files Modified: - backend/src/handlers/medications.rs - New handler with 7 endpoints - backend/src/handlers/mod.rs - Added medications module - backend/src/models/medication.rs - Enhanced with repository pattern - backend/src/main.rs - Added 7 new routes Phase: 2.7 - Task 1 (Medication Management) Status: Complete and production-ready Lines of Code: ~550 lines
102 lines
3.1 KiB
Bash
Executable file
102 lines
3.1 KiB
Bash
Executable file
#!/bin/bash
|
|
set -e
|
|
|
|
echo "🚀 Deploying Normogen Backend to Solaria (Improved)"
|
|
echo "===================================================="
|
|
|
|
# Configuration
|
|
REMOTE_HOST="solaria"
|
|
REMOTE_DIR="/srv/normogen"
|
|
DOCKER_COMPOSE_FILE="docker/docker-compose.improved.yml"
|
|
|
|
# Colors for output
|
|
RED='\\033[0;31m'
|
|
GREEN='\\033[0;32m'
|
|
YELLOW='\\033[1;33m'
|
|
NC='\\033[0m' # No Color
|
|
|
|
log_info() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Check if JWT_SECRET is set
|
|
if [ -z "${JWT_SECRET}" ]; then
|
|
log_error "JWT_SECRET environment variable not set!"
|
|
echo "Usage: JWT_SECRET=your-secret ./backend/deploy-to-solaria-improved.sh"
|
|
echo ""
|
|
echo "Generate a secure secret with:"
|
|
echo " openssl rand -base64 32"
|
|
exit 1
|
|
fi
|
|
|
|
# Step 1: Build locally
|
|
log_info "Step 1: Building backend binary locally..."
|
|
cargo build --release
|
|
log_info "✅ Build complete"
|
|
|
|
# Step 2: Create remote directory structure
|
|
log_info "Step 2: Setting up remote directory..."
|
|
ssh ${REMOTE_HOST} "mkdir -p ${REMOTE_DIR}/docker"
|
|
log_info "✅ Directory ready"
|
|
|
|
# Step 3: Create .env file on remote
|
|
log_info "Step 3: Setting up environment variables..."
|
|
ssh ${REMOTE_HOST} "cat > ${REMOTE_DIR}/.env << EOF
|
|
MONGODB_DATABASE=normogen
|
|
JWT_SECRET=${JWT_SECRET}
|
|
RUST_LOG=info
|
|
SERVER_PORT=8000
|
|
SERVER_HOST=0.0.0.0
|
|
EOF"
|
|
log_info "✅ Environment configured"
|
|
|
|
# Step 4: Copy improved Docker files to remote
|
|
log_info "Step 4: Copying Docker files to remote..."
|
|
scp docker/Dockerfile.improved ${REMOTE_HOST}:${REMOTE_DIR}/docker/Dockerfile.improved
|
|
scp docker/docker-compose.improved.yml ${REMOTE_HOST}:${REMOTE_DIR}/docker/docker-compose.improved.yml
|
|
log_info "✅ Docker files copied"
|
|
|
|
# Step 5: Stop old containers
|
|
log_info "Step 5: Stopping old containers..."
|
|
ssh ${REMOTE_HOST} "cd ${REMOTE_DIR} && docker compose down 2>/dev/null || true"
|
|
log_info "✅ Old containers stopped"
|
|
|
|
# Step 6: Start new containers with improved configuration
|
|
log_info "Step 6: Starting new containers..."
|
|
ssh ${REMOTE_HOST} "cd ${REMOTE_DIR} && docker compose -f ${DOCKER_COMPOSE_FILE} up -d"
|
|
log_info "✅ Containers started"
|
|
|
|
# Step 7: Wait for containers to be healthy
|
|
log_info "Step 7: Waiting for containers to stabilize..."
|
|
sleep 10
|
|
ssh ${REMOTE_HOST} "docker compose -f ${REMOTE_DIR}/${DOCKER_COMPOSE_FILE} ps"
|
|
log_info "✅ Container status retrieved"
|
|
|
|
# Step 8: Test API health endpoint
|
|
log_info "Step 8: Testing API health endpoint..."
|
|
sleep 5
|
|
if curl -f http://solaria.solivarez.com.ar:8001/health > /dev/null 2>&1; then
|
|
log_info "✅ API is responding correctly"
|
|
else
|
|
log_warn "⚠️ API health check failed - check logs with:"
|
|
echo " ssh ${REMOTE_HOST} 'docker logs -f normogen-backend'"
|
|
fi
|
|
|
|
log_info "🎉 Deployment complete!"
|
|
echo ""
|
|
echo "View logs:"
|
|
echo " ssh ${REMOTE_HOST} 'docker compose -f ${REMOTE_DIR}/${DOCKER_COMPOSE_FILE} logs -f backend'"
|
|
echo ""
|
|
echo "View status:"
|
|
echo " ssh ${REMOTE_HOST} 'docker compose -f ${REMOTE_DIR}/${DOCKER_COMPOSE_FILE} ps'"
|
|
echo ""
|
|
echo "Restart services:"
|
|
echo " ssh ${REMOTE_HOST} 'docker compose -f ${REMOTE_DIR}/${DOCKER_COMPOSE_FILE} restart'"
|