A Spring Boot REST API for managing translations with OpenAI integration.
- RESTful API for translation management
- OpenAI integration for text translation
- PostgreSQL database with Liquibase for schema management
- Docker support for easy deployment
- Comprehensive test coverage
- Java 17
- Docker and Docker Compose
- OpenAI API key (set as environment variable
OPENAI_API_KEY
)
./gradlew clean build
./gradlew test
- Set up environment variables:
export OPENAI_API_KEY=your-api-key-here
export SPRING_PROFILES_ACTIVE=local
- Start PostgreSQL (if not using Docker):
# On macOS
brew services start postgresql
# On Linux
sudo service postgresql start
- Run the application:
./gradlew bootRun
The API will be available at http://localhost:8080/api/translations
docker-compose up
GET /api/translations
- Get all translationsGET /api/translations/{id}
- Get translation by IDPOST /api/translations
- Create a new translationPUT /api/translations/{id}
- Update a translationDELETE /api/translations/{id}
- Delete a translationPOST /api/translations/translate
- Translate text using OpenAI
{
"sourceText": "Hello",
"sourceContext": "Greeting",
"sourceLanguage": "en",
"targetLanguage": "nl"
}
Create application-local.properties
:
# Database Configuration
spring.datasource.url=jdbc:postgresql://localhost:5432/translation_db
spring.datasource.username=postgres
spring.datasource.password=
spring.datasource.driver-class-name=org.postgresql.Driver
# JPA Configuration
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
# Liquibase Configuration
spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.xml
spring.liquibase.contexts=local
spring.liquibase.default-schema=public
spring.liquibase.drop-first=false
spring.liquibase.enabled=true
# OpenAI Configuration
openai.api.model=gpt-3.5-turbo
openai.api.temperature=0.7
openai.api.max-tokens=1000
Create application-prod.properties
:
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.jpa.hibernate.ddl-auto=none
spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.xml
# OpenAI Configuration
openai.api.model=${OPENAI_MODEL}
openai.api.temperature=${OPENAI_TEMPERATURE}
openai.api.max-tokens=${OPENAI_MAX_TOKENS}
The project includes:
- Unit tests for services
- Integration tests for controllers
- Mock tests for external services
Run tests with:
./gradlew test
MIT
.
├── src/ # Spring Boot backend
│ ├── main/
│ │ └── java/ # Java source files
│ └── test/ # Test files
├── build.gradle # Gradle build configuration
└── docker-compose.yml # Docker configuration