kaangucluer / SecurePay

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SecurePay

SecurePay, müşterilerin web üzerinden güvenli bir şekilde mal satın almalarını ve kredi kartı ile ödeme yapmalarını sağlayan çevrimiçi bir ödeme portalıdır.

Teknolojiler ve Bağımlılıklar

Java(17) - Spring Boot(3.1.2) - H2 Database - Lombok - Hibernate - JPA - Swagger - JUnit - Mockito

Projeye Nasıl Başladım

Proje Hedeflerini Belirleme: İlk aşamada, projenin amacını ve hedeflerini net bir şekilde belirledim. Hangi sorunu çözmeyi amaçladığımı ve projenin ne tür kullanıcı ihtiyaçlarını karşılayacağını belirledim.

Araştırma ve Analiz: Proje fikrimi belirledikten sonra, benzer projeleri inceledim ve pazardaki rekabeti analiz ettim. Kullanıcıların benzer projelerden neler beklediğini anlamaya çalışarak daha iyi bir kavrayış elde ettim.

Proje Taslağını Oluşturma: İncelemelerim ve analizlerimin ardından, projenin genel taslağını kafamda oluşturdum. Hangi özellikleri içereceğini, nasıl bir kullanıcı deneyimi sunması gerektiğini ve hangi fonksiyonların gerekli olduğunu belirledim.

Teknoloji ve Araç Seçimi: Projenin gereksinimlerine uygun olarak hangi programlama dili, çerçeve ve veritabanı teknolojilerini kullanacağıma karar verdim. Bu seçimler, projenin verimli ve ölçeklenebilir olmasını sağlamak için kritikti.

Veritabanı Tasarımı: Proje için gerekli olan veritabanını tasarladım. Hangi tabloların olacağını, bu tablolar arasındaki ilişkileri ve veri saklama yapısını planladım.

Proje Geliştirme: Veritabanı tasarımını temel alarak projenin temel modüllerini oluşturdum. Kullanıcı arayüzü, iş mantığı ve veritabanı etkileşimini bu aşamada detaylı bir şekilde kodladım.

Unit Test Yazma: Her bir fonksiyonu ve modülü ayrı ayrı test ederek, projenin istikrarlı ve hata olmadan çalışmasını sağladım. Bu aşama, projenin güvenilir ve hatalardan arındırılmış bir şekilde gelişmesini sağladı.

Teknoloji Yığını ve Bağımlılıklar

Startspring

Projemi Java 17 versiyonuyla geliştireceğim ve bu projeyi bir Maven projesi olarak oluşturacağım. Aynı zamanda Spring Boot'un 3.1.2 versiyonunu kullanacağım. Geliştireceğim projede kullanacağım bağımlılıkları "Dependencies" (Bağımlılıklar) bölümünde belirleyeceğim. Bu bağımlılıklar şunlar olacak: Spring Web, Spring Data JPA, H2 Database, Lombok, Validation ve OpenAPI.

H2 Database Ayarları

Properties

Projemizde application.properties kısmına H2 database ayarlarını ve portumuzun 8081 de çalışacagını yazacağız.

server.port=8081

#Swagger url = http://localhost:8081/swagger-ui/index.html (Swaggerın hangi uzantıda çalıştıgını belirtiyorum) #Db connection =http://localhost:8081/h2-console/ (Consolun hangi uzantıda çalıştıgını belirtiyorum)

spring.h2.console.enabled=true spring.datasource.url=jdbc:h2:mem:dcbapp spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Package Yapıları Ve İşlevleri

Package

Model :Uygulamamın veri yapısıdır. Veritabanı Tablolarıma karşılık gelen classları ve objectleri içerir.

Repository :Veritabanı işlemlerini yaptığım kısımdır.JPA Sayesinde çoğu işlevi otomatik olarak yapabiliyorum.

Service :Repositorylere eriştiğim katmandır.Uygulamanın işlevlerini bu katmanda yaparım ve sonuçları Controller'a gönderirim.

Controller :Uygulamamın HTTP isteklerini ve yanıtlarını işler ve URL rotalarınıu yönetir.

DTO :Veri transferini optimize etmek ve gereksiz veri taşımayı engellemek amacıyla kullanılır.

HTTP İstekleri

Projenin HTTP isteklerini Swagger üstünden göstereceğim. Swagger

GET customer/all : Tüm kullanıcıları listeleyen bir GET isteği.

POST customer/save : Yeni kullanıcı oluşturan bir POST isteği.

DELETE /customer/delete/{id} : Id si girilen kullanıcıyı silen bir DELETE isteği.

PUT /customer/update/{id} : Id si girilen kullanıcıyı güncelleyen bir PUT isteği.

GET /payment/all : Tüm ödeme bilgilerini listeleyen bir GET isteği.

POST /payment/save : Yeni ödeme oluşturan POST isteği.

GET /creditCard/allByPaymentDeadlineAsc : Son ödeme tarihine göre Ödemeleri Listeleyen GET isteği.

GET /creditCard/byCardNumber/{id} Id kısmına girilen Kart Numarasına göre ödeme Listeleyen GET isteği.

POST /creditCard/add : Yeni Kredi Kartı oluşturan POST isteği.

GET /log/all : Tüm Logları Listeleyen bir GET isteği.

Unit Test

> CustomerService için yazdığım Test <

Test

getAllCustomer_shouldReturnEmptyList: Bu test, getAllCustomer fonksiyonunun boş bir müşteri listesi döndüğünü doğrulamak için kullanılır. customerRepository.findAll() metodunun boş bir liste döndüğü simüle edilir.

getAllCustomer_shouldReturnOneCustomer: Bu test, getAllCustomer fonksiyonunun bir müşteri listesi döndüğünü ve listedeki müşteri detaylarının doğru olduğunu doğrulamak için kullanılır. customerRepository.findAll() metodunun bir müşteriyi içeren bir liste döndüğü simüle edilir.

saveCustomer_shouldSaveCustomer: Bu test, saveCustomer fonksiyonunun yeni bir müşteriyi başarıyla kaydettiğini ve kaydedilen müşterinin beklenen müşteri ile aynı olduğunu doğrulamak için kullanılır. customerRepository.save(customer) metodunun kaydedilen müşteriyi döndüğü simüle edilir.

saveCustomer_shouldThrowExceptionWhenCustomerAlreadyExists: Bu test, saveCustomer fonksiyonunun aynı müşteri bilgileriyle daha önce kaydedilmiş bir müşteriyi tekrar kaydetmeye çalıştığında bir istisna fırlattığını doğrulamak için kullanılır. customerRepository.save(customer) metodunun DataIntegrityViolationException istisnası fırlattığı simüle edilir.

Test2

savePayment_shouldSavePayment: Bu test, PaymentService sınıfının savePayment metodunu test eder. Bir ödeme oluşturulur, borç tutarı olan bir kredi kartı simüle edilir ve ödeme kaydedilir. Ödemenin doğru bir şekilde kaydedilip kaydedilmediği, ödeme miktarının ve kredi kartının borç miktarının güncellenip güncellenmediği kontrol edilir.

savePayment_shouldThrowExceptionWhenCreditCardIsNull: Bu test, PaymentService sınıfının savePayment metodunun, kredi kartı olmadan çağrıldığında doğru şekilde bir istisna fırlattığını test eder. Ödeme nesnesi oluşturulurken kredi kartı atanmamıştır.

savePayment_shouldThrowExceptionWhenPaymentAmountIsZeroAndDebtAmountIsZero: Bu test, PaymentService sınıfının savePayment metodunun, hem ödeme miktarının hem de borç miktarının sıfır olduğu durumda doğru şekilde bir istisna fırlattığını test eder. Ödeme nesnesi oluşturulurken ödeme ve borç miktarları sıfır olarak atanmıştır.

savePayment_shouldThrowExceptionWhenPaymentRepositoryThrowsException: Bu test, PaymentService sınıfının savePayment metodunun, ödeme kaydedilirken veritabanı işleminde hata alındığında doğru şekilde bir istisna fırlattığını test eder. Ödeme nesnesi oluşturulur ve ödeme kaydetme işlemi sırasında bir istisna fırlatılması simüle edilir.

Test3

getAllLog_ShouldReturnAllLogs : Bu test, LogService'in getAllLog() fonksiyonunun beklenen şekilde çalıştığını ve tüm log kayıtlarını döndürdüğünü doğrulamayı amaçlar.

About


Languages

Language:Java 100.0%