Skip to content

Tek Activity ve iki Fragment kullanarak QR ile ödeme alma, onaylama ve veritabanına kaydetme uygulaması

Notifications You must be signed in to change notification settings

devdalgic/POSPayment-CaseStudy

Repository files navigation

POSPayment-CaseStudy

Tek Activity ve iki Fragment kullanarak QR ile ödeme alma, onaylama ve veritabanına kaydetme uygulaması.

Kullanılan Teknolojiler ve Mimariler

MVVM, Retrofit, Dagger, Room, Fragment, Truth, Mockito, Espresso

Kullanım

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.

Testler

Instrumentation Test

MainActivityTest

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

Unit Test

POSViewModelTest

verifyReceiptAmount: Ödeme miktarının QR isteği atıldıktan sonra doğru kaldığını kontrol eder

CustomerInfoViewModelTest

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

Kodların Genel Açıklamaları

API

Request

PaymentAction

Ödeme yollanırken PostPayment içinde bulunabilir. (Projede kullanılmasına gerek yok. Sebep: "If returnCode != 1000, “paymentInfoList” is not required.")

PaymentInfo

Ödeme yollanırken PostPayment içinde bulunabilir. (Projede kullanılmasına gerek yok. Sebep: "If returnCode != 1000, “paymentInfoList” is not required.")

PostPayment

Ödeme isteği atılırken kullanılan class

QRForSale

QRForSale isteği atılırken kullanılan class

Response

PaymentResponse

Gönderilen ödeme isteğine karşılık servisten alınan cevap

QRForSaleResponse

Gönderilen QR isteğine karşılık servisten alınan cevap

OSYInterceptor

Servise gönderilen HTTP isteklerine yetkilendirme headerlarını ekleyen interceptor

OSYServis

Backend servisle haberleşmeyi sağlayan servis

Base

BaseActivity

Base Activity sınıfı. ViewBinding'e göre activity'yi hazırlar.

BaseViewModel

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.

BaseFragment

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.

Components

AppComponent

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.

CustomerInfo

CustomerInfoFragment

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.

CustomerInfoViewModel

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.

HistoryRecyclerViewAdapter

Geçmişteki ödemeleri göstermek için Recycler Viewlar kullanan adaptör.

DB.Payment

Payment

Ödeme veritabanındaki satırları temsil eden data class

PaymentDAO

Ödeme veritabanındaki işlemleri yürüten DAO (Data Access Object)

PaymentDatabase

Ö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.

PaymentRepository

Ödeme veritabanındaki işlemleri DAO üzerinde tetikleyen class

Main

MainActivity

Fragmentları içinde barındırır ve ilk fragment olan POSFragment'ı açar.

ViewModelFactory

View modelları factory patterni ile oluşturur.

Modules

DatabaseModule

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.

NetworkModule

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.

POS

POSFragment

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.

POSViewModel

Fragmentta girilen ödeme miktarı için servise istek atar ve gelen isteğe göre QR bitmapini oluşturur.