Tarfin Take-Home Coding Challenge

Related tags

Laravel tarfin-card
Overview

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 her TarfinCardın birden fazla TarfinCardTransactionı olabilir.
  • Müşteriler kendi TarfinCardlarını oluşturabilmeli, güncelleyebilmeli, görebilmeli, listeleyebilmeli ve silebilmelidir.
  • Müşteriler her bir TarfinCard'a ait TarfinCardTransactionı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 ve ScheduledRepayment Modelleri için Factoryler ve Migrationlar
  • Borç Servisi (LoanService)
  • Exceptionlar
  • 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.

  1. Kişisel GitHub hesabında tarfin-card isimli private bir repo oluştur.
  2. GitHub hesabındaki tarfin-card reposunu açtığında en alttaki Import code düğmesini göreceksin.
    Bu özelliği kullanarak https://github.com/tarfin-labs/tarfin-card adresindeki repoyu import et.
  3. 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
  4. .env.example dosyasından yeni bir .env dosyası oluştur.
    cp .env.example .env
  5. Bir sqlite veritabanı dosyası oluştur.
    touch database/database.sqlite
  6. Composer paketlerini yükle.
    composer install
  7. Laravel için bir application key oluştur.
    php artisan key:generate
  8. Veritabanı migration'larını çalıştır.
    php artisan migrate
  9. Laravel Passport'u ayarla.
    php artisan passport:install
  10. Yaptığın değişikliklerin atomik olmasına dikkat et.
  11. En fazla 15dk'da bir commit'le.
  12. Tüm testler geçiyor mu diye kontrol et
    php artisan test
You might also like...
Documentation on clean coding and demonstration of studied clean coding principals with PHP.

practice-php-clean-code Documentation on clean coding and demonstration of studied clean coding principals with PHP. The document contained in this re

Exploiting API to Shell challenge from Pentesterlab serialize badge.

API to Shell This exercise covers the exploitation of PHP type confusion to bypass a signature and the exploitation of unserialize. A weakness in a si

My own implementation of the backend challenge.
My own implementation of the backend challenge.

Millions backend challenge My own implementation of the backend challenge. Implemented features Show posts paginated, and ordered by creation date wit

Challenge for 123 milhas.
Challenge for 123 milhas.

This app is part of a job interview with 123 Milhas. This repo is functionality complete. Access live demo by click HERE! Getting started Installation

This Project is for digikala.com scrapping challenge of 2021 blackfriday using php/laravel/horizon

Objective This script is intended for finding the hidden treasure, A scraping challenge by digikala for 2021 black Friday Prerequisites Php mysql redi

Mailing Microservice - My solution for Moroccan PHPers's February 2022 Challenge
Mailing Microservice - My solution for Moroccan PHPers's February 2022 Challenge

Mailing Microservice Solution for Moroccan PHPers's February 2022 Challenge by Rabyâ Raghib ([email protected]). It mainly consists of: a php app th

A challenge to develop frontend-backend forms and account creating.
A challenge to develop frontend-backend forms and account creating.

Symfony + Vue (Back/Front) Helped and assisted by Vanessa and Paulo. This project have two sides, the back-end(Symfony) and the front-end(Vue.js) for

A&D challenge for AIS3 EOF CTF 2022 Final.

A&D challenge for AIS3 EOF CTF 2022 Final.

Take control of your users in PHP

Disciple Take control of your users Installation Install via Composer: composer require decodelabs/disciple PHP version Please note, the final v1 rele

Convert image types. Take samples of pdfs or psd, do some filters as SEPIA, resizes. Save to WEBP
Convert image types. Take samples of pdfs or psd, do some filters as SEPIA, resizes. Save to WEBP

img2img. PHP Converter, sampler of pdfs & psd, do resizes & some filters in images as SEPIA. Save to WEBP V.1.0.3 This class in pure PHP try to manage

An E-Commerce package for Laravel with Grafite CMS. Take control of your content and how you sell it! Products, subscriptions, shipping, downloading and more!

Grafite Commerce Grafite has archived this project and no longer supports or develops its code. We recommend using only as a source of ideas for your

Take a look into your Laravel views
Take a look into your Laravel views

Xray - Take a look into your Laravel views When your Laravel project grows, so do the Laravel views. Sometimes it might be hard to figure out, which p

This package provides new helper functions that take care of handling all the translation hassle and do it for you.

Laravel Translate Message 🥳 This package provides new helper functions that take care of handling all the translation hassle and do it for you. Insta

Shortest Path - have a function ShortestPath (strArr) take strArr which will be an array of strings which models a non-looping Graph.

Have the function ShortestPath(strArr) take strArr which will be an array of strings which models a non-looping Graph

A PHP SDK for the ScreenshotOne.com API to take screenshots of any URL

phpsdk An official Screenshot API client for PHP. It takes minutes to start taking screenshots. Just sign up to get access and secret keys, import the

LendCash is a cash lending service that lets you take loans against your stocks portfolio value and pay back on a prorated basis.

LendCash is a cash lending service that lets you take loans against your stocks portfolio value and pay back on a prorated basis.

☁️ Nextcloud server, a safe home for all your data
☁️ Nextcloud server, a safe home for all your data

Nextcloud Server ☁ A safe home for all your data. Why is this so awesome? 🤩 📁 Access your Data You can store your files, contacts, calendars and mor

Brew & manage PHP versions in pure PHP at HOME
Brew & manage PHP versions in pure PHP at HOME

PHPBrew Read this in other languages: English, Português - BR, 日本語, 中文. phpbrew builds and installs multiple version php(s) in your $HOME directory. W

🍿 An AirPlay friendly web interface to stream your movies and TV shows from a home server.
🍿 An AirPlay friendly web interface to stream your movies and TV shows from a home server.

Airflix Airflix is a web application for browsing and playing movies and TV shows from a local home server. The overall goal of the project is to prov

Owner
Tarfin
Tarfin
This package provides new helper functions that take care of handling all the translation hassle and do it for you.

Laravel Translate Message ?? This package provides new helper functions that take care of handling all the translation hassle and do it for you. Insta

Basel Rabia 17 Feb 8, 2022
Data driven home automation.

DataWhare Whare (Māori noun) house, building, residence, dwelling, shed, hut, habitation. Data driven home automation. Collects data from various sens

Mark Zeman 9 Sep 23, 2022
Intranet Home Page is a highly-configurable self-hosted browser homepage with integrations for public and local data feeds.

Intranet-Home-Page Created in response to personal "dashboards" that are little more than pages with a list of frequently accessed links, Intranet Hom

null 56 Aug 27, 2022
Home of the Joomla! Content Management System

Joomla! CMS™ Build Status Drone-CI AppVeyor PHP Node npm Overview This is the source of Joomla! 4.x. Joomla's Official website. Joomla! 4.0 version hi

Joomla! 4.3k Jan 1, 2023
You already have your dream house? Sam Building will help you find the perfect home.

SAM BUILDING Setup Fork or clone this repo! git clone github.com/Igorballo/Real-Estate-App.git Installation des dépendances npm install #or yarn insta

null 4 Nov 29, 2022
Public API for the project coding.events. Made in PHP 8.0 with Lumen 8, PHP-FPM, NGINX and MySQL 8.

coding.events API Uma API feita apenas para passar o tempo, montando uma API para o site <coding.events>. Sinta-se livre para usar esse código como es

Kaique Garcia 3 Oct 9, 2022
A collection of common algorithms implemented in PHP. The collection is based on "Cracking the Coding Interview" by Gayle Laakmann McDowell

PHPAlgorithms A collection of common algorithms implemented in PHP. The collection is based on "Cracking the Coding Interview" by Gayle Laakmann McDow

Doğan Can Uçar 921 Dec 18, 2022
A tool to automatically fix PHP Coding Standards issues by Dragon Code.

The Dragon Code Styler Installation Required PHP: ^8.0 Composer: ^2.0 Locally composer global require dragon-code/codestyler Usage When you run the co

The Dragon Code 24 Aug 27, 2022
WPForms coding standards are based on the WordPress Coding Standards and the PHPCompatibility Coding Standards and help create strict and high-quality code.

WPForms coding standards are based on the WordPress Coding Standards and the PHPCompatibility Coding Standards and help create strict and high-quality code.

Awesome Motive, Inc. 7 Nov 29, 2022
Coding-standard - Magento PHP CodeSniffer Coding Standard

ECG Magento Code Sniffer Coding Standard ECG Magento Code Sniffer Coding Standard is a set of rules and sniffs for PHP_CodeSniffer tool. It allows aut

Magento ECG 309 Jan 3, 2023