Tek Activity ve iki Fragment kullanarak QR ile ödeme alma, onaylama ve veritabanına kaydetme uygulaması.
MVVM, Retrofit, Dagger, Room, Fragment, Truth, Mockito, Espresso
Uygulama açıldığında MainActivity POSFragment'ı açar.
Kullanıcı burada ödeme tutarını girer ve "QR ile Öde" tuşuna basar.
Ödeme tutarı OSY-QR servisine yollanır.
Gelen cevaba göre QR kodu çizer ve gösterir.
Bu işlem sonucunda "Arayüze Git" tuşu aktifleşir.
Tuşa basıldığında CustomerInfoFragment açılır ve müşteri arayüzüne gidilmiş olur.
Son yapılan ödeme tutarı ve bu ödemenin QR kodu gösterilir.
"Ödemeyi Onayla" tuşuna basarak ödeme miktarını ve QR kodu OSY-QR servisine yollar.
Servis, cevap döndüğünde onaylama tuşu deaktif hale gelir ve tik resmi gözükür.
Ödemenin onaylanmasıyla beraber bu ödeme veritabanına kaydedilir.
Bu ödeme ve geçmişteki ödemeler ekranın aşağısında bulunan listede gözükmektedir.
Fragmentların çalışma akışlarını ve doğru değerlerin gösterilip gösterilmediğini kontrol eden testler.
testPOSFragmentFlow: POS arayüzünün normal kullanım testi
testCustomerInfoFragmentReceiptAmount: POS arayüzünde girilen miktarın müşteri arayüzünde doğru gösterildiğini kontrol eder
testCustomerInfoFragmentPaymentHistory: Onaylanan ödemenin doğru bir şekilde geçmişe kaydedildiğini kontrol eder
verifyReceiptAmount: Ödeme miktarının QR isteği atıldıktan sonra doğru kaldığını kontrol eder
verifyPaymentAdd: Ödemenin veritabanına doğru kaydedildiğini test eder
verifyPaymentResponse: Ödeme isteğine karşılık beklenen cevabın döndüğünü test eder
Ödeme yollanırken PostPayment içinde bulunabilir. (Projede kullanılmasına gerek yok. Sebep: "If returnCode != 1000, “paymentInfoList” is not required.")
Ödeme yollanırken PostPayment içinde bulunabilir. (Projede kullanılmasına gerek yok. Sebep: "If returnCode != 1000, “paymentInfoList” is not required.")
Ödeme isteği atılırken kullanılan class
QRForSale isteği atılırken kullanılan class
Gönderilen ödeme isteğine karşılık servisten alınan cevap
Gönderilen QR isteğine karşılık servisten alınan cevap
Servise gönderilen HTTP isteklerine yetkilendirme headerlarını ekleyen interceptor
Backend servisle haberleşmeyi sağlayan servis
Base Activity sınıfı. ViewBinding'e göre activity'yi hazırlar.
Base View Model sınıfı. OSY Servisi ve database repository objelerini Dagger yoluyla alıp tutar. String ile QR Bitmap oluşturma fonksiyonunu içerir. Aynı zamanda view model'daki LiveData'ların tek seferliğine observe edilmesini sağlayan extension da buradadır.
Base Fragment sınıfı. ViewBinding ve BaseViewModel'a göre fragment'ı hazırlar. View bindingin kurulmasını ve gerekli Base View Model'in oluşturulmasını sağlar.
Dependency injection yapan Dagger'ın komponentidir. DI işlemlerini bu interface yapar. Kullandığı modüller @Component içinde belirtilmiştir. BaseViewModel'a enjekte eden budur.
Uygulamanın müşteri arayüzü kısmını oluşturur. View binding aracılığıyla layoutu kontrol eder. Ödenecek tutarı ve QR bilgisini POSFragment'tan parametre olarak alır.
Müşteri arayüzü ekranı için oluşturulmuş view model. Fragment için veritabanına erişim sunar. Aynı zamanda ödeme onaylanması için servisi tetikler.
Geçmişteki ödemeleri göstermek için Recycler Viewlar kullanan adaptör.
Ödeme veritabanındaki satırları temsil eden data class
Ödeme veritabanındaki işlemleri yürüten DAO (Data Access Object)
Ödeme veritabanını temsil eden class. İçinde nasıl satırlar olduğunu @Database(entities) aracılığıyla alır. Versiyonlar veritabanındaki değişikliklerin takip edilmesi ve gerektiğinde Migration fonksiyonları yazılıp uygulanmasını sağlar.
Ödeme veritabanındaki işlemleri DAO üzerinde tetikleyen class
Fragmentları içinde barındırır ve ilk fragment olan POSFragment'ı açar.
View modelları factory patterni ile oluşturur.
Dependency injection sırasında gerekli olan veritabanıyla ilgili değişkenleri sağlayan class. @Singleton bu değişkenin sadece bir defa oluşturulmasını sağlar.
Backend ile iletişimle ilgili olan değişkenleri DI için sağlar. SSL sertifika doğrulama işlemi etkisiz hale getirilmiştir. Http üzerinden yapılan haberleşmelerin loglanması için HttpLoggingInterceptor eklenmiştir.
Uygulamanın ödeme alma kısmını oluşturur. Ödeme alındıktan sonra müşteri arayüzünü açmak için CustomerInfoFragment'ı ödeme miktarı ve QR verisiyle başlatır.
Fragmentta girilen ödeme miktarı için servise istek atar ve gelen isteğe göre QR bitmapini oluşturur.