TarfinKart Problemi
Bu problemin temel amacı, kodlama stilini ve seçimlerini belirleyebilmektir.
TarfinKart Problemi
benzeri görülmemiş bir çözüm geliştirmeyi veya son teknoloji araçları kullanabilmeyi gerektirmiyor ve istediğimiz tam olarak da bu: Yoldan sapmak yerine kodlama stiline odaklanmak istiyoruz.
Bu bağlamda; problem içinde "doğrular veya yanlışlar" yoktur. "Hileli kısımlar veya kelime oyuları" da yoktur. Sadece nasıl kod geliştirdiğini daha iyi anlamak istiyoruz.
Bu aynı zamanda daha anlamlı ve olumlu bir teknik görüşme yapmamızı sağlar. Mülakatlarda beyaz tahta kullanmaktan hoşlanmıyoruz, bu nedenle tartışacak bazı somut kodlara sahip olmayı tercih ederiz. Böylece yapacağımız teknik mülakatın çok daha eğlenceli ve verimli hale geleceğine inanıyoruz.
Soruların mı var? Bize yazarak bu problemi geliştirmemize yardımcı olabilirsin. Sana yardımcı olmaktan mutluluk duyarız
Problem #01
Bu problemde Tarfin'in müşterilerine kredi kartı benzeri bir Kart (TarfinCard
) verdiğini ve müşterilerin bu kartlarla çeşitli finansal işlemler (TarfinCardTransaction
) yapabildiğini varsayıyoruz.
Amaç
TarfinCard
ve TarfinCardTransaction
API'lerini ve bunlara ait Policy
'leri, Validation
'ları ve Resource
'ları test etmek için Feature Test
'ler oluştur.
Uygulama Detayları
- Her müşterinin birden fazla
TarfinCard
ı olabilir ve herTarfinCard
ın birden fazlaTarfinCardTransaction
ı olabilir. - Müşteriler kendi
TarfinCard
larını oluşturabilmeli, güncelleyebilmeli, görebilmeli, listeleyebilmeli ve silebilmelidir. - Müşteriler her bir
TarfinCard
'a aitTarfinCardTransaction
ınlarını listeleyebilmeli, görebilmeli ve oluşturabilmelidir.
Sorgula
TarfinCard ve TarfinCardTransaction route
'larını, controller
'larını, request
'lerini, resource
' larını, policy
'lerini baştan sona okuyup incele. Nasıl çalıştığını anlamaya çalış ve bu API
'leri test etmek için mümkün olduğunca çok test yaz.
TarfinCardControllerTest
ve TarfinCardTransactionControllerTest
Feature test dosyaları senin için zaten oluşturuldu. İçinde fikir vermesi açısından örnek test isimleri var. Sadece testleri tamamlaman ve gerekli gördüğün yeni testler yazman gerekiyor.
İpuçları
- Olumlu ve olumsuz senaryoları doğrula
API
'den dönen cevapları ve veritabanına kaydedilen değerleri doğrula- Müşteri sadece kendi
TarfinCard
'ı ile işlem yapabilir.
ÖNEMLİ: Bu problemi çözmek için SADECE Feature Test
dosyalarında değişiklik yapabilirsin.
PROBLEM #02
Amaç
Geri ödemeleri yönetmek üzere bir Borç Servisi (LoanService
) oluştur. Bu servisi yazarken, halihazırda senin için yazılmış olan, Unit
testlerini baz almalısın.
Uygulama Detayları
- Her müşterinin bir veya daha fazla Borcu (
Loan
) olabilir. - Bu Borçlar (
Loan
) 3 veya 6 aylık olarak taksitlendirilebilir ve bu vadelere ait Planlanmış Geri Ödemeleri (ScheduledRepayment
) bulunur. - Borçlar Alınan Ödemeler (
ReceivedRepayment
) ile geri ödenir.
Örneğin:
2022-01-01 tarihinde oluşturulmuş 3000TL tutarındaki 3 taksitli Borç
- 2022-02-01 tarihinde 1000 TL'lik bir Planlanmış Geri Ödeme (
ScheduledRepayment
) - 2022-03-01 tarihinde 1000 TL'lik bir Planlanmış Geri Ödeme (
ScheduledRepayment
) - 2022-04-01 tarihinde 1000 TL'lik bir Planlanmış Geri Ödeme (
ScheduledRepayment
)
Müşteri her bir Planlanmış Geri Ödeme (ScheduledRepayment
) tutarının tamamını geri ödeyebilir. Fakat isterse Planlanmış Geri Ödeme (ScheduledRepayment
) tutarının sadece bir kısmını veya vadesi gelmemiş olsa bile, borcunun tamamını ödeyebilir.
Sorgula
Nasıl çalışması gerektiğini anlamak için LoanService
(Borç Servisi) Unit testlerini iyice oku. Testlerin başarılı bir şekilde çalışabilmesi için yapman gerekenler arasında şunlar olabilir:
Loan
,ReceivedRepayment
veScheduledRepayment
Modelleri içinFactory
ler veMigration
lar- Borç Servisi (
LoanService
) Exception
lar- Sabit değerler (
Constants
) için ayrı sınıflar (Enums
)
ÖNEMLİ: Bu problemi çözmek için Unit test dosyalarında değişiklik yapmamalısın. Sadece Unit testlerin başarıyla geçmesi için gerekli kodu yazmalısın.
Geliştirme Ortamının Hazırlanması
Bu bir Laravel 9 projesidir ve PHP 8.1+ gerektirir.
- Kişisel GitHub hesabında
tarfin-card
isimliprivate
birrepo
oluştur. - GitHub hesabındaki
tarfin-card
repo
sunu açtığında en alttakiImport code
düğmesini göreceksin.
Bu özelliği kullanarakhttps://github.com/tarfin-labs/tarfin-card
adresindekirepo
yuimport
et. Private repo
'nu inceleyebilmemiz için, şu GitHub kullanıcılarınıSettings->Collaborators->Manage access->Add People
ile davet et:
frkcn
,deligoez
,hozdemir
,tkaratug
.env.example
dosyasından yeni bir.env
dosyası oluştur.
cp .env.example .env
- Bir sqlite veritabanı dosyası oluştur.
touch database/database.sqlite
- Composer paketlerini yükle.
composer install
- Laravel için bir
application key
oluştur.
php artisan key:generate
- Veritabanı
migration
'larını çalıştır.
php artisan migrate
- Laravel Passport'u ayarla.
php artisan passport:install
- Yaptığın değişikliklerin atomik olmasına dikkat et.
- En fazla 15dk'da bir
commit
'le. - Tüm testler geçiyor mu diye kontrol et
✅
php artisan test