Oztechan / CCC

💰 Currency Converter Calculator for Android, iOS and Backend with power of Kotlin Multiplatform :muscle:
Apache License 2.0
332 stars 30 forks source link
android buildsrc combine coroutines ios kmp kotlin kotlin-dsl kotlin-multi-platform kotlin-multiplatform kotlin-multiplatform-mobile ktor multimodule multiplatform mvvm sqldelight stateflow submodules swiftui viewbinding

Currency Converter & Calculator

A currency converter application for most of the currencies used in the world. You can quickly convert and make mathematical operations between currencies. Buy Me a Coffee at ko-fi.com

Modularization

graph TD;

    client-->android(android)
    client-->ios(ios)

    common-->client
    common-->backend(backend)

    submodule{submodule}

    test

All the modules in the project are grouped into 6 targets:

How to clone

The project uses submodules, please clone it as below:

git clone https://github.com/CurrencyConverterCalculator/CCC.git &&
cd CCC &&
git submodule update --init --recursive

Submodules:

How to run

Be sure that you have latest Android Studio Canary build installed and XCode 13.0 or later.

Android

Open CCC folder with Android Studio and select android:app from configurations and run

iOS

Open CCC/ios/CCC.xcworkspace with XCode after the packages are resolved you can run the project. Generally you should use the latest stable XCode version.

Backend

./gradlew :backend:run

Testing

After you run the app probably your all API calls will fail, it is expected since the private URLs are not shared publicly. If you want the test the app with real API calls, I have prepared a fake response. Please replace all the getConversion methods in

with below;

override suspend fun getConversion(base: String): ExchangeRate = client.get {
    url {
        takeFrom("https://gist.githubusercontent.com/mustafaozhan/fa6d05e65919085f871adc825accea46/raw/d3bf3a7771e872e0c39541fe23b4058f4ae24c41/response.json")
    }
}.body()

Architecture

graph TD;
    subgraph Backend[Backend]
        database(database) --> datasource
        api(api) --> service

        datasource --> Controller
        service --> Controller

        Controller --> App
    end

    subgraph Mobile[Mobile]
        Persistence(Persistence) --> Storage
        Database(Database) --> DataSource

        API(API) --> Service
        RemoteConfig(RemoteConfig) --> ConfigService

        Storage --> ViewModel
        DataSource --> ViewModel

        Repository --> ViewModel

        Storage --> Repository
        DataSource --> Repository
        Service --> Repository
        ConfigService --> Repository

        Service --> ViewModel
        ConfigService --> ViewModel

        ViewModel --> Views
    end

Android Preview

iOS Preview

Included Currencies

currencies.png

License

Copyright 2017 Mustafa Ozhan

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.