A comprehensive Spring Boot backend application for the DrugGuard Ghana platform, providing drug verification, management, and analytics services for FDA Ghana.
DrugGuard Ghana Backend is a robust API service that enables:
- Drug Verification: QR code scanning and authenticity verification
- Drug Management: CRUD operations for FDA drug database
- Analytics: Comprehensive reporting and insights
- Voice Processing: Multi-language voice recognition and text-to-speech
- User Management: Admin authentication and authorization
- Reporting System: Citizen drug report management
- β Drug Verification System - QR code scanning and authenticity checks
- β Drug Management - Complete CRUD operations for drug database
- β Analytics Dashboard - Comprehensive reporting and insights
- β Voice Processing - Multi-language voice recognition and TTS
- β User Authentication - JWT-based admin authentication
- β Drug Reporting - Citizen report submission and management
- β QR Code Generation - Dynamic QR code creation for drugs
- β Search Functionality - Advanced drug search capabilities
- π JWT-based authentication
- π‘οΈ Role-based access control (FDA_ADMIN)
- π Secure password encryption (BCrypt)
- π CORS configuration
- π Request/response logging
- π RESTful API design
- π Advanced search capabilities
- π± Pagination support
- π― Multi-language support (English, Twi, Ga, Ewe)
- π Real-time analytics
- ποΈ File upload support (QR codes, images)
- Framework: Spring Boot 3.x
- Language: Java 17+
- Database: H2 (Development), MySQL/PostgreSQL (Production)
- Security: Spring Security + JWT
- Build Tool: Maven
- API Documentation: OpenAPI/Swagger
- Testing: JUnit 5, Mockito
- Logging: SLF4J + Logback
- Java 17 or higher
- Maven 3.6+
- Git
- IDE (IntelliJ IDEA, Eclipse, VS Code)
git clone <repository-url>
cd ghana-backendEdit src/main/resources/application.properties:
# Database Configuration
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
# JPA Configuration
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
# H2 Console (Development)
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console# Build the project
mvn clean install
# Run the application
mvn spring-boot:run- API Base URL:
http://localhost:8080/api - H2 Console:
http://localhost:8080/h2-console - Swagger UI:
http://localhost:8080/swagger-ui.html
POST /api/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "password"
}GET /api/auth/validate
Authorization: Bearer <jwt-token>GET /api/admin/drugs?page=0&size=20&sortBy=name&sortDirection=asc
Authorization: Bearer <jwt-token>POST /api/admin/drugs
Authorization: Bearer <jwt-token>
Content-Type: application/json
{
"name": "Paracetamol 500mg",
"manufacturer": "ABC Pharmaceuticals",
"batchNumber": "BATCH001",
"registrationNumber": "FDA123456",
"activeIngredient": "Paracetamol",
"strength": "500mg",
"dosageForm": "Tablet",
"category": "Analgesic",
"manufactureDate": "2024-01-01",
"expiryDate": "2026-01-01",
"description": "Pain reliever and fever reducer"
}GET /api/drugs/search?query=paracetamol&page=0&size=20POST /api/drugs/verify
Content-Type: application/json
{
"qrCode": "drug_123_abc123",
"location": "Accra, Ghana"
}GET /api/public/drugs/search?query=paracetamol&page=0&size=20POST /api/voice/recognize
Content-Type: multipart/form-data
audio: <audio-file>
language: enPOST /api/voice/speak
Content-Type: application/json
{
"text": "Hello, this is a test message",
"language": "en"
}GET /api/voice/languagesPOST /api/reports
Content-Type: application/json
{
"drugName": "Suspicious Drug",
"manufacturer": "Unknown",
"description": "Found suspicious packaging",
"issueType": "COUNTERFEIT",
"severity": "HIGH",
"location": "Accra",
"contactInfo": "[email protected]"
}GET /api/reports/recentGET /api/admin/analytics/overview
Authorization: Bearer <jwt-token>GET /api/admin/analytics/drugs
Authorization: Bearer <jwt-token>GET /api/admin/analytics/scans?days=30
Authorization: Bearer <jwt-token>src/main/java/com/drugguard/ghana/
βββ config/ # Configuration classes
β βββ DataInitializer.java
β βββ DrugDataInitializer.java
β βββ WebSecurityConfig.java
βββ controller/ # REST controllers
β βββ AdminController.java
β βββ AdminDrugController.java
β βββ AnalyticsController.java
β βββ AuthController.java
β βββ DrugReportController.java
β βββ HealthAiController.java
β βββ PublicDrugController.java
β βββ QrCodeController.java
β βββ SearchController.java
β βββ VoiceController.java
βββ dto/ # Data Transfer Objects
β βββ AdvancedSearchRequest.java
β βββ CreateDrugReportRequest.java
β βββ CreateDrugRequest.java
β βββ DrugReportResponse.java
β βββ DrugSearchRequest.java
β βββ DrugVerificationResponse.java
β βββ JwtResponse.java
β βββ LoginRequest.java
β βββ MessageResponse.java
β βββ PublicDrugResponse.java
β βββ QrCodeResponse.java
β βββ SearchResponse.java
β βββ SearchSuggestionsResponse.java
β βββ UpdateDrugRequest.java
βββ model/ # Entity models
β βββ Drug.java
β βββ DrugReport.java
β βββ FdaAdmin.java
β βββ ScanTracking.java
βββ repository/ # Data access layer
β βββ DrugReportRepository.java
β βββ DrugRepository.java
β βββ FdaAdminRepository.java
β βββ ScanTrackingRepository.java
βββ security/ # Security configuration
β βββ AuthTokenFilter.java
β βββ JwtUtils.java
βββ service/ # Business logic
β βββ AnalyticsService.java
β βββ AuthService.java
β βββ DrugReportService.java
β βββ DrugService.java
β βββ FdaAdminDetailsService.java
β βββ HealthAiService.java
β βββ QrCodeService.java
β βββ ScanTrackingService.java
β βββ SearchService.java
β βββ VoiceProcessingService.java
βββ DrugguardGhanaBackendApplication.java
# Server Configuration
server.port=8080
server.servlet.context-path=/api
# Database Configuration
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=password
# JWT Configuration
jwt.secret=your-secret-key
jwt.expiration=86400000
# File Upload Configuration
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
# Logging Configuration
logging.level.com.drugguard=DEBUG
logging.level.org.springframework.security=DEBUGThe application uses Spring Security with JWT authentication:
- Public Endpoints:
/api/public/**,/api/auth/**,/api/drugs/search/**,/api/voice/** - Admin Endpoints:
/api/admin/**(requires FDA_ADMIN role) - Protected Endpoints: All other endpoints require authentication
# Run all tests
mvn test
# Run specific test class
mvn test -Dtest=DrugServiceTest
# Run with coverage
mvn test jacoco:reportThe project includes comprehensive tests for:
- β Service layer tests
- β Controller layer tests
- β Repository layer tests
- β Security configuration tests
- β Integration tests
# Build Docker image
docker build -t drugguard-ghana-backend .
# Run container
docker run -p 8080:8080 drugguard-ghana-backendFor production deployment:
- Database: Use MySQL or PostgreSQL
- Security: Configure proper JWT secrets
- Logging: Configure production logging levels
- Monitoring: Add health checks and metrics
- SSL: Configure HTTPS
- Health Check:
GET /actuator/health - Info:
GET /actuator/info - Metrics:
GET /actuator/metrics
The application uses structured logging with different levels:
- DEBUG: Detailed debugging information
- INFO: General application information
- WARN: Warning messages
- ERROR: Error messages
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow Java coding conventions
- Use meaningful variable and method names
- Add proper documentation
- Include unit tests for new features
This project is licensed under the MIT License - see the LICENSE file for details.
For support and questions:
- π§ Email: [email protected]
- π± Phone: +233 XX XXX XXXX
- π Website: https://drugguard-ghana.com
- FDA Ghana for regulatory guidance
- Spring Boot community for the excellent framework
- All contributors and stakeholders
DrugGuard Ghana Backend - Empowering drug safety and verification in Ghana π¬π