Java Spring Boot Örneği
Spring Boot 3.4 ile Java 17 kullanan POS servisi referans uygulaması.
Bu, Saha POS Arayüzü (SPI) ile entegre olan bir POS servisinin referans uygulamasıdır. Spring Boot 3.4 ile Java 17 kullanarak gerekli uç noktaların nasıl uygulanacağını göstermektedir.
Kaynak Kod
Tam kaynak kodu GitHub'da görüntüleyin.
Gereksinimler
- Java 17 veya üstü
- Maven 3.9+ (veya dahil edilen Maven wrapper'ı kullanın)
Servisi Çalıştırma
Örnek dizinine gidin
cd examples/java-springbootMaven kullanarak servisi çalıştırın
./mvnw spring-boot:runWindows'ta:
mvnw.cmd spring-boot:runServis 5000 portunda başlayacaktır.
Servisi Test Etme
Uç noktaları curl veya sağlanan Postman koleksiyonu kullanarak test edebilirsiniz.
Kimlik Doğrulama
Servis bir Authorization başlığı bekler. Örnek, eksikse bir uyarı loglar ancak gösterim amaçlı herhangi bir değeri kabul eder.
Örnek İstekler
Ürünleri Al
curl -H "Authorization: Bearer secret" http://localhost:5000/productsSayfalama ile Ürünleri Al
curl -H "Authorization: Bearer secret" "http://localhost:5000/products?cursor=10"Sipariş Oluştur
curl -X POST http://localhost:5000/orders \
-H "Authorization: Bearer secret" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"product_id": "prod-1",
"quantity": 1,
"note": "No onions",
"options": [
{"name": "opt-doneness", "values": ["medium"]},
{"name": "opt-extras", "values": ["extra-cheese"]}
]
}
],
"location": "loc-table-1",
"note": "Allergy: Peanuts",
"number_of_people": 2
}'Sipariş Durumunu Al
{order_id} yerine sipariş oluşturma yanıtından dönen ID'yi yazın.
curl -H "Authorization: Bearer secret" http://localhost:5000/orders/{order_id}Siparişi İptal Et
curl -X POST http://localhost:5000/orders/{order_id}/cancel \
-H "Authorization: Bearer secret" \
-H "Content-Type: application/json" \
-d '{"reason": "Customer changed mind"}'Konumları Al
curl -H "Authorization: Bearer secret" http://localhost:5000/locationsUygulama Detayları
| Özellik | Açıklama |
|---|---|
| Spring Boot 3.4 | Java 17+ ile en son Spring Boot'u kullanır |
| Java Records | Tüm DTO'lar için modern değişmez veri sınıfları |
| snake_case JSON | Jackson yapılandırması ile otomatik dönüşüm |
| In-Memory Store | Thread-safe sipariş depolama için ConcurrentHashMap kullanır |
| Validation | Net hata mesajlarıyla istek doğrulama |
| Logging | SLF4J ile yapılandırılmış loglama |
Proje Yapısı
src/main/java/com/saha/spi/
├── SpiExampleApplication.java # Ana Spring Boot uygulaması
├── config/
│ └── AppConfig.java # Uygulama yapılandırması
├── controller/
│ └── SpiController.java # REST API uç noktaları
├── model/
│ ├── Category.java # Ürün kategorisi
│ ├── CancelOrderRequest.java # Sipariş iptal isteği DTO
│ ├── CreateOrderRequest.java # Sipariş oluşturma isteği DTO
│ ├── CreateOrderResponse.java # Sipariş oluşturma yanıtı DTO
│ ├── ErrorResponse.java # Hata yanıtı DTO
│ ├── Location.java # Konum/masa
│ ├── OrderItem.java # Sipariş satır öğesi
│ ├── OrderItemOption.java # Sipariş öğesi seçenek seçimi
│ ├── OrderStatus.java # Sipariş durumu enum
│ ├── OrderStatusResponse.java # Sipariş durumu yanıtı DTO
│ ├── Product.java # Ürün entity
│ ├── ProductOption.java # Ürün seçeneği/modifier
│ ├── ProductOptionValue.java # Fiyatlı seçenek değeri
│ ├── ProductsResponse.java # Ürün listesi yanıtı
│ └── StoredOrder.java # Dahili sipariş depolama
└── service/
└── DataService.java # Veri erişimi ve depolamaTemel Özellikler
Modern Java 17+ Özellikleri
- Record Classes: Otomatik equals/hashCode/toString ile değişmez DTO'lar
- Pattern Matching: Geliştirilmiş switch ifadeleri ve instanceof
Sipariş Durumu Simülasyonu
Siparişler otomatik olarak durumlar arasında ilerler:
accepted→in_progress(5 saniye sonra)in_progress→ready(toplam 15 saniye sonra)
Çoklu Dil Desteği
Çevrilebilir alanlar için her iki yaklaşımı da gösterir:
- Basit stringler:
"name": "Cola" - Dil map'leri:
"name": {"en": "Classic Burger", "tr": "Klasik Burger"}
Yapılandırma
Uygulama application.properties veya ortam değişkenleri ile yapılandırılabilir:
| Özellik | Varsayılan | Açıklama |
|---|---|---|
server.port | 5000 | HTTP sunucu portu |
spring.jackson.property-naming-strategy | SNAKE_CASE | JSON alan adlandırması |