├── .gitignore
├── .idea
├── .gitignore
├── .name
├── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── compiler.xml
├── deploymentTargetDropDown.xml
├── gradle.xml
├── jarRepositories.xml
├── kotlinc.xml
├── misc.xml
└── vcs.xml
├── README.md
├── build.gradle.kts
├── buildSrc
├── build.gradle.kts
├── build
│ ├── classes
│ │ └── kotlin
│ │ │ └── main
│ │ │ ├── Dependency$CircleImageView.class
│ │ │ ├── Dependency$Coroutine.class
│ │ │ ├── Dependency$DI.class
│ │ │ ├── Dependency$FireBase.class
│ │ │ ├── Dependency$Glide.class
│ │ │ ├── Dependency$GradlePlugin.class
│ │ │ ├── Dependency$Lifecycle.class
│ │ │ ├── Dependency$LocalStorage.class
│ │ │ ├── Dependency$Moshi.class
│ │ │ ├── Dependency$Navigation.class
│ │ │ ├── Dependency$Network.class
│ │ │ ├── Dependency$Permission.class
│ │ │ ├── Dependency$Socket.class
│ │ │ ├── Dependency$TedImagePicker.class
│ │ │ ├── Dependency$Test.class
│ │ │ ├── Dependency$ThreeTenAndroidBackport.class
│ │ │ ├── Dependency$UI.class
│ │ │ ├── Dependency$WorkManager.class
│ │ │ ├── Dependency.class
│ │ │ ├── META-INF
│ │ │ └── buildSrc.kotlin_module
│ │ │ ├── Project.class
│ │ │ └── Version.class
│ ├── kotlin
│ │ ├── buildSrcjar-classes.txt
│ │ └── compileKotlin
│ │ │ ├── build-history.bin
│ │ │ ├── caches-jvm
│ │ │ ├── inputs
│ │ │ │ ├── source-to-output.tab
│ │ │ │ ├── source-to-output.tab.keystream
│ │ │ │ ├── source-to-output.tab.keystream.len
│ │ │ │ ├── source-to-output.tab.len
│ │ │ │ ├── source-to-output.tab.values.at
│ │ │ │ ├── source-to-output.tab_i
│ │ │ │ └── source-to-output.tab_i.len
│ │ │ ├── jvm
│ │ │ │ └── kotlin
│ │ │ │ │ ├── class-attributes.tab
│ │ │ │ │ ├── class-attributes.tab.keystream
│ │ │ │ │ ├── class-attributes.tab.keystream.len
│ │ │ │ │ ├── class-attributes.tab.len
│ │ │ │ │ ├── class-attributes.tab.values.at
│ │ │ │ │ ├── class-attributes.tab_i
│ │ │ │ │ ├── class-attributes.tab_i.len
│ │ │ │ │ ├── class-fq-name-to-source.tab
│ │ │ │ │ ├── class-fq-name-to-source.tab.keystream
│ │ │ │ │ ├── class-fq-name-to-source.tab.keystream.len
│ │ │ │ │ ├── class-fq-name-to-source.tab.len
│ │ │ │ │ ├── class-fq-name-to-source.tab.values.at
│ │ │ │ │ ├── class-fq-name-to-source.tab_i
│ │ │ │ │ ├── class-fq-name-to-source.tab_i.len
│ │ │ │ │ ├── constants.tab
│ │ │ │ │ ├── constants.tab.keystream
│ │ │ │ │ ├── constants.tab.keystream.len
│ │ │ │ │ ├── constants.tab.len
│ │ │ │ │ ├── constants.tab.values.at
│ │ │ │ │ ├── constants.tab_i
│ │ │ │ │ ├── constants.tab_i.len
│ │ │ │ │ ├── internal-name-to-source.tab
│ │ │ │ │ ├── internal-name-to-source.tab.keystream
│ │ │ │ │ ├── internal-name-to-source.tab.keystream.len
│ │ │ │ │ ├── internal-name-to-source.tab.len
│ │ │ │ │ ├── internal-name-to-source.tab.values.at
│ │ │ │ │ ├── internal-name-to-source.tab_i
│ │ │ │ │ ├── internal-name-to-source.tab_i.len
│ │ │ │ │ ├── proto.tab
│ │ │ │ │ ├── proto.tab.keystream
│ │ │ │ │ ├── proto.tab.keystream.len
│ │ │ │ │ ├── proto.tab.len
│ │ │ │ │ ├── proto.tab.values.at
│ │ │ │ │ ├── proto.tab_i
│ │ │ │ │ ├── proto.tab_i.len
│ │ │ │ │ ├── source-to-classes.tab
│ │ │ │ │ ├── source-to-classes.tab.keystream
│ │ │ │ │ ├── source-to-classes.tab.keystream.len
│ │ │ │ │ ├── source-to-classes.tab.len
│ │ │ │ │ ├── source-to-classes.tab.values.at
│ │ │ │ │ ├── source-to-classes.tab_i
│ │ │ │ │ └── source-to-classes.tab_i.len
│ │ │ └── lookups
│ │ │ │ ├── counters.tab
│ │ │ │ ├── file-to-id.tab
│ │ │ │ ├── file-to-id.tab.keystream
│ │ │ │ ├── file-to-id.tab.keystream.len
│ │ │ │ ├── file-to-id.tab.len
│ │ │ │ ├── file-to-id.tab.values.at
│ │ │ │ ├── file-to-id.tab_i
│ │ │ │ ├── file-to-id.tab_i.len
│ │ │ │ ├── id-to-file.tab
│ │ │ │ ├── id-to-file.tab.keystream
│ │ │ │ ├── id-to-file.tab.keystream.len
│ │ │ │ ├── id-to-file.tab.len
│ │ │ │ ├── id-to-file.tab.values.at
│ │ │ │ ├── id-to-file.tab_i
│ │ │ │ ├── id-to-file.tab_i.len
│ │ │ │ ├── lookups.tab
│ │ │ │ ├── lookups.tab.keystream
│ │ │ │ ├── lookups.tab.keystream.len
│ │ │ │ ├── lookups.tab.len
│ │ │ │ ├── lookups.tab.values.at
│ │ │ │ ├── lookups.tab_i
│ │ │ │ └── lookups.tab_i.len
│ │ │ └── last-build.bin
│ ├── libs
│ │ └── buildSrc.jar
│ ├── pluginUnderTestMetadata
│ │ └── plugin-under-test-metadata.properties
│ ├── reports
│ │ └── plugin-development
│ │ │ └── validation-report.txt
│ ├── source-roots
│ │ └── buildSrc
│ │ │ └── source-roots.txt
│ └── tmp
│ │ └── jar
│ │ └── MANIFEST.MF
└── src
│ └── main
│ └── kotlin
│ ├── Dependency.kt
│ ├── Project.kt
│ └── Version.kt
├── data
├── .gitignore
├── build.gradle.kts
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── yongjincompany
│ └── data
│ ├── interceptor
│ └── AuthorizationInterceptor.kt
│ ├── local
│ ├── converter
│ │ └── TypeConverter.kt
│ ├── dao
│ │ ├── CardDao.kt
│ │ └── UserDao.kt
│ ├── database
│ │ └── DSMTCGDataBase.kt
│ ├── datasource
│ │ ├── LocalCardDataSource.kt
│ │ ├── LocalCardDataSourceImpl.kt
│ │ ├── LocalUserDataSource.kt
│ │ └── LocalUserDataSourceImpl.kt
│ ├── entity
│ │ ├── card
│ │ │ └── FetchMyCardRoomEntity.kt
│ │ └── user
│ │ │ └── FetchMyInfoRoomEntity.kt
│ └── storage
│ │ ├── AuthDataStorage.kt
│ │ └── AuthDataStorageImpl.kt
│ ├── remote
│ ├── api
│ │ ├── CardApi.kt
│ │ ├── ChestApi.kt
│ │ ├── ImagesApi.kt
│ │ ├── RankApi.kt
│ │ ├── RoomApi.kt
│ │ └── UserApi.kt
│ ├── datasource
│ │ ├── RemoteCardDataSource.kt
│ │ ├── RemoteCardDataSourceImpl.kt
│ │ ├── RemoteChestDataSource.kt
│ │ ├── RemoteChestDataSourceImpl.kt
│ │ ├── RemoteImagesDataSource.kt
│ │ ├── RemoteImagesDataSourceImpl.kt
│ │ ├── RemoteRankDataSource.kt
│ │ ├── RemoteRankDataSourceImpl.kt
│ │ ├── RemoteRoomDataSource.kt
│ │ ├── RemoteRoomDataSourceImpl.kt
│ │ ├── RemoteSocketDataSource.kt
│ │ ├── RemoteSocketDataSourceImpl.kt
│ │ ├── RemoteUserDataSource.kt
│ │ └── RemoteUserDataSourceImpl.kt
│ ├── request
│ │ ├── chest
│ │ │ ├── GoldChestOpenRequest.kt
│ │ │ ├── LegendChestOpenRequest.kt
│ │ │ └── SilverChestOpenRequest.kt
│ │ └── users
│ │ │ ├── ChangePasswordRequest.kt
│ │ │ ├── UpdateMyInfoRequest.kt
│ │ │ ├── UserRegisterRequest.kt
│ │ │ └── UserSignInRequest.kt
│ └── response
│ │ ├── cards
│ │ └── FetchMyCardResponse.kt
│ │ ├── chests
│ │ ├── FreeChestOpenResponse.kt
│ │ ├── FreeChestOpenTimeResponse.kt
│ │ ├── GoldChestOpenResponse.kt
│ │ ├── LegendChestOpenResponse.kt
│ │ ├── SilverChestOpenResponse.kt
│ │ ├── SpecialChestOpenResponse.kt
│ │ └── SpecialChestOpenTimeResponse.kt
│ │ ├── image
│ │ └── ImageResponse.kt
│ │ ├── ranks
│ │ └── FetchRankResponse.kt
│ │ ├── rooms
│ │ └── FetchRoomResponse.kt
│ │ └── users
│ │ ├── FetchMyInfoResponse.kt
│ │ ├── UserRegisterResponse.kt
│ │ └── UserSignInResponse.kt
│ ├── repository
│ ├── CardRepositoryImpl.kt
│ ├── ChestRepositoryImpl.kt
│ ├── RankRepositoryImpl.kt
│ ├── RoomRepositoryImpl.kt
│ └── UserRepositoryImpl.kt
│ └── util
│ ├── HttpHandler.kt
│ ├── LocalDateTimeParser.kt
│ ├── OfflineCacheUtil.kt
│ └── UtilFunc.kt
├── domain
├── .gitignore
├── build.gradle.kts
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── yongjincompany
│ └── domain
│ ├── entity
│ ├── cards
│ │ └── FetchMyCardEntity.kt
│ ├── chests
│ │ ├── FetchFreeChestTimeEntity.kt
│ │ ├── FetchSpecialChestTimeEntity.kt
│ │ ├── FreeChestOpenEntity.kt
│ │ ├── GoldChestOpenEntity.kt
│ │ ├── LegendChestOpenEntity.kt
│ │ ├── SilverChestOpenEntity.kt
│ │ └── SpecialChestOpenEntity.kt
│ ├── ranks
│ │ └── FetchRankEntity.kt
│ ├── rooms
│ │ └── FetchRoomEntity.kt
│ └── users
│ │ └── FetchMyInfoEntity.kt
│ ├── exception
│ ├── Basic.kt
│ ├── File.kt
│ └── User.kt
│ ├── param
│ ├── chest
│ │ ├── GoldChestOpenParam.kt
│ │ ├── LegendChestOpenParam.kt
│ │ └── SilverChestOpenParam.kt
│ └── user
│ │ ├── PostUserRegisterParam.kt
│ │ ├── PostUserSignInParam.kt
│ │ ├── UpdateMyInfoParam.kt
│ │ └── changePasswordParam.kt
│ ├── repository
│ ├── CardRepository.kt
│ ├── ChestRepository.kt
│ ├── RankRepository.kt
│ ├── RoomRepository.kt
│ └── UserRepository.kt
│ └── usecase
│ ├── UseCase.kt
│ ├── card
│ └── FetchMyCardUseCase.kt
│ ├── chest
│ ├── FetchFreeChestTimeUseCase.kt
│ ├── FetchSpecialChestTimeUseCase.kt
│ ├── OpenFreeChestUseCase.kt
│ ├── OpenGoldChestUseCase.kt
│ ├── OpenLegendChestUseCase.kt
│ ├── OpenSilverChestUseCase.kt
│ └── OpenSpecialChestUseCase.kt
│ ├── rank
│ └── FetchAllRankUseCase.kt
│ ├── room
│ └── FetchRoomsUseCase.kt
│ └── user
│ ├── AutoLoginUseCase.kt
│ ├── ChangePasswordUseCase.kt
│ ├── DeleteAccountUseCase.kt
│ ├── FetchMyInfoUseCase.kt
│ ├── LogOutUseCase.kt
│ ├── PostUserRegisterUseCase.kt
│ ├── PostUserSignInUseCase.kt
│ └── UpdateMyInfoUseCase.kt
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── presentation
├── .gitignore
├── build.gradle.kts
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── yongjincompany
│ │ └── dsmtcg
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-playstore.png
│ ├── java
│ │ └── com
│ │ │ └── yongjincompany
│ │ │ └── dsmtcg
│ │ │ ├── base
│ │ │ ├── BaseActivity.kt
│ │ │ └── BaseFragment.kt
│ │ │ ├── di
│ │ │ ├── DSMTCGApplication.kt
│ │ │ ├── LocalDataSourceModule.kt
│ │ │ ├── NetWorkModule.kt
│ │ │ ├── RemoteDataSourceModule.kt
│ │ │ ├── RepositoryModule.kt
│ │ │ ├── RoomModule.kt
│ │ │ └── StorageModule.kt
│ │ │ ├── extensions
│ │ │ ├── Lifecycle.kt
│ │ │ └── View.kt
│ │ │ ├── ui
│ │ │ ├── MainActivity.kt
│ │ │ ├── StartActivity.kt
│ │ │ ├── TradeFragment.kt
│ │ │ ├── chest
│ │ │ │ ├── FreeChestActivity.kt
│ │ │ │ ├── SpecialChestActivity.kt
│ │ │ │ └── adapter
│ │ │ │ │ ├── FreeChestCardAdapter.kt
│ │ │ │ │ └── SpecialChestCardAdapter.kt
│ │ │ ├── home
│ │ │ │ ├── HomeFragment.kt
│ │ │ │ ├── profile
│ │ │ │ │ └── MyPageActivity.kt
│ │ │ │ └── setting
│ │ │ │ │ ├── InfoActivity.kt
│ │ │ │ │ └── SettingActivity.kt
│ │ │ ├── login
│ │ │ │ └── LoginActivity.kt
│ │ │ ├── mycard
│ │ │ │ ├── CardDetailActivity.kt
│ │ │ │ ├── MyCardFragment.kt
│ │ │ │ └── adapter
│ │ │ │ │ └── MyCardAdapter.kt
│ │ │ ├── rank
│ │ │ │ ├── RankActivity.kt
│ │ │ │ └── adapter
│ │ │ │ │ └── RankAdapter.kt
│ │ │ ├── register
│ │ │ │ └── RegisterActivity.kt
│ │ │ ├── shop
│ │ │ │ ├── ShopFragment.kt
│ │ │ │ └── cardpack
│ │ │ │ │ ├── GoldChestActivity.kt
│ │ │ │ │ ├── LegendChestActivity.kt
│ │ │ │ │ ├── SilverChestActivity.kt
│ │ │ │ │ └── adapter
│ │ │ │ │ ├── GoldChestCardAdapter.kt
│ │ │ │ │ ├── LegendChestCardAdapter.kt
│ │ │ │ │ └── SilverChestCardAdapter.kt
│ │ │ └── splash
│ │ │ │ ├── Splash.kt
│ │ │ │ └── SplashActivity.kt
│ │ │ ├── util
│ │ │ ├── BindingViewHolder.kt
│ │ │ ├── DSMTCGExceptionHandler.kt
│ │ │ ├── EventFlow.kt
│ │ │ ├── RecyclerViewAdapter.kt
│ │ │ └── RecyclerViewItem.kt
│ │ │ └── viewmodel
│ │ │ ├── chest
│ │ │ ├── FreeChestViewModel.kt
│ │ │ ├── GoldChestViewModel.kt
│ │ │ ├── LegendChestViewModel.kt
│ │ │ ├── SilverChestViewModel.kt
│ │ │ └── SpecialChestViewModel.kt
│ │ │ ├── home
│ │ │ └── HomeViewModel.kt
│ │ │ ├── login
│ │ │ └── LoginViewModel.kt
│ │ │ ├── mycard
│ │ │ └── MyCardViewModel.kt
│ │ │ ├── rank
│ │ │ └── RankViewModel.kt
│ │ │ ├── register
│ │ │ └── RegisterViewModel.kt
│ │ │ ├── room
│ │ │ └── RoomViewModel.kt
│ │ │ ├── setting
│ │ │ └── LogOutViewModel.kt
│ │ │ └── splash
│ │ │ └── SplashViewModel.kt
│ └── res
│ │ ├── color
│ │ └── selector_bnv_menu.xml
│ │ ├── drawable-v24
│ │ ├── dsm_logo.png
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ ├── all_back.jpg
│ │ ├── arena.png
│ │ ├── bamboo.png
│ │ ├── bamboo_background.xml
│ │ ├── card_background.xml
│ │ ├── chest_back.gif
│ │ ├── circle_btn.xml
│ │ ├── ddong_card.png
│ │ ├── editext_back.xml
│ │ ├── free_card_pack.png
│ │ ├── free_chest.png
│ │ ├── gradient_animation.xml
│ │ ├── gradient_center.xml
│ │ ├── gradient_end.xml
│ │ ├── gradient_start.xml
│ │ ├── ic_card.xml
│ │ ├── ic_exit.png
│ │ ├── ic_home.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_round.xml
│ │ ├── ic_setting.xml
│ │ ├── ic_tournament.png
│ │ ├── img.png
│ │ ├── jinsung.png
│ │ ├── label.png
│ │ ├── leagend_card.png
│ │ ├── logo.png
│ │ ├── logo2.png
│ │ ├── logo_round.png
│ │ ├── menu_background.xml
│ │ ├── my_card_back.xml
│ │ ├── next_card_back.xml
│ │ ├── person.png
│ │ ├── rank_cup.png
│ │ ├── register_btn.xml
│ │ ├── rose_card.png
│ │ ├── shopkeeper.png
│ │ ├── special_card_pack.png
│ │ ├── special_chest.png
│ │ └── trade_background.xml
│ │ ├── font
│ │ └── nanumsquare_aceb.ttf
│ │ ├── layout
│ │ ├── activity_card_detail.xml
│ │ ├── activity_free_chest.xml
│ │ ├── activity_gold_chest.xml
│ │ ├── activity_info.xml
│ │ ├── activity_legend_chest.xml
│ │ ├── activity_login.xml
│ │ ├── activity_main.xml
│ │ ├── activity_my_page.xml
│ │ ├── activity_rank.xml
│ │ ├── activity_register.xml
│ │ ├── activity_room.xml
│ │ ├── activity_setting.xml
│ │ ├── activity_silver_chest.xml
│ │ ├── activity_special_chest.xml
│ │ ├── activity_start.xml
│ │ ├── fragment_home.xml
│ │ ├── fragment_my_card.xml
│ │ ├── fragment_shop.xml
│ │ ├── fragment_trade.xml
│ │ ├── item_chest.xml
│ │ ├── item_my_card.xml
│ │ ├── item_rank.xml
│ │ └── item_room.xml
│ │ ├── menu
│ │ └── bottom_nav_menu.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ └── ic_main.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ └── ic_main.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ └── ic_main.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ └── ic_main.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ └── ic_main.png
│ │ ├── navigation
│ │ └── mobile_navigation.xml
│ │ ├── values-night
│ │ └── themes.xml
│ │ └── values
│ │ ├── colors.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── strings.xml
│ │ └── themes.xml
│ └── test
│ └── java
│ └── com
│ └── yongjincompany
│ └── dsmtcg
│ └── ExampleUnitTest.kt
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | /.idea/navEditor.xml
9 | /.idea/assetWizardSettings.xml
10 | .DS_Store
11 | /build
12 | /captures
13 | .externalNativeBuild
14 | .cxx
15 | local.properties
16 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/.name:
--------------------------------------------------------------------------------
1 | DSMTCG
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/deploymentTargetDropDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
22 |
23 |
--------------------------------------------------------------------------------
/.idea/jarRepositories.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/.idea/kotlinc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DSM-TCG-Android
2 |
3 | ## 상세 설명
4 | 대덕소마고 학생들 ip를 이용하여 제작하는 TCG(TradingCardGame)입니다.
5 | 우리 학교의 숨은 영웅들을 수집하는 재미를 느껴보세요!
6 |
7 |
8 | 
9 |
--------------------------------------------------------------------------------
/build.gradle.kts:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | }
6 |
7 | dependencies {
8 | classpath(Dependency.GradlePlugin.android)
9 | classpath(Dependency.GradlePlugin.kotlin)
10 | classpath(Dependency.GradlePlugin.hilt)
11 | classpath(Dependency.GradlePlugin.service)
12 | classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20")
13 | }
14 | }
15 |
16 | task("clean", Delete::class) {
17 | delete(rootProject.buildDir)
18 | }
--------------------------------------------------------------------------------
/buildSrc/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | `kotlin-dsl`
3 | }
4 |
5 | repositories {
6 | gradlePluginPortal()
7 | }
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$CircleImageView.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$CircleImageView.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$Coroutine.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$Coroutine.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$DI.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$DI.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$FireBase.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$FireBase.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$Glide.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$Glide.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$GradlePlugin.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$GradlePlugin.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$Lifecycle.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$Lifecycle.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$LocalStorage.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$LocalStorage.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$Moshi.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$Moshi.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$Navigation.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$Navigation.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$Network.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$Network.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$Permission.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$Permission.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$Socket.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$Socket.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$TedImagePicker.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$TedImagePicker.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$Test.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$Test.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$ThreeTenAndroidBackport.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$ThreeTenAndroidBackport.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$UI.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$UI.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency$WorkManager.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency$WorkManager.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Dependency.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Dependency.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/META-INF/buildSrc.kotlin_module:
--------------------------------------------------------------------------------
1 | " *
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Project.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Project.class
--------------------------------------------------------------------------------
/buildSrc/build/classes/kotlin/main/Version.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/classes/kotlin/main/Version.class
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/buildSrcjar-classes.txt:
--------------------------------------------------------------------------------
1 | C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$CircleImageView.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$Coroutine.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$DI.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$FireBase.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$Glide.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$GradlePlugin.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$Lifecycle.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$LocalStorage.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$Moshi.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$Navigation.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$Network.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$Permission.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$Socket.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$TedImagePicker.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$Test.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$ThreeTenAndroidBackport.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$UI.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency$WorkManager.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Dependency.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Project.class;C:\Users\leesin\Desktop\project\DSM-TCG-Android\buildSrc\build\classes\kotlin\main\Version.class
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/build-history.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/build-history.bin
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-attributes.tab:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-attributes.tab
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.len:
--------------------------------------------------------------------------------
1 | (
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.values.at:
--------------------------------------------------------------------------------
1 | / Header Record For PersistentHashMapValueStorage
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-attributes.tab_i:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-attributes.tab_i
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-attributes.tab_i.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-attributes.tab_i.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len:
--------------------------------------------------------------------------------
1 | (
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at:
--------------------------------------------------------------------------------
1 | / Header Record For PersistentHashMapValueStorage, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt) ($PROJECT_DIR$\src\main\kotlin\Project.kt) ($PROJECT_DIR$\src\main\kotlin\Version.kt) ($PROJECT_DIR$\src\main\kotlin\Project.kt
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.len:
--------------------------------------------------------------------------------
1 | (
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.values.at:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.values.at
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len:
--------------------------------------------------------------------------------
1 | (
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at:
--------------------------------------------------------------------------------
1 | / Header Record For PersistentHashMapValueStorage, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt) ($PROJECT_DIR$\src\main\kotlin\Project.kt) ($PROJECT_DIR$\src\main\kotlin\Version.kt) ($PROJECT_DIR$\src\main\kotlin\Project.kt
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len:
--------------------------------------------------------------------------------
1 | 0
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len:
--------------------------------------------------------------------------------
1 | ~
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab:
--------------------------------------------------------------------------------
1 | 4
2 | 1
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream.len:
--------------------------------------------------------------------------------
1 | ~
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at:
--------------------------------------------------------------------------------
1 | / Header Record For PersistentHashMapValueStorage
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at:
--------------------------------------------------------------------------------
1 | / Header Record For PersistentHashMapValueStorage, +$PROJECT_DIR$\src\main\kotlin\Dependency.kt) ($PROJECT_DIR$\src\main\kotlin\Project.kt) ($PROJECT_DIR$\src\main\kotlin\Version.kt) ($PROJECT_DIR$\src\main\kotlin\Project.kt
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len:
--------------------------------------------------------------------------------
1 | �
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len:
--------------------------------------------------------------------------------
1 | H
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at:
--------------------------------------------------------------------------------
1 | / Header Record For PersistentHashMapValueStorage
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len
--------------------------------------------------------------------------------
/buildSrc/build/kotlin/compileKotlin/last-build.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/kotlin/compileKotlin/last-build.bin
--------------------------------------------------------------------------------
/buildSrc/build/libs/buildSrc.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/libs/buildSrc.jar
--------------------------------------------------------------------------------
/buildSrc/build/pluginUnderTestMetadata/plugin-under-test-metadata.properties:
--------------------------------------------------------------------------------
1 | implementation-classpath=C\:/Users/leesin/Desktop/project/DSM-TCG-Android/buildSrc/build/classes/java/main;C\:/Users/leesin/Desktop/project/DSM-TCG-Android/buildSrc/build/classes/groovy/main;C\:/Users/leesin/Desktop/project/DSM-TCG-Android/buildSrc/build/classes/kotlin/main;C\:/Users/leesin/Desktop/project/DSM-TCG-Android/buildSrc/build/resources/main
2 |
--------------------------------------------------------------------------------
/buildSrc/build/reports/plugin-development/validation-report.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/buildSrc/build/reports/plugin-development/validation-report.txt
--------------------------------------------------------------------------------
/buildSrc/build/source-roots/buildSrc/source-roots.txt:
--------------------------------------------------------------------------------
1 | src\main\resources
2 | src\main\java
3 | src\main\groovy
4 | src\main\kotlin
5 | src\test\resources
6 | src\test\java
7 | src\test\groovy
8 | src\test\kotlin
9 |
--------------------------------------------------------------------------------
/buildSrc/build/tmp/jar/MANIFEST.MF:
--------------------------------------------------------------------------------
1 | Manifest-Version: 1.0
2 |
3 |
--------------------------------------------------------------------------------
/buildSrc/src/main/kotlin/Project.kt:
--------------------------------------------------------------------------------
1 | import org.gradle.api.JavaVersion
2 |
3 | object Project {
4 | const val compileSdk = 31
5 | const val minSdk = 21
6 | const val targetSdk = 31
7 | val javaVersion = JavaVersion.VERSION_11
8 | }
--------------------------------------------------------------------------------
/buildSrc/src/main/kotlin/Version.kt:
--------------------------------------------------------------------------------
1 | object Version {
2 | const val gradle = "7.0.4"
3 | const val kotlin = "1.6.10"
4 | const val coroutine = "1.6.0"
5 | const val junit = "4.13.2"
6 | const val mockito = "4.2.0"
7 | const val androidJunit = "1.1.3"
8 | const val espresso = "3.4.0"
9 | const val coreKtx = "1.7.0"
10 | const val appcompat = "1.4.0"
11 | const val material = "1.4.0"
12 | const val constraintLayout = "2.1.2"
13 | const val hilt = "2.38.1"
14 | const val retrofit = "2.9.0"
15 | const val okhttp = "3.14.9"
16 | const val room = "2.4.0"
17 | const val lifecycle = "2.4.0"
18 | const val androidKtx = "1.4.0"
19 | const val fragmentKtx = "1.4.0"
20 | const val threeTenAbp = "1.3.1"
21 | const val moshi = "1.12.0"
22 | const val navigation = "2.3.5"
23 | const val workManager = "2.7.1"
24 | const val workManagerHiltExtension = "1.0.0"
25 | const val sharedPreference = "1.1.1"
26 | const val mockitoKotlin = "2.2.0"
27 | const val mockitoInline = "2.21.0"
28 | const val fcm = "20.1.0"
29 | const val service = "4.3.10"
30 | const val message = "23.0.0"
31 | const val tedPermission = "3.3.0"
32 | const val jetpackCompose = "1.1.0"
33 | const val activityCompose = "1.4.0"
34 | const val coilCompose = "1.4.0"
35 | const val hiltCompose = "1.0.0"
36 | const val moshiKotlin = "1.8.0"
37 | const val circleImage = "3.1.0"
38 | const val glide = "4.13.0"
39 | const val pinEntryEditText = "2.0.6"
40 | const val socket = "1.0.0"
41 | const val tedImagePicker = "1.2.7"
42 | }
--------------------------------------------------------------------------------
/data/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/data/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id("com.android.library")
3 | kotlin("android")
4 | kotlin("kapt")
5 | }
6 |
7 | android {
8 | compileSdk = Project.compileSdk
9 |
10 | defaultConfig {
11 | minSdk = Project.minSdk
12 | targetSdk = Project.targetSdk
13 | consumerProguardFiles("consumer-rules.pro")
14 | }
15 |
16 | buildTypes {
17 | getByName("release") {
18 | isMinifyEnabled = false
19 | proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
20 | }
21 | }
22 | compileOptions {
23 | sourceCompatibility = Project.javaVersion
24 | targetCompatibility = Project.javaVersion
25 | }
26 | kotlinOptions {
27 | jvmTarget = "11"
28 | }
29 | }
30 |
31 | dependencies {
32 | implementation(project(":domain"))
33 |
34 | implementation(Dependency.Moshi.moshi)
35 | kapt(Dependency.Moshi.moshiCompiler)
36 |
37 | testImplementation(Dependency.Test.junit)
38 | testImplementation(Dependency.Test.mockito)
39 | androidTestImplementation(Dependency.Test.androidJunit)
40 | testImplementation(Dependency.Test.mockitoKotlin)
41 | testImplementation(Dependency.Test.mockitoInline)
42 | testImplementation(Dependency.Test.threeTenAbp)
43 |
44 | implementation(Dependency.Network.retrofit)
45 | implementation(Dependency.Network.gsonConverter)
46 | implementation(Dependency.Network.okhttp)
47 |
48 | implementation(Dependency.LocalStorage.room)
49 | kapt(Dependency.LocalStorage.roomCompiler)
50 |
51 | implementation(Dependency.Coroutine.core)
52 |
53 | implementation(Dependency.DI.inject)
54 |
55 | implementation(Dependency.DI.hiltAndroid)
56 | kapt(Dependency.DI.hiltCompiler)
57 |
58 | implementation(Dependency.ThreeTenAndroidBackport.threeTenAbp)
59 |
60 | implementation(Dependency.WorkManager.ktx)
61 | implementation(Dependency.WorkManager.hiltExtension)
62 |
63 | implementation(Dependency.LocalStorage.sharedPreference)
64 |
65 | implementation(Dependency.FireBase.message)
66 |
67 | implementation(Dependency.Socket.socketIo){
68 | exclude (group = "org.json", module = "json")
69 | }
70 | }
--------------------------------------------------------------------------------
/data/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/local/converter/TypeConverter.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.local.converter
2 |
3 | import androidx.room.ProvidedTypeConverter
4 | import androidx.room.TypeConverter
5 | import com.squareup.moshi.JsonAdapter
6 | import com.squareup.moshi.Moshi
7 | import com.squareup.moshi.Types
8 | import com.yongjincompany.data.local.entity.card.FetchMyCardRoomEntity
9 |
10 | @ProvidedTypeConverter
11 | class CardListTypeConverter(
12 | private val moshi: Moshi
13 | ) {
14 |
15 | @TypeConverter
16 | fun fromString(value: String): List? {
17 | val listType = Types.newParameterizedType(
18 | List::class.java,
19 | FetchMyCardRoomEntity.Card::class.java
20 | )
21 | val adapter: JsonAdapter> =
22 | moshi.adapter(listType)
23 | return adapter.fromJson(value)
24 | }
25 |
26 | @TypeConverter
27 | fun fromList(type: List): String {
28 | val listType = Types.newParameterizedType(
29 | List::class.java,
30 | FetchMyCardRoomEntity.Card::class.java
31 | )
32 | val adapter: JsonAdapter> =
33 | moshi.adapter(listType)
34 | return adapter.toJson(type)
35 | }
36 |
37 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/local/dao/CardDao.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.local.dao
2 |
3 | import androidx.room.Dao
4 | import androidx.room.Insert
5 | import androidx.room.OnConflictStrategy
6 | import androidx.room.Query
7 | import com.yongjincompany.data.local.entity.card.FetchMyCardRoomEntity
8 |
9 | @Dao
10 | interface CardDao {
11 | @Query("SELECT * FROM myCard")
12 | suspend fun fetchMyCard(): FetchMyCardRoomEntity
13 |
14 | @Insert(onConflict = OnConflictStrategy.REPLACE)
15 | suspend fun insertMyCard(fetchMyCardRoomEntity: FetchMyCardRoomEntity)
16 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/local/dao/UserDao.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.local.dao
2 |
3 | import androidx.room.Dao
4 | import androidx.room.Insert
5 | import androidx.room.OnConflictStrategy
6 | import androidx.room.Query
7 | import com.yongjincompany.data.local.entity.user.FetchMyInfoRoomEntity
8 |
9 | @Dao
10 | interface UserDao {
11 | @Query("SELECT * FROM myInfo")
12 | suspend fun fetchMyInfo() : FetchMyInfoRoomEntity
13 |
14 | @Insert(onConflict = OnConflictStrategy.REPLACE)
15 | suspend fun insertMyInfo(fetchMyInfoRoomEntity: FetchMyInfoRoomEntity)
16 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/local/database/DSMTCGDataBase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.local.database
2 |
3 | import androidx.room.Database
4 | import androidx.room.RoomDatabase
5 | import androidx.room.TypeConverters
6 | import com.yongjincompany.data.local.converter.CardListTypeConverter
7 | import com.yongjincompany.data.local.dao.CardDao
8 | import com.yongjincompany.data.local.dao.UserDao
9 | import com.yongjincompany.data.local.entity.card.FetchMyCardRoomEntity
10 | import com.yongjincompany.data.local.entity.user.FetchMyInfoRoomEntity
11 |
12 | @Database(
13 | entities = [
14 | FetchMyInfoRoomEntity::class,
15 | FetchMyCardRoomEntity::class
16 | ], version = 1, exportSchema = false
17 | )
18 |
19 | @TypeConverters(
20 | value = [
21 | CardListTypeConverter::class
22 | ]
23 |
24 | )
25 |
26 | abstract class DSMTCGDataBase : RoomDatabase() {
27 | abstract fun userDao(): UserDao
28 | abstract fun cardDao(): CardDao
29 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/local/datasource/LocalCardDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.local.datasource
2 |
3 | import com.yongjincompany.domain.entity.cards.FetchMyCardEntity
4 |
5 | interface LocalCardDataSource {
6 | suspend fun fetchMyCard(): FetchMyCardEntity
7 | suspend fun insertMyCard(fetchMyCardEntity: FetchMyCardEntity)
8 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/local/datasource/LocalCardDataSourceImpl.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.local.datasource
2 |
3 | import com.yongjincompany.data.local.dao.CardDao
4 | import com.yongjincompany.data.local.entity.card.toDbEntity
5 | import com.yongjincompany.data.local.entity.card.toEntity
6 | import com.yongjincompany.domain.entity.cards.FetchMyCardEntity
7 | import javax.inject.Inject
8 |
9 | class LocalCardDataSourceImpl @Inject constructor(
10 | private val cardDao: CardDao,
11 | ) : LocalCardDataSource {
12 | override suspend fun fetchMyCard(): FetchMyCardEntity =
13 | cardDao.fetchMyCard().toEntity()
14 |
15 | override suspend fun insertMyCard(fetchMyCardEntity: FetchMyCardEntity) {
16 | cardDao.insertMyCard(fetchMyCardEntity.toDbEntity())
17 | }
18 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/local/datasource/LocalUserDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.local.datasource
2 |
3 | import com.yongjincompany.domain.entity.users.FetchMyInfoEntity
4 | import org.threeten.bp.LocalDateTime
5 |
6 | interface LocalUserDataSource {
7 | suspend fun setAccessToken(token: String)
8 | suspend fun fetchAccessToken(): String
9 | suspend fun clearAccessToken()
10 |
11 | suspend fun setRefreshToken(token: String)
12 | suspend fun fetchRefreshToken(): String
13 | suspend fun clearRefreshToken()
14 |
15 | suspend fun setExpiredAt(localDateTime: String)
16 | suspend fun fetchExpiredAt(): LocalDateTime
17 |
18 | suspend fun setId(id: String)
19 | suspend fun fetchId(): String
20 | suspend fun clearId()
21 |
22 | suspend fun setPw(pw: String)
23 | suspend fun fetchPw(): String
24 | suspend fun clearPw()
25 |
26 | suspend fun fetchMyInfo(): FetchMyInfoEntity
27 | suspend fun insertMyInfo(fetchMyInfoEntity: FetchMyInfoEntity)
28 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/local/entity/user/FetchMyInfoRoomEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.local.entity.user
2 |
3 | import androidx.room.Embedded
4 | import androidx.room.Entity
5 | import androidx.room.PrimaryKey
6 | import com.yongjincompany.data.local.entity.card.FetchMyCardRoomEntity
7 | import com.yongjincompany.domain.entity.cards.FetchMyCardEntity
8 | import com.yongjincompany.domain.entity.users.FetchMyInfoEntity
9 |
10 | @Entity(tableName = "myInfo")
11 | data class FetchMyInfoRoomEntity(
12 | @PrimaryKey val userId: Long,
13 | val name: String,
14 | val profileImageUrl: String,
15 | val rank: Int,
16 | val coin: Int,
17 | @Embedded val cardCount: CardCount
18 | ) {
19 | data class CardCount(
20 | val agradeCardCount: Int,
21 | val bgradeCardCount: Int,
22 | val cgradeCardCount: Int,
23 | val sgradeCardCount: Int,
24 | val dgradeCardCount: Int,
25 | )
26 |
27 | fun CardCount.toEntity() =
28 | FetchMyInfoEntity.CardCount(
29 | agradeCardCount = agradeCardCount,
30 | bgradeCardCount = bgradeCardCount,
31 | cgradeCardCount = cgradeCardCount,
32 | sgradeCardCount = sgradeCardCount,
33 | dgradeCardCount = dgradeCardCount
34 | )
35 | }
36 | fun FetchMyInfoEntity.CardCount.toDbEntity() =
37 | FetchMyInfoRoomEntity.CardCount(
38 | agradeCardCount = agradeCardCount,
39 | bgradeCardCount = bgradeCardCount,
40 | cgradeCardCount = cgradeCardCount,
41 | sgradeCardCount = sgradeCardCount,
42 | dgradeCardCount = dgradeCardCount
43 | )
44 |
45 | fun FetchMyInfoRoomEntity.toEntity() =
46 | FetchMyInfoEntity(
47 | name = name,
48 | profileImageUrl = profileImageUrl,
49 | rank = rank,
50 | coin = coin,
51 | userId = userId,
52 | cardCount = cardCount.toEntity()
53 | )
54 |
55 | fun FetchMyInfoEntity.toDbEntity() =
56 | rank?.let {
57 | FetchMyInfoRoomEntity(
58 | name = name,
59 | profileImageUrl = profileImageUrl,
60 | rank = rank!!,
61 | coin = coin,
62 | userId = userId,
63 | cardCount = cardCount.toDbEntity()
64 | )
65 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/local/storage/AuthDataStorage.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.local.storage
2 |
3 | import org.threeten.bp.LocalDateTime
4 |
5 | interface AuthDataStorage {
6 | fun setAccessToken(token: String)
7 | fun fetchAccessToken(): String
8 | fun clearAccessToken()
9 |
10 | fun setRefreshToken(token: String)
11 | fun fetchRefreshToken(): String
12 | fun clearRefreshToken()
13 |
14 | fun setExpiredAt(localDateTime: String)
15 | fun fetchExpiredAt(): LocalDateTime
16 |
17 | fun setId(id: String)
18 | fun fetchId(): String
19 | fun clearId()
20 |
21 | fun setPw(pw: String)
22 | fun fetchPw(): String
23 | fun clearPw()
24 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/api/CardApi.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.api
2 |
3 | import com.yongjincompany.data.remote.response.cards.FetchMyCardResponse
4 | import retrofit2.http.GET
5 | import retrofit2.http.POST
6 |
7 | interface CardApi {
8 | @GET("cards")
9 | suspend fun fetchMyCard(
10 | ): FetchMyCardResponse
11 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/api/ChestApi.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.api
2 |
3 | import com.yongjincompany.data.remote.request.chest.GoldChestOpenRequest
4 | import com.yongjincompany.data.remote.request.chest.LegendChestOpenRequest
5 | import com.yongjincompany.data.remote.request.chest.SilverChestOpenRequest
6 | import com.yongjincompany.data.remote.response.chests.*
7 | import retrofit2.http.Body
8 | import retrofit2.http.GET
9 | import retrofit2.http.POST
10 | import retrofit2.http.Query
11 |
12 | interface ChestApi {
13 | @GET("chests/free")
14 | suspend fun getFreeChestTime(): FreeChestOpenTimeResponse
15 |
16 | @GET("chests/special")
17 | suspend fun getSpecialChestTime(): SpecialChestOpenTimeResponse
18 |
19 | @POST("chests/free")
20 | suspend fun openFreeChest(): FreeChestOpenResponse
21 |
22 | @POST("chests/special")
23 | suspend fun openSpecialChest(): SpecialChestOpenResponse
24 |
25 | @POST("chests/silver")
26 | suspend fun openSilverChest(
27 | @Body silverChestOpenRequest : SilverChestOpenRequest
28 | ): SilverChestOpenResponse
29 |
30 | @POST("chests/gold")
31 | suspend fun openGoldChest(
32 | @Body goldChestOpenRequest: GoldChestOpenRequest
33 | ): GoldChestOpenResponse
34 |
35 | @POST("chests/legend")
36 | suspend fun openLegendChest(
37 | @Body legendChestOpenRequest: LegendChestOpenRequest
38 | ): LegendChestOpenResponse
39 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/api/ImagesApi.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.api
2 |
3 | import com.yongjincompany.data.remote.response.image.ImageResponse
4 | import okhttp3.MultipartBody
5 | import retrofit2.http.Multipart
6 | import retrofit2.http.POST
7 | import retrofit2.http.Part
8 |
9 | interface ImagesApi {
10 | @Multipart
11 | @POST("images")
12 | suspend fun postImages(
13 | @Part images: List
14 | ): ImageResponse
15 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/api/RankApi.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.api
2 |
3 | import com.yongjincompany.data.remote.response.ranks.FetchRankResponse
4 | import retrofit2.http.GET
5 |
6 | interface RankApi {
7 | @GET("ranks")
8 | suspend fun getAllRank(): FetchRankResponse
9 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/api/RoomApi.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.api
2 |
3 | import com.yongjincompany.data.remote.response.rooms.FetchRoomResponse
4 | import retrofit2.http.GET
5 |
6 | interface RoomApi {
7 | @GET("rooms")
8 | suspend fun getRooms(): FetchRoomResponse
9 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/api/UserApi.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.api
2 |
3 | import com.yongjincompany.data.remote.request.users.ChangePasswordRequest
4 | import com.yongjincompany.data.remote.request.users.UpdateMyInfoRequest
5 | import com.yongjincompany.data.remote.request.users.UserRegisterRequest
6 | import com.yongjincompany.data.remote.request.users.UserSignInRequest
7 | import com.yongjincompany.data.remote.response.users.FetchMyInfoResponse
8 | import com.yongjincompany.data.remote.response.users.UserRegisterResponse
9 | import com.yongjincompany.data.remote.response.users.UserSignInResponse
10 | import retrofit2.http.*
11 |
12 | interface UserApi {
13 | @POST("users")
14 | suspend fun userRegister(
15 | @Body userSignUpRequest: UserRegisterRequest
16 | ): UserRegisterResponse
17 |
18 | @POST("users/auth")
19 | suspend fun userSignIn(
20 | @Body userSignInRequest: UserSignInRequest
21 | ): UserSignInResponse
22 |
23 | @PATCH("users")
24 | suspend fun updateMyInfo(
25 | @Body updateMyInfoRequest: UpdateMyInfoRequest
26 | )
27 |
28 | @GET("users")
29 | suspend fun fetchMyInfo(
30 | ): FetchMyInfoResponse
31 |
32 | @PATCH("users/password")
33 | suspend fun changePassword(
34 | @Body changePasswordRequest: ChangePasswordRequest
35 | )
36 |
37 | /*@DELETE("users")
38 | suspend fun logOut()*/
39 |
40 | @DELETE("users")
41 | suspend fun deleteAccount()
42 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteCardDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import com.yongjincompany.domain.entity.cards.FetchMyCardEntity
4 |
5 | interface RemoteCardDataSource {
6 | suspend fun fetchMyCard(): FetchMyCardEntity
7 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteCardDataSourceImpl.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import com.yongjincompany.data.remote.api.CardApi
4 | import com.yongjincompany.data.remote.response.cards.FetchMyCardResponse
5 | import com.yongjincompany.data.remote.response.cards.toEntity
6 | import com.yongjincompany.data.util.HttpHandler
7 | import com.yongjincompany.domain.entity.cards.FetchMyCardEntity
8 | import javax.inject.Inject
9 |
10 | class RemoteCardDataSourceImpl @Inject constructor(
11 | private val cardApi: CardApi,
12 | ) : RemoteCardDataSource {
13 | override suspend fun fetchMyCard(): FetchMyCardEntity =
14 | HttpHandler()
15 | .httpRequest { cardApi.fetchMyCard() }
16 | .sendRequest().toEntity()
17 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteChestDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import com.yongjincompany.data.remote.request.chest.GoldChestOpenRequest
4 | import com.yongjincompany.data.remote.request.chest.LegendChestOpenRequest
5 | import com.yongjincompany.data.remote.request.chest.SilverChestOpenRequest
6 | import com.yongjincompany.data.remote.response.chests.FreeChestOpenResponse
7 | import com.yongjincompany.domain.entity.chests.*
8 | import retrofit2.http.Body
9 |
10 | interface RemoteChestDataSource {
11 | suspend fun fetchFreeChestTime(): FetchFreeChestTimeEntity
12 |
13 | suspend fun fetchSpecialChestTime(): FetchSpecialChestTimeEntity
14 |
15 | suspend fun openFreeChest(): FreeChestOpenEntity
16 |
17 | suspend fun openSpecialChest(): SpecialChestOpenEntity
18 |
19 | suspend fun openSilverChest(
20 | silverChestOpenRequest: SilverChestOpenRequest
21 | ): SilverChestOpenEntity
22 |
23 | suspend fun openGoldChest(
24 | goldChestOpenRequest: GoldChestOpenRequest
25 | ): GoldChestOpenEntity
26 |
27 | suspend fun openLegendChest(
28 | legendChestOpenRequest: LegendChestOpenRequest
29 | ): LegendChestOpenEntity
30 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteImagesDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import com.yongjincompany.data.remote.response.image.ImageResponse
4 | import okhttp3.MultipartBody
5 |
6 | interface RemoteImagesDataSource {
7 |
8 | suspend fun postImages(images : List): ImageResponse
9 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteImagesDataSourceImpl.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import com.yongjincompany.data.remote.api.ImagesApi
4 | import com.yongjincompany.data.remote.response.image.ImageResponse
5 | import com.yongjincompany.data.util.HttpHandler
6 | import okhttp3.MultipartBody
7 | import javax.inject.Inject
8 |
9 | class RemoteImagesDataSourceImpl @Inject constructor(
10 | private val imagesApi : ImagesApi
11 | ): RemoteImagesDataSource {
12 | override suspend fun postImages(images: List): ImageResponse =
13 | HttpHandler()
14 | .httpRequest { imagesApi.postImages(images) }
15 | .sendRequest()
16 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteRankDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import com.yongjincompany.domain.entity.ranks.FetchRankEntity
4 |
5 | interface RemoteRankDataSource {
6 | suspend fun fetchAllRank(): FetchRankEntity
7 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteRankDataSourceImpl.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import com.yongjincompany.data.remote.api.RankApi
4 | import com.yongjincompany.data.remote.response.ranks.FetchRankResponse
5 | import com.yongjincompany.data.remote.response.ranks.toEntity
6 | import com.yongjincompany.data.util.HttpHandler
7 | import com.yongjincompany.domain.entity.ranks.FetchRankEntity
8 | import javax.inject.Inject
9 |
10 | class RemoteRankDataSourceImpl @Inject constructor(
11 | private val rankApi: RankApi,
12 | ) : RemoteRankDataSource {
13 | override suspend fun fetchAllRank(): FetchRankEntity =
14 | HttpHandler()
15 | .httpRequest { rankApi.getAllRank() }
16 | .sendRequest().toEntity()
17 |
18 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteRoomDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import com.yongjincompany.domain.entity.rooms.FetchRoomEntity
4 | import javax.inject.Inject
5 |
6 | interface RemoteRoomDataSource {
7 | suspend fun fetchRooms(): FetchRoomEntity
8 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteRoomDataSourceImpl.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import com.yongjincompany.data.remote.api.RoomApi
4 | import com.yongjincompany.data.remote.response.rooms.FetchRoomResponse
5 | import com.yongjincompany.data.remote.response.rooms.toEntity
6 | import com.yongjincompany.data.util.HttpHandler
7 | import com.yongjincompany.domain.entity.rooms.FetchRoomEntity
8 | import javax.inject.Inject
9 |
10 | class RemoteRoomDataSourceImpl @Inject constructor(
11 | private val roomApi: RoomApi
12 | ): RemoteRoomDataSource {
13 | override suspend fun fetchRooms(): FetchRoomEntity =
14 | HttpHandler()
15 | .httpRequest { roomApi.getRooms() }
16 | .sendRequest().toEntity()
17 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteSocketDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import kotlinx.coroutines.flow.SharedFlow
4 |
5 | interface RemoteSocketDataSource {
6 | fun disconnectSocket()
7 |
8 | fun connectSocket()
9 |
10 | fun createRoom(roomName: String)
11 |
12 | fun receiveCreateRoom(): SharedFlow
13 |
14 | fun joinRoom(roomId: Long)
15 |
16 | fun receiveJoinRoom(): SharedFlow
17 |
18 | fun chatting(emoji: String, char: String)
19 |
20 | fun receiveChatting(): SharedFlow
21 |
22 | fun receiveError(): List
23 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteSocketDataSourceImpl.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import io.socket.client.Socket
4 | import kotlinx.coroutines.flow.SharedFlow
5 | import javax.inject.Inject
6 |
7 | class RemoteSocketDataSourceImpl @Inject constructor(
8 | private val socket: Socket
9 | ) : RemoteSocketDataSource {
10 | override fun disconnectSocket() {
11 | TODO("Not yet implemented")
12 | }
13 |
14 | override fun connectSocket() {
15 | TODO("Not yet implemented")
16 | }
17 |
18 | override fun createRoom(roomName: String) {
19 | TODO("Not yet implemented")
20 | }
21 |
22 | override fun receiveCreateRoom(): SharedFlow {
23 | TODO("Not yet implemented")
24 | }
25 |
26 | override fun joinRoom(roomId: Long) {
27 | TODO("Not yet implemented")
28 | }
29 |
30 | override fun receiveJoinRoom(): SharedFlow {
31 | TODO("Not yet implemented")
32 | }
33 |
34 | override fun chatting(emoji: String, char: String) {
35 | TODO("Not yet implemented")
36 | }
37 |
38 | override fun receiveChatting(): SharedFlow {
39 | TODO("Not yet implemented")
40 | }
41 |
42 | override fun receiveError(): List {
43 | TODO("Not yet implemented")
44 | }
45 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/datasource/RemoteUserDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.datasource
2 |
3 | import com.yongjincompany.data.remote.request.users.ChangePasswordRequest
4 | import com.yongjincompany.data.remote.request.users.UpdateMyInfoRequest
5 | import com.yongjincompany.data.remote.request.users.UserRegisterRequest
6 | import com.yongjincompany.data.remote.request.users.UserSignInRequest
7 | import com.yongjincompany.data.remote.response.users.UserRegisterResponse
8 | import com.yongjincompany.data.remote.response.users.UserSignInResponse
9 | import com.yongjincompany.domain.entity.users.FetchMyInfoEntity
10 |
11 | interface RemoteUserDataSource {
12 |
13 | suspend fun postUserRegister(
14 | userRegisterRequest: UserRegisterRequest,
15 | ): UserRegisterResponse
16 |
17 | suspend fun postUserSignIn(
18 | userSignInRequest: UserSignInRequest,
19 | ): UserSignInResponse
20 |
21 | suspend fun updateMyInfo(
22 | updateMyInfoRequest: UpdateMyInfoRequest,
23 | )
24 |
25 | suspend fun fetchMyInfo(
26 | ): FetchMyInfoEntity
27 |
28 | suspend fun changePassword(
29 | changePasswordRequest: ChangePasswordRequest
30 | )
31 |
32 | //suspend fun logOut()
33 |
34 | suspend fun deleteAccount()
35 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/request/chest/GoldChestOpenRequest.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.request.chest
2 |
3 | data class GoldChestOpenRequest(
4 | val price: Int
5 | )
6 |
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/request/chest/LegendChestOpenRequest.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.request.chest
2 |
3 | data class LegendChestOpenRequest(
4 | val price: Int
5 | )
6 |
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/request/chest/SilverChestOpenRequest.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.request.chest
2 |
3 | data class SilverChestOpenRequest(
4 | val price: Int
5 | )
6 |
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/request/users/ChangePasswordRequest.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.request.users
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class ChangePasswordRequest(
6 | @SerializedName("new_password") val newPassword: String,
7 | @SerializedName("old_password") val oldPassword: String
8 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/request/users/UpdateMyInfoRequest.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.request.users
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UpdateMyInfoRequest(
6 | @SerializedName("name") val name: String,
7 | @SerializedName("profileUrl") val profileUrl: String,
8 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/request/users/UserRegisterRequest.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.request.users
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UserRegisterRequest(
6 | @SerializedName("account_id") val accountId: String,
7 | @SerializedName("name") val name: String,
8 | @SerializedName("password") val password: String
9 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/request/users/UserSignInRequest.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.request.users
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UserSignInRequest(
6 | @SerializedName("account_id") val accountId: String,
7 | @SerializedName("password") val password: String
8 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/cards/FetchMyCardResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.cards
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.cards.FetchMyCardEntity
5 |
6 | data class FetchMyCardResponse(
7 | @SerializedName("card_count") val cardCount: CardCount,
8 | @SerializedName("total_count") val totalCount: Int,
9 | @SerializedName("card_list") val cardList: List,
10 | ) {
11 | data class Card(
12 | @SerializedName("id") val cardId: Int,
13 | @SerializedName("image_url") val cardImageUrl: String,
14 | @SerializedName("count") val count: Int,
15 | @SerializedName("grade") val grade: String,
16 | @SerializedName("description") val description: String,
17 | @SerializedName("name") val name: String,
18 | )
19 |
20 | data class CardCount(
21 | @SerializedName("agrade_card_count") val agradeCardCount: Int,
22 | @SerializedName("bgrade_card_count") val bgradeCardCount: Int,
23 | @SerializedName("cgrade_card_count") val cgradeCardCount: Int,
24 | @SerializedName("sgrade_card_count") val sgradeCardCount: Int,
25 | @SerializedName("ssgrade_card_count") val ssgradeCardCount: Int,
26 | )
27 |
28 | fun Card.toEntity() =
29 | FetchMyCardEntity.Card(
30 | cardId = cardId,
31 | cardImageUrl = cardImageUrl,
32 | count = count,
33 | description = description,
34 | grade = grade,
35 | name = name
36 | )
37 |
38 | fun CardCount.toEntity() =
39 | FetchMyCardEntity.CardCount(
40 | agradeCardCount = agradeCardCount,
41 | bgradeCardCount = bgradeCardCount,
42 | cgradeCardCount = cgradeCardCount,
43 | sgradeCardCount = sgradeCardCount,
44 | ssgradeCardCount = ssgradeCardCount
45 | )
46 | }
47 |
48 | fun FetchMyCardResponse.toEntity() =
49 | FetchMyCardEntity(
50 | cardCount = cardCount.toEntity(),
51 | totalCount = totalCount,
52 | cardList = cardList.map { it.toEntity() }
53 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/chests/FreeChestOpenResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.chests
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.chests.FreeChestOpenEntity
5 |
6 | data class FreeChestOpenResponse(
7 | @SerializedName("card_list") val cardList: List,
8 | @SerializedName("coin") val coin: Int,
9 | @SerializedName("diamond") val diamond: Int,
10 | ) {
11 | data class Card(
12 | @SerializedName("card_image_url") val cardImageUrl: String,
13 | @SerializedName("card_name") val cardName: String,
14 | @SerializedName("description") val description: String,
15 | @SerializedName("grade") val grade: String,
16 | @SerializedName("id") val id: Int,
17 | )
18 |
19 | }
20 |
21 | fun FreeChestOpenResponse.toEntity() =
22 | FreeChestOpenEntity(
23 | cardList = cardList.map { it.toEntity() },
24 | coin = coin,
25 | diamond = diamond
26 | )
27 |
28 | fun FreeChestOpenResponse.Card.toEntity() =
29 | FreeChestOpenEntity.Card(
30 | cardImageUrl = cardImageUrl,
31 | cardName = cardName,
32 | description = description,
33 | grade = grade,
34 | id = id
35 | )
36 |
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/chests/FreeChestOpenTimeResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.chests
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.chests.FetchFreeChestTimeEntity
5 |
6 | data class FreeChestOpenTimeResponse(
7 | @SerializedName("chest_open_date_time") val chestOpenDateTime: String,
8 | @SerializedName("is_opened") val isOpened: Boolean,
9 | )
10 |
11 | fun FreeChestOpenTimeResponse.toEntity() =
12 | FetchFreeChestTimeEntity(
13 | chestOpenDateTime = chestOpenDateTime,
14 | isOpened = isOpened
15 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/chests/GoldChestOpenResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.chests
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.chests.GoldChestOpenEntity
5 |
6 | data class GoldChestOpenResponse(
7 | @SerializedName("card_list") val cardList: List,
8 | @SerializedName("coin") val coin: Int,
9 | @SerializedName("diamond") val diamond: Int,
10 | ) {
11 | data class Card(
12 | @SerializedName("card_image_url") val cardImageUrl: String,
13 | @SerializedName("card_name") val cardName: String,
14 | @SerializedName("description") val description: String,
15 | @SerializedName("grade") val grade: String,
16 | @SerializedName("id") val id: Int,
17 | )
18 |
19 | }
20 |
21 | fun GoldChestOpenResponse.toEntity() =
22 | GoldChestOpenEntity(
23 | cardList = cardList.map { it.toEntity() },
24 | coin = coin,
25 | diamond = diamond
26 | )
27 |
28 | fun GoldChestOpenResponse.Card.toEntity() =
29 | GoldChestOpenEntity.Card(
30 | cardImageUrl = cardImageUrl,
31 | cardName = cardName,
32 | description = description,
33 | grade = grade,
34 | id = id
35 | )
36 |
37 |
38 |
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/chests/LegendChestOpenResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.chests
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.chests.LegendChestOpenEntity
5 |
6 | data class LegendChestOpenResponse(
7 | @SerializedName("card_list") val cardList: List,
8 | @SerializedName("coin") val coin: Int,
9 | @SerializedName("diamond") val diamond: Int,
10 | ) {
11 | data class Card(
12 | @SerializedName("card_image_url") val cardImageUrl: String,
13 | @SerializedName("card_name") val cardName: String,
14 | @SerializedName("description") val description: String,
15 | @SerializedName("grade") val grade: String,
16 | @SerializedName("id") val id: Int,
17 | )
18 |
19 | }
20 |
21 | fun LegendChestOpenResponse.toEntity() =
22 | LegendChestOpenEntity(
23 | cardList = cardList.map { it.toEntity() },
24 | coin = coin,
25 | diamond = diamond
26 | )
27 |
28 | fun LegendChestOpenResponse.Card.toEntity() =
29 | LegendChestOpenEntity.Card(
30 | cardImageUrl = cardImageUrl,
31 | cardName = cardName,
32 | description = description,
33 | grade = grade,
34 | id = id
35 | )
36 |
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/chests/SilverChestOpenResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.chests
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.chests.SilverChestOpenEntity
5 |
6 | data class SilverChestOpenResponse(
7 | @SerializedName("card_list") val cardList: List,
8 | @SerializedName("coin") val coin: Int,
9 | @SerializedName("diamond") val diamond: Int,
10 | ) {
11 | data class Card(
12 | @SerializedName("card_image_url") val cardImageUrl: String,
13 | @SerializedName("card_name") val cardName: String,
14 | @SerializedName("description") val description: String,
15 | @SerializedName("grade") val grade: String,
16 | @SerializedName("id") val id: Int,
17 | )
18 |
19 | }
20 |
21 | fun SilverChestOpenResponse.toEntity() =
22 | SilverChestOpenEntity(
23 | cardList = cardList.map { it.toEntity() },
24 | coin = coin,
25 | diamond = diamond
26 | )
27 |
28 | fun SilverChestOpenResponse.Card.toEntity() =
29 | SilverChestOpenEntity.Card(
30 | cardImageUrl = cardImageUrl,
31 | cardName = cardName,
32 | description = description,
33 | grade = grade,
34 | id = id
35 | )
36 |
37 |
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/chests/SpecialChestOpenResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.chests
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.chests.SpecialChestOpenEntity
5 |
6 | data class SpecialChestOpenResponse(
7 | @SerializedName("card_list") val cardList: List,
8 | @SerializedName("coin") val coin: Int,
9 | @SerializedName("diamond") val diamond: Int,
10 | ) {
11 | data class Card(
12 | @SerializedName("card_image_url") val cardImageUrl: String,
13 | @SerializedName("card_name") val cardName: String,
14 | @SerializedName("description") val description: String,
15 | @SerializedName("grade") val grade: String,
16 | @SerializedName("id") val id: Int,
17 | )
18 |
19 | }
20 |
21 | fun SpecialChestOpenResponse.toEntity() =
22 | SpecialChestOpenEntity(
23 | cardList = cardList.map { it.toEntity() },
24 | coin = coin,
25 | diamond = diamond
26 | )
27 |
28 | fun SpecialChestOpenResponse.Card.toEntity() =
29 | SpecialChestOpenEntity.Card(
30 | cardImageUrl = cardImageUrl,
31 | cardName = cardName,
32 | description = description,
33 | grade = grade,
34 | id = id
35 | )
36 |
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/chests/SpecialChestOpenTimeResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.chests
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.chests.FetchSpecialChestTimeEntity
5 |
6 | data class SpecialChestOpenTimeResponse(
7 | @SerializedName("chest_open_date_time") val chestOpenDateTime: String,
8 | @SerializedName("is_opened") val isOpened: Boolean,
9 | )
10 |
11 | fun SpecialChestOpenTimeResponse.toEntity() =
12 | FetchSpecialChestTimeEntity(
13 | chestOpenDateTime = chestOpenDateTime,
14 | isOpened = isOpened
15 | )
16 |
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/image/ImageResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.image
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class ImageResponse(
6 | @SerializedName("image_url") val imageUrl: List
7 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/ranks/FetchRankResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.ranks
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.ranks.FetchRankEntity
5 |
6 | data class FetchRankResponse(
7 | @SerializedName("rank_list") val rankList: List,
8 | ) {
9 | data class Rank(
10 | @SerializedName("account_id") val accountId: String,
11 | @SerializedName("card_count") val cardCount: CardCount,
12 | @SerializedName("name") val name: String,
13 | @SerializedName("profile_image_url") val profileImageUrl: String,
14 | @SerializedName("ranking") val ranking: Int,
15 | @SerializedName("user_id") val userId: Int,
16 | )
17 |
18 | data class CardCount(
19 | @SerializedName("agrade_card_count") val agradeCardCount: Int,
20 | @SerializedName("bgrade_card_count") val bgradeCardCount: Int,
21 | @SerializedName("cgrade_card_count") val cgradeCardCount: Int,
22 | @SerializedName("sgrade_card_count") val sgradeCardCount: Int,
23 | @SerializedName("ssgrade_card_count") val ssgradeCardCount: Int,
24 | )
25 |
26 | fun Rank.toEntity() =
27 | FetchRankEntity.Rank(
28 | accountId = accountId,
29 | cardCount = cardCount.toEntity(),
30 | name = name,
31 | profileImageUrl = profileImageUrl,
32 | ranking = ranking,
33 | userId = userId
34 | )
35 |
36 | fun CardCount.toEntity() =
37 | FetchRankEntity.CardCount(
38 | agradeCardCount = agradeCardCount,
39 | bgradeCardCount = bgradeCardCount,
40 | cgradeCardCount = cgradeCardCount,
41 | sgradeCardCount = sgradeCardCount,
42 | ssgradeCardCount = ssgradeCardCount
43 | )
44 | }
45 |
46 | fun FetchRankResponse.toEntity() =
47 | FetchRankEntity(
48 | rankList = rankList.map { it.toEntity() }
49 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/rooms/FetchRoomResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.rooms
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.rooms.FetchRoomEntity
5 |
6 | data class FetchRoomResponse(
7 | @SerializedName("room_list") val roomList: List
8 | ) {
9 | data class Room(
10 | @SerializedName("room_id") val roomId: Int,
11 | @SerializedName("room_name") val roomName: String,
12 | @SerializedName("profile_image") val profileImage: String,
13 | @SerializedName("username") val userName: String,
14 | )
15 |
16 | fun Room.toEntity() =
17 | FetchRoomEntity.Room(
18 | roomId = roomId,
19 | roomName = roomName,
20 | profileImage = profileImage,
21 | userName = userName,
22 | )
23 | }
24 |
25 | fun FetchRoomResponse.toEntity() =
26 | FetchRoomEntity(
27 | roomList = roomList.map { it.toEntity() }
28 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/users/FetchMyInfoResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.users
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.yongjincompany.domain.entity.users.FetchMyInfoEntity
5 |
6 | data class FetchMyInfoResponse(
7 | @SerializedName("name") val name: String,
8 | @SerializedName("profile_image_url") val profileImageUrl: String,
9 | @SerializedName("rank") val rank: Int,
10 | @SerializedName("coin") val coin: Int,
11 | @SerializedName("user_id") val userId: Long,
12 | @SerializedName("card_count") val cardCount: CardCount,
13 | ) {
14 | data class CardCount(
15 | @SerializedName("agrade_card_count") val agradeCardCount: Int,
16 | @SerializedName("bgrade_card_count") val bgradeCardCount: Int,
17 | @SerializedName("cgrade_card_count") val cgradeCardCount: Int,
18 | @SerializedName("sgrade_card_count") val sgradeCardCount: Int,
19 | @SerializedName("dgrade_card_count") val dgradeCardCount: Int,
20 | )
21 |
22 | fun CardCount.toEntity() =
23 | FetchMyInfoEntity.CardCount(
24 | agradeCardCount = agradeCardCount,
25 | bgradeCardCount = bgradeCardCount,
26 | cgradeCardCount = cgradeCardCount,
27 | sgradeCardCount = sgradeCardCount,
28 | dgradeCardCount = dgradeCardCount
29 | )
30 | }
31 |
32 | fun FetchMyInfoResponse.toEntity() =
33 | FetchMyInfoEntity(
34 | name = name,
35 | profileImageUrl = profileImageUrl,
36 | rank = rank,
37 | coin = coin,
38 | userId = userId,
39 | cardCount = cardCount.toEntity()
40 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/users/UserRegisterResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.users
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UserRegisterResponse(
6 | @SerializedName("access_token")val accessToken: String,
7 | @SerializedName("expired_at") val expiredAt: String,
8 | @SerializedName("refresh_token") val refreshToken: String
9 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/remote/response/users/UserSignInResponse.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.remote.response.users
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UserSignInResponse(
6 | @SerializedName("access_token")val accessToken: String,
7 | @SerializedName("expired_at") val expiredAt: String,
8 | @SerializedName("refresh_token") val refreshToken: String
9 | )
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/repository/CardRepositoryImpl.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.repository
2 |
3 | import com.yongjincompany.data.local.datasource.LocalCardDataSource
4 | import com.yongjincompany.data.remote.datasource.RemoteCardDataSource
5 | import com.yongjincompany.data.util.OfflineCacheUtil
6 | import com.yongjincompany.domain.entity.cards.FetchMyCardEntity
7 | import com.yongjincompany.domain.repository.CardRepository
8 | import kotlinx.coroutines.flow.Flow
9 | import javax.inject.Inject
10 |
11 | class CardRepositoryImpl @Inject constructor(
12 | private val remoteCardDataSource: RemoteCardDataSource,
13 | private val localCardDataSource: LocalCardDataSource
14 | ): CardRepository {
15 | override suspend fun fetchMyCard(): Flow =
16 | OfflineCacheUtil()
17 | .remoteData { remoteCardDataSource.fetchMyCard() }
18 | .localData { localCardDataSource.fetchMyCard() }
19 | .doOnNeedRefresh { localCardDataSource.insertMyCard(it) }
20 | .createFlow()
21 |
22 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/repository/RankRepositoryImpl.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.repository
2 |
3 | import com.yongjincompany.data.remote.datasource.RemoteRankDataSource
4 | import com.yongjincompany.data.util.OfflineCacheUtil
5 | import com.yongjincompany.domain.entity.ranks.FetchRankEntity
6 | import com.yongjincompany.domain.repository.RankRepository
7 | import kotlinx.coroutines.flow.Flow
8 | import javax.inject.Inject
9 |
10 | class RankRepositoryImpl @Inject constructor(
11 | private val remoteRankDataSource: RemoteRankDataSource
12 | ): RankRepository {
13 | override suspend fun fetchAllRank(): Flow =
14 | OfflineCacheUtil()
15 | .remoteData { remoteRankDataSource.fetchAllRank() }
16 | .createRemoteFlow()
17 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/repository/RoomRepositoryImpl.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.repository
2 |
3 | import com.yongjincompany.data.remote.datasource.RemoteRoomDataSource
4 | import com.yongjincompany.data.util.OfflineCacheUtil
5 | import com.yongjincompany.domain.entity.rooms.FetchRoomEntity
6 | import com.yongjincompany.domain.repository.RoomRepository
7 | import kotlinx.coroutines.flow.Flow
8 | import javax.inject.Inject
9 |
10 | class RoomRepositoryImpl @Inject constructor(
11 | private val remoteRoomDataSource: RemoteRoomDataSource
12 | ) : RoomRepository {
13 | override suspend fun fetchRooms(): Flow =
14 | OfflineCacheUtil()
15 | .remoteData { remoteRoomDataSource.fetchRooms() }
16 | .createRemoteFlow()
17 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/util/LocalDateTimeParser.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.util
2 |
3 | import org.threeten.bp.LocalDateTime
4 |
5 | fun String.toLocalDateTime(): LocalDateTime =
6 | LocalDateTime.parse(this)
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/util/OfflineCacheUtil.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.util
2 |
3 | import kotlinx.coroutines.flow.Flow
4 | import kotlinx.coroutines.flow.flow
5 | import java.lang.NullPointerException
6 |
7 | class OfflineCacheUtil {
8 |
9 | private lateinit var fetchLocalData: suspend () -> T
10 | private lateinit var fetchRemoteData: suspend () -> T
11 | private var isNeedRefresh: suspend (localData: T, remoteData: T) -> Boolean =
12 | { localData, remoteData -> localData != remoteData }
13 | private lateinit var refreshLocalData: suspend (remoteData: T) -> Unit
14 |
15 | fun localData(fetchLocalData: suspend () -> T): OfflineCacheUtil =
16 | this.apply { this.fetchLocalData = fetchLocalData }
17 |
18 | fun remoteData(fetchRemoteData: suspend () -> T): OfflineCacheUtil =
19 | this.apply { this.fetchRemoteData = fetchRemoteData }
20 |
21 | fun compareData(isNeedRefresh: suspend (localData: T, remoteData: T) -> Boolean): OfflineCacheUtil =
22 | this.apply { this.isNeedRefresh = isNeedRefresh }
23 |
24 | fun doOnNeedRefresh(refreshLocalData: suspend (remoteData: T) -> Unit): OfflineCacheUtil =
25 | this.apply { this.refreshLocalData = refreshLocalData }
26 |
27 | fun createFlow(): Flow =
28 | flow {
29 | try {
30 | val localData = fetchLocalData()
31 | emit(localData)
32 |
33 | val remoteData = fetchRemoteData()
34 | if (isNeedRefresh(localData, remoteData)) {
35 | refreshLocalData(remoteData)
36 | emit(remoteData)
37 | }
38 | } catch (e: NullPointerException) {
39 | val remoteData = fetchRemoteData()
40 | refreshLocalData(remoteData)
41 | emit(remoteData)
42 | }
43 | }
44 |
45 | fun createRemoteFlow(): Flow =
46 | flow {
47 | val remoteData = fetchRemoteData()
48 | emit(remoteData)
49 | }
50 | }
--------------------------------------------------------------------------------
/data/src/main/java/com/yongjincompany/data/util/UtilFunc.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.data.util
2 |
3 | import okhttp3.MediaType
4 | import okhttp3.MultipartBody
5 | import okhttp3.RequestBody
6 | import java.io.File
7 |
8 | fun File.toMultipart(): MultipartBody.Part {
9 | val fileBody = RequestBody.create(MediaType.parse("image/jpeg"), this)
10 | return MultipartBody.Part.createFormData("images", this.name, fileBody)
11 | }
12 |
13 | fun List.toMultipartList(): List =
14 | this.map { it.toMultipart() }
--------------------------------------------------------------------------------
/domain/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/domain/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id("com.android.library")
3 | kotlin("android")
4 | }
5 |
6 | android {
7 | compileSdk = Project.compileSdk
8 |
9 | defaultConfig {
10 | minSdk = Project.minSdk
11 | targetSdk = Project.targetSdk
12 | consumerProguardFiles("consumer-rules.pro")
13 | }
14 |
15 | buildTypes {
16 | getByName("release") {
17 | isMinifyEnabled = false
18 | proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
19 | }
20 | }
21 | compileOptions {
22 | sourceCompatibility = Project.javaVersion
23 | targetCompatibility = Project.javaVersion
24 | }
25 | kotlinOptions {
26 | jvmTarget = "11"
27 | }
28 | }
29 | dependencies {
30 | testImplementation(Dependency.Test.junit)
31 | testImplementation(Dependency.Test.mockito)
32 | testImplementation(Dependency.Test.mockitoKotlin)
33 | testImplementation(Dependency.Test.mockitoInline)
34 |
35 | implementation(Dependency.Coroutine.core)
36 |
37 | implementation(Dependency.DI.inject)
38 |
39 | implementation(Dependency.ThreeTenAndroidBackport.threeTenAbp)
40 | }
--------------------------------------------------------------------------------
/domain/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/cards/FetchMyCardEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.cards
2 |
3 | data class FetchMyCardEntity(
4 | val cardCount: CardCount,
5 | val totalCount: Int,
6 | val cardList: List,
7 | ) {
8 | data class Card(
9 | val cardId: Int,
10 | val cardImageUrl: String,
11 | val count: Int,
12 | val description: String,
13 | val grade: String,
14 | val name: String,
15 | )
16 |
17 | data class CardCount(
18 | val agradeCardCount: Int,
19 | val bgradeCardCount: Int,
20 | val cgradeCardCount: Int,
21 | val sgradeCardCount: Int,
22 | val ssgradeCardCount: Int,
23 | )
24 | }
25 |
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/chests/FetchFreeChestTimeEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.chests
2 |
3 | data class FetchFreeChestTimeEntity(
4 | val chestOpenDateTime: String,
5 | val isOpened: Boolean,
6 | )
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/chests/FetchSpecialChestTimeEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.chests
2 |
3 | data class FetchSpecialChestTimeEntity(
4 | val chestOpenDateTime: String,
5 | val isOpened: Boolean,
6 | )
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/chests/FreeChestOpenEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.chests
2 |
3 | data class FreeChestOpenEntity(
4 | val cardList: List,
5 | val coin: Int,
6 | val diamond: Int,
7 | ) {
8 | data class Card(
9 | val cardImageUrl: String,
10 | val cardName: String,
11 | val description: String,
12 | val grade: String,
13 | val id: Int,
14 | )
15 | }
16 |
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/chests/GoldChestOpenEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.chests
2 |
3 | data class GoldChestOpenEntity(
4 | val cardList: List,
5 | val coin: Int,
6 | val diamond: Int,
7 | ) {
8 | data class Card(
9 | val cardImageUrl: String,
10 | val cardName: String,
11 | val description: String,
12 | val grade: String,
13 | val id: Int,
14 | )
15 | }
16 |
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/chests/LegendChestOpenEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.chests
2 |
3 | data class LegendChestOpenEntity(
4 | val cardList: List,
5 | val coin: Int,
6 | val diamond: Int,
7 | ) {
8 | data class Card(
9 | val cardImageUrl: String,
10 | val cardName: String,
11 | val description: String,
12 | val grade: String,
13 | val id: Int,
14 | )
15 | }
16 |
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/chests/SilverChestOpenEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.chests
2 |
3 | data class SilverChestOpenEntity(
4 | val cardList: List,
5 | val coin: Int,
6 | val diamond: Int,
7 | ) {
8 | data class Card(
9 | val cardImageUrl: String,
10 | val cardName: String,
11 | val description: String,
12 | val grade: String,
13 | val id: Int,
14 | )
15 | }
16 |
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/chests/SpecialChestOpenEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.chests
2 |
3 | data class SpecialChestOpenEntity(
4 | val cardList: List,
5 | val coin: Int,
6 | val diamond: Int,
7 | ) {
8 | data class Card(
9 | val cardImageUrl: String,
10 | val cardName: String,
11 | val description: String,
12 | val grade: String,
13 | val id: Int,
14 | )
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/ranks/FetchRankEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.ranks
2 |
3 | data class FetchRankEntity(
4 | val rankList: List,
5 | ) {
6 | data class Rank(
7 | val accountId: String,
8 | val cardCount: CardCount,
9 | val name: String,
10 | val profileImageUrl: String,
11 | val ranking: Int,
12 | val userId: Int,
13 | )
14 |
15 | data class CardCount(
16 | val agradeCardCount: Int,
17 | val bgradeCardCount: Int,
18 | val cgradeCardCount: Int,
19 | val sgradeCardCount: Int,
20 | val ssgradeCardCount: Int,
21 | )
22 | }
23 |
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/rooms/FetchRoomEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.rooms
2 |
3 | data class FetchRoomEntity(
4 | val roomList: List
5 | ) {
6 | data class Room(
7 | val roomId: Int,
8 | val roomName: String,
9 | val profileImage: String,
10 | val userName: String,
11 | )
12 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/entity/users/FetchMyInfoEntity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.entity.users
2 |
3 | data class FetchMyInfoEntity(
4 | val name: String,
5 | val profileImageUrl: String,
6 | val rank: Int?,
7 | val coin: Int,
8 | val userId: Long,
9 | val cardCount: CardCount,
10 | ) {
11 | data class CardCount(
12 | val agradeCardCount: Int,
13 | val bgradeCardCount: Int,
14 | val cgradeCardCount: Int,
15 | val sgradeCardCount: Int,
16 | val dgradeCardCount: Int,
17 | )
18 | }
19 |
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/exception/Basic.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.exception
2 |
3 | class BadRequestException : RuntimeException()
4 |
5 | class ConflictException : RuntimeException()
6 |
7 | class ForbiddenException : RuntimeException()
8 |
9 | class NoInternetException : RuntimeException()
10 |
11 | class NotFoundException : RuntimeException()
12 |
13 | class ServerException : RuntimeException()
14 |
15 | class TimeoutException : RuntimeException()
16 |
17 | class UnauthorizedException : RuntimeException()
18 |
19 | class UnknownException : RuntimeException()
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/exception/File.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.exception
2 |
3 | import java.lang.RuntimeException
4 |
5 | class ChangeFileSizeException : RuntimeException()
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/exception/User.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.exception
2 |
3 | import java.io.IOException
4 |
5 | class NeedLoginException : IOException()
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/param/chest/GoldChestOpenParam.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.param.chest
2 |
3 | data class GoldChestOpenParam(
4 | val price: Int
5 | )
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/param/chest/LegendChestOpenParam.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.param.chest
2 |
3 | data class LegendChestOpenParam(
4 | val price: Int
5 | )
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/param/chest/SilverChestOpenParam.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.param.chest
2 |
3 | data class SilverChestOpenParam(
4 | val price: Int
5 | )
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/param/user/PostUserRegisterParam.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.param.user
2 |
3 | data class PostUserRegisterParam(
4 | val accountId: String,
5 | val name: String,
6 | val password: String,
7 | )
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/param/user/PostUserSignInParam.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.param.user
2 |
3 | data class PostUserSignInParam(
4 | val accountId: String,
5 | val password: String,
6 | )
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/param/user/UpdateMyInfoParam.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.param.user
2 |
3 | import java.io.File
4 |
5 | data class UpdateMyInfoParam(
6 | val name: String,
7 | val profileUrl: File?,
8 | )
9 |
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/param/user/changePasswordParam.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.param.user
2 |
3 | data class ChangePasswordParam(
4 | val oldPassword: String,
5 | val newPassword: String
6 | )
7 |
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/repository/CardRepository.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.repository
2 |
3 | import com.yongjincompany.domain.entity.cards.FetchMyCardEntity
4 | import kotlinx.coroutines.flow.Flow
5 |
6 | interface CardRepository {
7 | suspend fun fetchMyCard(): Flow
8 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/repository/ChestRepository.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.repository
2 |
3 | import com.yongjincompany.domain.entity.chests.*
4 | import com.yongjincompany.domain.param.chest.GoldChestOpenParam
5 | import com.yongjincompany.domain.param.chest.LegendChestOpenParam
6 | import com.yongjincompany.domain.param.chest.SilverChestOpenParam
7 | import kotlinx.coroutines.flow.Flow
8 |
9 | interface ChestRepository {
10 | suspend fun fetchFreeChestTime(): Flow
11 |
12 | suspend fun fetchSpecialChestTime(): Flow
13 |
14 | suspend fun openFreeChest(): Flow
15 |
16 | suspend fun openSpecialChest(): Flow
17 |
18 | suspend fun openSilverChest(silverChestOpenParam: SilverChestOpenParam): Flow
19 |
20 | suspend fun openGoldChest(goldChestOpenParam: GoldChestOpenParam): Flow
21 |
22 | suspend fun openLegendChest(legendChestOpenParam: LegendChestOpenParam): Flow
23 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/repository/RankRepository.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.repository
2 |
3 | import com.yongjincompany.domain.entity.ranks.FetchRankEntity
4 | import kotlinx.coroutines.flow.Flow
5 |
6 | interface RankRepository {
7 | suspend fun fetchAllRank(): Flow
8 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/repository/RoomRepository.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.repository
2 |
3 | import com.yongjincompany.domain.entity.rooms.FetchRoomEntity
4 | import kotlinx.coroutines.flow.Flow
5 |
6 | interface RoomRepository {
7 | suspend fun fetchRooms(): Flow
8 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/repository/UserRepository.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.repository
2 |
3 | import com.yongjincompany.domain.entity.users.FetchMyInfoEntity
4 | import com.yongjincompany.domain.param.user.ChangePasswordParam
5 | import com.yongjincompany.domain.param.user.PostUserRegisterParam
6 | import com.yongjincompany.domain.param.user.PostUserSignInParam
7 | import com.yongjincompany.domain.param.user.UpdateMyInfoParam
8 | import kotlinx.coroutines.flow.Flow
9 |
10 | interface UserRepository {
11 | suspend fun postUserRegister(
12 | postUserRegisterParam: PostUserRegisterParam,
13 | )
14 |
15 | suspend fun postUserSignIn(
16 | postUserSignInParam: PostUserSignInParam,
17 | )
18 |
19 | suspend fun autoLogin()
20 |
21 | suspend fun updateMyInfo(
22 | updateMyInfoParam: UpdateMyInfoParam,
23 | )
24 |
25 | suspend fun fetchMyInfo(): Flow
26 |
27 | suspend fun changePassword(
28 | changePasswordParam: ChangePasswordParam
29 | )
30 |
31 | suspend fun logOut()
32 |
33 | suspend fun deleteAccount()
34 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/UseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase
2 |
3 | abstract class UseCase {
4 | abstract suspend fun execute(data: I): O
5 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/card/FetchMyCardUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.card
2 |
3 | import com.yongjincompany.domain.entity.cards.FetchMyCardEntity
4 | import com.yongjincompany.domain.repository.CardRepository
5 | import com.yongjincompany.domain.usecase.UseCase
6 | import kotlinx.coroutines.flow.Flow
7 | import javax.inject.Inject
8 |
9 | class FetchMyCardUseCase @Inject constructor(
10 | private val cardRepository: CardRepository,
11 | ) : UseCase>() {
12 |
13 | override suspend fun execute(data: Unit): Flow =
14 | cardRepository.fetchMyCard()
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/chest/FetchFreeChestTimeUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.chest
2 |
3 | import com.yongjincompany.domain.entity.chests.FetchFreeChestTimeEntity
4 | import com.yongjincompany.domain.repository.ChestRepository
5 | import com.yongjincompany.domain.usecase.UseCase
6 | import kotlinx.coroutines.flow.Flow
7 | import javax.inject.Inject
8 |
9 | class FetchFreeChestTimeUseCase @Inject constructor(
10 | private val chestRepository: ChestRepository
11 | ): UseCase>() {
12 | override suspend fun execute(data: Unit): Flow =
13 | chestRepository.fetchFreeChestTime()
14 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/chest/FetchSpecialChestTimeUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.chest
2 |
3 | import com.yongjincompany.domain.entity.chests.FetchFreeChestTimeEntity
4 | import com.yongjincompany.domain.entity.chests.FetchSpecialChestTimeEntity
5 | import com.yongjincompany.domain.repository.ChestRepository
6 | import com.yongjincompany.domain.usecase.UseCase
7 | import kotlinx.coroutines.flow.Flow
8 | import javax.inject.Inject
9 |
10 | class FetchSpecialChestTimeUseCase @Inject constructor(
11 | private val chestRepository: ChestRepository
12 | ): UseCase>() {
13 | override suspend fun execute(data: Unit): Flow =
14 | chestRepository.fetchSpecialChestTime()
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/chest/OpenFreeChestUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.chest
2 |
3 | import com.yongjincompany.domain.entity.chests.FreeChestOpenEntity
4 | import com.yongjincompany.domain.repository.ChestRepository
5 | import com.yongjincompany.domain.usecase.UseCase
6 | import kotlinx.coroutines.flow.Flow
7 | import javax.inject.Inject
8 |
9 | class OpenFreeChestUseCase @Inject constructor(
10 | private val chestRepository: ChestRepository,
11 | ) : UseCase>() {
12 | override suspend fun execute(data: Unit): Flow =
13 | chestRepository.openFreeChest()
14 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/chest/OpenGoldChestUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.chest
2 |
3 | import com.yongjincompany.domain.entity.chests.GoldChestOpenEntity
4 | import com.yongjincompany.domain.param.chest.GoldChestOpenParam
5 | import com.yongjincompany.domain.repository.ChestRepository
6 | import com.yongjincompany.domain.usecase.UseCase
7 | import kotlinx.coroutines.flow.Flow
8 | import javax.inject.Inject
9 |
10 | class OpenGoldChestUseCase @Inject constructor(
11 | private val chestRepository: ChestRepository
12 | ) : UseCase>() {
13 | override suspend fun execute(data: GoldChestOpenParam): Flow =
14 | chestRepository.openGoldChest(data)
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/chest/OpenLegendChestUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.chest
2 |
3 | import com.yongjincompany.domain.entity.chests.LegendChestOpenEntity
4 | import com.yongjincompany.domain.param.chest.LegendChestOpenParam
5 | import com.yongjincompany.domain.repository.ChestRepository
6 | import com.yongjincompany.domain.usecase.UseCase
7 | import kotlinx.coroutines.flow.Flow
8 | import javax.inject.Inject
9 |
10 | class OpenLegendChestUseCase @Inject constructor(
11 | private val chestRepository: ChestRepository
12 | ) : UseCase>() {
13 | override suspend fun execute(data: LegendChestOpenParam): Flow =
14 | chestRepository.openLegendChest(data)
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/chest/OpenSilverChestUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.chest
2 |
3 | import com.yongjincompany.domain.entity.chests.SilverChestOpenEntity
4 | import com.yongjincompany.domain.param.chest.SilverChestOpenParam
5 | import com.yongjincompany.domain.repository.ChestRepository
6 | import com.yongjincompany.domain.usecase.UseCase
7 | import kotlinx.coroutines.flow.Flow
8 | import javax.inject.Inject
9 |
10 | class OpenSilverChestUseCase @Inject constructor(
11 | private val chestRepository: ChestRepository,
12 | ) : UseCase>() {
13 | override suspend fun execute(data: SilverChestOpenParam): Flow =
14 | chestRepository.openSilverChest(data)
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/chest/OpenSpecialChestUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.chest
2 |
3 | import com.yongjincompany.domain.entity.chests.SpecialChestOpenEntity
4 | import com.yongjincompany.domain.repository.ChestRepository
5 | import com.yongjincompany.domain.usecase.UseCase
6 | import kotlinx.coroutines.flow.Flow
7 | import javax.inject.Inject
8 |
9 | class OpenSpecialChestUseCase @Inject constructor(
10 | private val chestRepository: ChestRepository,
11 | ) : UseCase>() {
12 | override suspend fun execute(data: Unit): Flow =
13 | chestRepository.openSpecialChest()
14 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/rank/FetchAllRankUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.rank
2 |
3 | import com.yongjincompany.domain.entity.ranks.FetchRankEntity
4 | import com.yongjincompany.domain.repository.RankRepository
5 | import com.yongjincompany.domain.usecase.UseCase
6 | import kotlinx.coroutines.flow.Flow
7 | import javax.inject.Inject
8 |
9 | class FetchAllRankUseCase @Inject constructor(
10 | private val rankRepository: RankRepository,
11 | ) : UseCase>() {
12 |
13 | override suspend fun execute(data: Unit): Flow =
14 | rankRepository.fetchAllRank()
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/room/FetchRoomsUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.room
2 |
3 | import com.yongjincompany.domain.entity.rooms.FetchRoomEntity
4 | import com.yongjincompany.domain.repository.RoomRepository
5 | import com.yongjincompany.domain.usecase.UseCase
6 | import kotlinx.coroutines.flow.Flow
7 | import javax.inject.Inject
8 |
9 | class FetchRoomsUseCase @Inject constructor(
10 | private val roomRepository: RoomRepository
11 | ) : UseCase>() {
12 |
13 | override suspend fun execute(data: Unit): Flow =
14 | roomRepository.fetchRooms()
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/user/AutoLoginUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.user
2 |
3 |
4 | import com.yongjincompany.domain.repository.UserRepository
5 | import com.yongjincompany.domain.usecase.UseCase
6 | import javax.inject.Inject
7 |
8 | class AutoLoginUseCase @Inject constructor(
9 | private val userRepository: UserRepository
10 | ) : UseCase() {
11 |
12 | override suspend fun execute(data: Unit): Unit =
13 | userRepository.autoLogin()
14 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/user/ChangePasswordUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.user
2 |
3 | import com.yongjincompany.domain.param.user.ChangePasswordParam
4 | import com.yongjincompany.domain.repository.UserRepository
5 | import com.yongjincompany.domain.usecase.UseCase
6 | import javax.inject.Inject
7 |
8 | class ChangePasswordUseCase @Inject constructor(
9 | private val userRepository: UserRepository
10 | ) : UseCase() {
11 |
12 | override suspend fun execute(data: ChangePasswordParam) =
13 | userRepository.changePassword(data)
14 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/user/DeleteAccountUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.user
2 |
3 | import com.yongjincompany.domain.repository.UserRepository
4 | import com.yongjincompany.domain.usecase.UseCase
5 | import javax.inject.Inject
6 |
7 | class DeleteAccountUseCase @Inject constructor(
8 | private val userRepository: UserRepository
9 | ) : UseCase() {
10 |
11 | override suspend fun execute(data: Unit): Unit =
12 | userRepository.deleteAccount()
13 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/user/FetchMyInfoUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.user
2 |
3 | import com.yongjincompany.domain.entity.users.FetchMyInfoEntity
4 | import com.yongjincompany.domain.repository.UserRepository
5 | import com.yongjincompany.domain.usecase.UseCase
6 | import kotlinx.coroutines.flow.Flow
7 | import javax.inject.Inject
8 |
9 | class FetchMyInfoUseCase @Inject constructor(
10 | private val userRepository: UserRepository
11 | ) : UseCase>() {
12 |
13 | override suspend fun execute(data: Unit): Flow =
14 | userRepository.fetchMyInfo()
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/user/LogOutUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.user
2 |
3 | import com.yongjincompany.domain.repository.UserRepository
4 | import com.yongjincompany.domain.usecase.UseCase
5 | import javax.inject.Inject
6 |
7 | class LogOutUseCase @Inject constructor(
8 | private val userRepository: UserRepository
9 | ) : UseCase() {
10 |
11 | override suspend fun execute(data: Unit): Unit =
12 | userRepository.logOut()
13 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/user/PostUserRegisterUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.user
2 |
3 |
4 | import com.yongjincompany.domain.param.user.PostUserRegisterParam
5 | import com.yongjincompany.domain.repository.UserRepository
6 | import com.yongjincompany.domain.usecase.UseCase
7 | import javax.inject.Inject
8 |
9 | class PostUserRegisterUseCase @Inject constructor(
10 | private val userRepository: UserRepository
11 | ) : UseCase() {
12 |
13 | override suspend fun execute(data: PostUserRegisterParam) =
14 | userRepository.postUserRegister(data)
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/user/PostUserSignInUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.user
2 |
3 |
4 | import com.yongjincompany.domain.param.user.PostUserSignInParam
5 | import com.yongjincompany.domain.repository.UserRepository
6 | import com.yongjincompany.domain.usecase.UseCase
7 | import javax.inject.Inject
8 |
9 | class PostUserSignInUseCase @Inject constructor(
10 | private val userRepository: UserRepository
11 | ) : UseCase() {
12 |
13 | override suspend fun execute(data: PostUserSignInParam): Unit =
14 | userRepository.postUserSignIn(data)
15 | }
--------------------------------------------------------------------------------
/domain/src/main/java/com/yongjincompany/domain/usecase/user/UpdateMyInfoUseCase.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.domain.usecase.user
2 |
3 | import com.yongjincompany.domain.param.user.UpdateMyInfoParam
4 | import com.yongjincompany.domain.repository.UserRepository
5 | import com.yongjincompany.domain.usecase.UseCase
6 | import javax.inject.Inject
7 |
8 | class UpdateMyInfoUseCase @Inject constructor(
9 | private val userRepository: UserRepository
10 | ) : UseCase() {
11 |
12 | override suspend fun execute(data: UpdateMyInfoParam) =
13 | userRepository.updateMyInfo(data)
14 | }
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app"s APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Automatically convert third-party libraries to use AndroidX
19 | android.enableJetifier=true
20 | # Kotlin code style for this project: "official" or "obsolete":
21 | kotlin.code.style=official
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Jul 13 12:16:19 KST 2022
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/presentation/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/presentation/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.kts.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/presentation/src/androidTest/java/com/yongjincompany/dsmtcg/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("com.yongjincompany.dsmtcg", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/presentation/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/base/BaseActivity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.base
2 |
3 | import android.os.Bundle
4 | import android.widget.Toast
5 | import androidx.annotation.LayoutRes
6 | import androidx.appcompat.app.AppCompatActivity
7 | import androidx.databinding.DataBindingUtil
8 | import androidx.databinding.ViewDataBinding
9 |
10 | abstract class BaseActivity(
11 | @LayoutRes private val layoutId: Int
12 | ) : AppCompatActivity() {
13 |
14 | protected lateinit var binding: B
15 |
16 | override fun onCreate(savedInstanceState: Bundle?) {
17 | super.onCreate(savedInstanceState)
18 |
19 | binding = DataBindingUtil.setContentView(this, layoutId)
20 | binding.lifecycleOwner = this
21 |
22 | initView()
23 | }
24 |
25 | fun showShortToast(msg: String) {
26 | Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
27 | }
28 |
29 | fun showLongToast(msg: String) {
30 | Toast.makeText(this, msg, Toast.LENGTH_LONG).show()
31 | }
32 |
33 | abstract fun initView()
34 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/base/BaseFragment.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.base
2 |
3 |
4 | import android.os.Bundle
5 | import android.view.LayoutInflater
6 | import android.view.View
7 | import android.view.ViewGroup
8 | import android.widget.Toast
9 | import androidx.annotation.LayoutRes
10 | import androidx.databinding.DataBindingUtil
11 | import androidx.databinding.ViewDataBinding
12 | import androidx.fragment.app.Fragment
13 |
14 | abstract class BaseFragment(
15 | @LayoutRes private val layoutRes: Int
16 | ) : Fragment() {
17 | protected lateinit var binding: B
18 |
19 | override fun onCreateView(
20 | inflater: LayoutInflater,
21 | container: ViewGroup?,
22 | savedInstanceState: Bundle?
23 | ): View? {
24 | binding = DataBindingUtil.inflate(inflater, layoutRes, container, false)
25 | return binding.root
26 | }
27 |
28 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
29 | super.onViewCreated(view, savedInstanceState)
30 | binding.lifecycleOwner = this
31 |
32 | initView()
33 | }
34 |
35 | abstract fun initView()
36 |
37 | fun showShortToast(msg: String) {
38 | Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
39 | }
40 |
41 | fun showLongToast(msg: String) {
42 | Toast.makeText(context, msg, Toast.LENGTH_LONG).show()
43 | }
44 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/di/DSMTCGApplication.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.di
2 |
3 | import android.app.Application
4 | import androidx.work.Configuration
5 | import com.jakewharton.threetenabp.AndroidThreeTen
6 | import com.yongjincompany.dsmtcg.util.DSMTCGExceptionHandler
7 | import dagger.hilt.android.HiltAndroidApp
8 | import javax.inject.Inject
9 |
10 | @HiltAndroidApp
11 | class DSMTCGApplication : Application(), Configuration.Provider {
12 | override fun onCreate() {
13 | super.onCreate()
14 | AndroidThreeTen.init(this)
15 | setCrashHandler()
16 | }
17 |
18 | private fun setCrashHandler() {
19 | val crashlyticsExceptionHandler = Thread.getDefaultUncaughtExceptionHandler() ?: return
20 | Thread.setDefaultUncaughtExceptionHandler(
21 | DSMTCGExceptionHandler(
22 | this,
23 | crashlyticsExceptionHandler
24 | )
25 | )
26 | }
27 |
28 | override fun getWorkManagerConfiguration(): Configuration {
29 | TODO("Not yet implemented")
30 | }
31 |
32 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/di/LocalDataSourceModule.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.di
2 |
3 |
4 | import com.yongjincompany.data.local.datasource.LocalCardDataSource
5 | import com.yongjincompany.data.local.datasource.LocalCardDataSourceImpl
6 | import com.yongjincompany.data.local.datasource.LocalUserDataSource
7 | import com.yongjincompany.data.local.datasource.LocalUserDataSourceImpl
8 | import dagger.Binds
9 | import dagger.Module
10 | import dagger.Provides
11 | import dagger.hilt.InstallIn
12 | import dagger.hilt.components.SingletonComponent
13 |
14 | @Module
15 | @InstallIn(SingletonComponent::class)
16 | abstract class LocalDataSourceModule {
17 |
18 | @Binds
19 | abstract fun provideLocalUserDataSource(
20 | localUserDataSourceImpl: LocalUserDataSourceImpl
21 | ): LocalUserDataSource
22 |
23 | @Binds
24 | abstract fun provideLocalCardDataSource(
25 | localCardDataSourceImpl: LocalCardDataSourceImpl
26 | ): LocalCardDataSource
27 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/di/RemoteDataSourceModule.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.di
2 |
3 | import com.yongjincompany.data.remote.datasource.*
4 | import dagger.Binds
5 | import dagger.Module
6 | import dagger.hilt.InstallIn
7 | import dagger.hilt.components.SingletonComponent
8 |
9 | @Module
10 | @InstallIn(SingletonComponent::class)
11 | abstract class RemoteDataSourceModule {
12 |
13 | /*@Singleton
14 | @Binds
15 | abstract fun provideRemoteSocketDataSource(
16 | remoteSocketDataSourceImpl: RemoteSocketDataSourceImpl,
17 | ): RemoteSocketDataSource*/
18 |
19 | @Binds
20 | abstract fun provideRemoteUserDataSource(
21 | remoteUserDataSourceImpl: RemoteUserDataSourceImpl
22 | ): RemoteUserDataSource
23 |
24 | @Binds
25 | abstract fun provideRemoteImageDataSource(
26 | remoteImagesDataSourceImpl: RemoteImagesDataSourceImpl
27 | ): RemoteImagesDataSource
28 |
29 | @Binds
30 | abstract fun provideRemoteCardDataSource(
31 | remoteCardDataSourceImpl: RemoteCardDataSourceImpl
32 | ): RemoteCardDataSource
33 |
34 | @Binds
35 | abstract fun provideRemoteChestDataSource(
36 | remoteChestDataSourceImpl: RemoteChestDataSourceImpl
37 | ): RemoteChestDataSource
38 |
39 | @Binds
40 | abstract fun provideRemoteRankDataSource(
41 | remoteRankDataSourceImpl: RemoteRankDataSourceImpl
42 | ): RemoteRankDataSource
43 |
44 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/di/RepositoryModule.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.di
2 |
3 | import com.yongjincompany.data.repository.CardRepositoryImpl
4 | import com.yongjincompany.data.repository.ChestRepositoryImpl
5 | import com.yongjincompany.data.repository.RankRepositoryImpl
6 | import com.yongjincompany.data.repository.UserRepositoryImpl
7 | import com.yongjincompany.domain.repository.CardRepository
8 | import com.yongjincompany.domain.repository.ChestRepository
9 | import com.yongjincompany.domain.repository.RankRepository
10 | import com.yongjincompany.domain.repository.UserRepository
11 | import dagger.Binds
12 | import dagger.Module
13 | import dagger.hilt.InstallIn
14 | import dagger.hilt.components.SingletonComponent
15 | import javax.inject.Singleton
16 |
17 | @Module
18 | @InstallIn(SingletonComponent::class)
19 | abstract class RepositoryModule {
20 |
21 | /*@Singleton
22 | @Binds
23 | abstract fun providesSocketRepository(
24 | socketRepositoryImpl: SocketRepositoryImpl
25 | ): SocketRepository*/
26 |
27 | @Binds
28 | abstract fun provideUserRepository(
29 | userRepositoryImpl: UserRepositoryImpl,
30 | ): UserRepository
31 |
32 | @Binds
33 | abstract fun provideCardRepository(
34 | cardRepositoryImpl: CardRepositoryImpl,
35 | ): CardRepository
36 |
37 | @Binds
38 | abstract fun provideChestRepository(
39 | chestRepositoryImpl: ChestRepositoryImpl,
40 | ): ChestRepository
41 |
42 | @Binds
43 | abstract fun provideRankRepository(
44 | rankRepositoryImpl: RankRepositoryImpl
45 | ): RankRepository
46 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/di/RoomModule.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.di
2 |
3 | import android.content.Context
4 | import androidx.room.Room
5 | import com.squareup.moshi.Moshi
6 | import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
7 | import com.yongjincompany.data.local.converter.CardListTypeConverter
8 | import com.yongjincompany.data.local.dao.CardDao
9 | import com.yongjincompany.data.local.dao.UserDao
10 | import com.yongjincompany.data.local.database.DSMTCGDataBase
11 | import dagger.Module
12 | import dagger.Provides
13 | import dagger.hilt.InstallIn
14 | import dagger.hilt.android.qualifiers.ApplicationContext
15 | import dagger.hilt.components.SingletonComponent
16 | import javax.inject.Singleton
17 |
18 | @Module
19 | @InstallIn(SingletonComponent::class)
20 | object RoomModule {
21 |
22 | @Singleton
23 | @Provides
24 | fun providesMoshi(): Moshi {
25 | return Moshi.Builder()
26 | .add(KotlinJsonAdapterFactory())
27 | .build()
28 | }
29 |
30 | @Provides
31 | fun provideWalkHubDatabase(
32 | @ApplicationContext context: Context,
33 | moshi: Moshi,
34 | ): DSMTCGDataBase = Room
35 | .databaseBuilder(context, DSMTCGDataBase::class.java, "DSMDataBase")
36 | .addTypeConverter(CardListTypeConverter(moshi))
37 | .build()
38 |
39 | @Provides
40 | fun provideUserDao(
41 | dsmtcgDataBase: DSMTCGDataBase,
42 | ): UserDao = dsmtcgDataBase.userDao()
43 |
44 | @Provides
45 | fun provideCardDao(
46 | dsmtcgDataBase: DSMTCGDataBase
47 | ): CardDao = dsmtcgDataBase.cardDao()
48 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/di/StorageModule.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.di
2 |
3 | import com.yongjincompany.data.local.storage.*
4 | import dagger.Binds
5 | import dagger.Module
6 | import dagger.hilt.InstallIn
7 | import dagger.hilt.components.SingletonComponent
8 |
9 | @Module
10 | @InstallIn(SingletonComponent::class)
11 | abstract class StorageModule {
12 |
13 | @Binds
14 | abstract fun provideAuthDataStorage(
15 | authDataStorageImpl: AuthDataStorageImpl
16 | ): AuthDataStorage
17 |
18 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/extensions/Lifecycle.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.extensions
2 |
3 | import androidx.lifecycle.*
4 | import kotlinx.coroutines.CoroutineScope
5 | import kotlinx.coroutines.launch
6 |
7 | fun LifecycleOwner.observe(liveData: LiveData, action: (t: T) -> Unit) {
8 | liveData.observe(this, Observer { it?.let { t -> action(t) } })
9 | }
10 |
11 | fun LifecycleOwner.repeatOnStarted(block: suspend CoroutineScope.() -> Unit) {
12 | lifecycleScope.launch {
13 | lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED, block)
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/extensions/View.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.extensions
2 |
3 | import android.view.View
4 | import android.widget.ImageView
5 | import com.bumptech.glide.Glide
6 |
7 | fun View.isVisible() = this.visibility == View.VISIBLE
8 |
9 | fun View.visible() {
10 | this.visibility = View.VISIBLE
11 | }
12 |
13 | fun View.invisible() {
14 | this.visibility = View.GONE
15 | }
16 |
17 | fun ImageView.loadFromUrl(url: String) =
18 | Glide.with(this.context.applicationContext)
19 | .load(url)
20 | .into(this)
21 |
22 | fun ImageView.loadCircleFromUrl(url: String) =
23 | Glide.with(this.context.applicationContext)
24 | .load(url)
25 | .circleCrop()
26 | .into(this)
27 |
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui
2 |
3 | import android.os.Bundle
4 | import androidx.navigation.fragment.findNavController
5 | import androidx.navigation.ui.setupWithNavController
6 | import com.google.android.material.bottomnavigation.BottomNavigationView
7 | import com.yongjincompany.dsmtcg.base.BaseActivity
8 | import com.yongjincompany.dsmtcg.R
9 | import com.yongjincompany.dsmtcg.databinding.ActivityMainBinding
10 | import dagger.hilt.android.AndroidEntryPoint
11 |
12 | @AndroidEntryPoint
13 | class MainActivity : BaseActivity(
14 | R.layout.activity_main
15 | ) {
16 | override fun onCreate(savedInstanceState: Bundle?) {
17 | super.onCreate(savedInstanceState)
18 |
19 | }
20 |
21 | private fun initBottomNav() {
22 | val navController = supportFragmentManager.findFragmentById(R.id.navHostFragmentActivityMain)?.findNavController()
23 | val nav = binding.bottomNav
24 | navController?.let {
25 | nav.setupWithNavController(navController)
26 | }
27 | }
28 |
29 | override fun initView() {
30 | initBottomNav()
31 | }
32 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/StartActivity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui
2 |
3 | import android.content.Intent
4 | import androidx.appcompat.app.AppCompatActivity
5 | import android.os.Bundle
6 | import androidx.databinding.DataBindingUtil
7 | import com.gun0912.tedpermission.provider.TedPermissionProvider.context
8 | import com.yongjincompany.dsmtcg.R
9 | import com.yongjincompany.dsmtcg.databinding.ActivityStartBinding
10 | import com.yongjincompany.dsmtcg.ui.login.LoginActivity
11 | import com.yongjincompany.dsmtcg.ui.register.RegisterActivity
12 |
13 | class StartActivity : AppCompatActivity() {
14 | private lateinit var binding: ActivityStartBinding
15 |
16 |
17 | override fun onCreate(savedInstanceState: Bundle?) {
18 | super.onCreate(savedInstanceState)
19 | binding = DataBindingUtil.setContentView(this, R.layout.activity_start)
20 |
21 | binding.btJoin.setOnClickListener {
22 | val intent = Intent(context, RegisterActivity::class.java)
23 | startActivity(intent)
24 | }
25 |
26 | binding.tvLogin.setOnClickListener {
27 | val intent = Intent(context, LoginActivity::class.java)
28 | startActivity(intent)
29 | }
30 | }
31 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/TradeFragment.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui
2 |
3 | import android.os.Bundle
4 | import androidx.fragment.app.Fragment
5 | import android.view.LayoutInflater
6 | import android.view.View
7 | import android.view.ViewGroup
8 | import com.yongjincompany.dsmtcg.R
9 |
10 |
11 | class TradeFragment : Fragment() {
12 | override fun onCreate(savedInstanceState: Bundle?) {
13 | super.onCreate(savedInstanceState)
14 |
15 | }
16 |
17 | override fun onCreateView(
18 | inflater: LayoutInflater, container: ViewGroup?,
19 | savedInstanceState: Bundle?,
20 | ): View? {
21 | return inflater.inflate(R.layout.fragment_trade, container, false)
22 | }
23 |
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/chest/adapter/FreeChestCardAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.chest.adapter
2 |
3 | import android.view.LayoutInflater
4 | import android.view.ViewGroup
5 | import androidx.recyclerview.widget.RecyclerView
6 | import com.yongjincompany.domain.entity.chests.FreeChestOpenEntity
7 | import com.yongjincompany.dsmtcg.databinding.ItemChestBinding
8 | import com.yongjincompany.dsmtcg.extensions.loadFromUrl
9 |
10 | class FreeChestCardAdapter(
11 | private val dataList: ArrayList,
12 | ) : RecyclerView.Adapter() {
13 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
14 | return ViewHolder.from(parent)
15 | }
16 |
17 | override fun onBindViewHolder(holder: ViewHolder, position: Int) {
18 |
19 | val item = dataList[position]
20 |
21 | holder.itemView.setOnClickListener {
22 |
23 | }
24 |
25 | holder.bind(item)
26 | }
27 |
28 | class ViewHolder private constructor(
29 | val binding: ItemChestBinding,
30 | ) :
31 | RecyclerView.ViewHolder(binding.root) {
32 |
33 | fun bind(item: FreeChestOpenEntity.Card) {
34 |
35 | binding.cardName.text = item.cardName
36 | binding.cardGrade.text = item.grade
37 | item.cardImageUrl.let { binding.ivCard.loadFromUrl(it) }
38 |
39 | binding.executePendingBindings()
40 | }
41 |
42 | companion object {
43 | fun from(parent: ViewGroup): ViewHolder {
44 | val layoutInflater = LayoutInflater.from(parent.context)
45 | val binding = ItemChestBinding.inflate(layoutInflater, parent, false)
46 | return ViewHolder(binding)
47 | }
48 | }
49 | }
50 |
51 | override fun getItemCount() = dataList.size
52 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/chest/adapter/SpecialChestCardAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.chest.adapter
2 |
3 | import android.view.LayoutInflater
4 | import android.view.ViewGroup
5 | import androidx.recyclerview.widget.RecyclerView
6 | import com.yongjincompany.domain.entity.chests.SpecialChestOpenEntity
7 | import com.yongjincompany.dsmtcg.databinding.ItemChestBinding
8 | import com.yongjincompany.dsmtcg.extensions.loadFromUrl
9 |
10 | class SpecialChestCardAdapter(
11 | private val dataList: ArrayList,
12 | ) : RecyclerView.Adapter() {
13 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
14 | return ViewHolder.from(parent)
15 | }
16 |
17 | override fun onBindViewHolder(holder: ViewHolder, position: Int) {
18 |
19 | val item = dataList[position]
20 |
21 | holder.bind(item)
22 | }
23 |
24 | class ViewHolder private constructor(
25 | val binding: ItemChestBinding,
26 | ) :
27 | RecyclerView.ViewHolder(binding.root) {
28 |
29 | fun bind(item: SpecialChestOpenEntity.Card) {
30 |
31 | binding.cardName.text = item.cardName
32 | binding.cardGrade.text = item.grade
33 | item.cardImageUrl.let { binding.ivCard.loadFromUrl(it) }
34 |
35 | binding.executePendingBindings()
36 | }
37 |
38 | companion object {
39 | fun from(parent: ViewGroup): ViewHolder {
40 | val layoutInflater = LayoutInflater.from(parent.context)
41 | val binding = ItemChestBinding.inflate(layoutInflater, parent, false)
42 | return ViewHolder(binding)
43 | }
44 | }
45 | }
46 |
47 | override fun getItemCount() = dataList.size
48 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/home/setting/InfoActivity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.home.setting
2 |
3 | import android.os.Bundle
4 | import com.yongjincompany.dsmtcg.R
5 | import com.yongjincompany.dsmtcg.base.BaseActivity
6 | import com.yongjincompany.dsmtcg.databinding.ActivityInfoBinding
7 |
8 | class InfoActivity: BaseActivity(
9 | R.layout.activity_info
10 | ) {
11 | override fun onCreate(savedInstanceState: Bundle?) {
12 | super.onCreate(savedInstanceState)
13 |
14 | }
15 | override fun initView() {
16 |
17 | }
18 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/home/setting/SettingActivity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.home.setting
2 |
3 | import android.content.Intent
4 | import android.os.Bundle
5 | import androidx.activity.viewModels
6 | import com.gun0912.tedpermission.provider.TedPermissionProvider
7 | import com.yongjincompany.dsmtcg.R
8 | import com.yongjincompany.dsmtcg.base.BaseActivity
9 | import com.yongjincompany.dsmtcg.databinding.ActivitySettingBinding
10 | import com.yongjincompany.dsmtcg.extensions.repeatOnStarted
11 | import com.yongjincompany.dsmtcg.ui.StartActivity
12 | import com.yongjincompany.dsmtcg.viewmodel.setting.LogOutViewModel
13 | import dagger.hilt.android.AndroidEntryPoint
14 |
15 | @AndroidEntryPoint
16 | class SettingActivity : BaseActivity(
17 | R.layout.activity_setting
18 | ) {
19 | private val vm: LogOutViewModel by viewModels()
20 | override fun onCreate(savedInstanceState: Bundle?) {
21 | super.onCreate(savedInstanceState)
22 |
23 | binding.logout.setOnClickListener {
24 | vm.logOut()
25 | }
26 |
27 | repeatOnStarted {
28 | vm.eventFlow.collect { event -> handleEvent(event) }
29 | }
30 | }
31 |
32 | private fun handleEvent(event: LogOutViewModel.Event) = when (event) {
33 | is LogOutViewModel.Event.LogOut -> {
34 | val intent = Intent(TedPermissionProvider.context, StartActivity::class.java)
35 | finishAffinity()
36 | startActivity(intent)
37 | }
38 |
39 | is LogOutViewModel.Event.LogOutFailed -> showShortToast("로그아웃에 실패하셨습니다")
40 | }
41 |
42 | override fun initView() {
43 | binding.ivBack.setOnClickListener {
44 | finish()
45 | }
46 | binding.myInfo.setOnClickListener {
47 | val intent = Intent(this, InfoActivity::class.java)
48 | startActivity(intent)
49 | }
50 | }
51 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/mycard/CardDetailActivity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.mycard
2 |
3 | import android.os.Bundle
4 | import com.yongjincompany.dsmtcg.R
5 | import com.yongjincompany.dsmtcg.base.BaseActivity
6 | import com.yongjincompany.dsmtcg.databinding.ActivityCardDetailBinding
7 | import com.yongjincompany.dsmtcg.extensions.loadFromUrl
8 |
9 | class CardDetailActivity : BaseActivity(
10 | R.layout.activity_card_detail
11 | ) {
12 | private var description: String = ""
13 | private var name: String = ""
14 | private var grade: String = ""
15 | private var cardImage: String = ""
16 |
17 | override fun onCreate(savedInstanceState: Bundle?) {
18 | super.onCreate(savedInstanceState)
19 |
20 | description = intent.getStringExtra("DESCRIPTION").toString()
21 | name = intent.getStringExtra("NAME").toString()
22 | grade = intent.getStringExtra("GRADE").toString()
23 | cardImage = intent.getStringExtra("CARD_IMAGE").toString()
24 | binding.ivCard.loadFromUrl(cardImage)
25 | binding.cardExplain.text = description
26 | binding.cardName2.text = name
27 | binding.cardGrade2.text = grade
28 |
29 | }
30 |
31 | override fun initView() {
32 |
33 | binding.ivExit.setOnClickListener {
34 | finish()
35 | }
36 | }
37 |
38 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/rank/adapter/RankAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.rank.adapter
2 |
3 | import android.view.LayoutInflater
4 | import android.view.ViewGroup
5 | import androidx.recyclerview.widget.RecyclerView
6 | import com.yongjincompany.domain.entity.chests.FreeChestOpenEntity
7 | import com.yongjincompany.domain.entity.ranks.FetchRankEntity
8 | import com.yongjincompany.dsmtcg.databinding.ItemChestBinding
9 | import com.yongjincompany.dsmtcg.databinding.ItemRankBinding
10 | import com.yongjincompany.dsmtcg.extensions.loadFromUrl
11 |
12 | class RankAdapter(
13 | private val dataList: ArrayList,
14 | ) : RecyclerView.Adapter() {
15 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
16 | return ViewHolder.from(parent)
17 | }
18 |
19 | override fun onBindViewHolder(holder: ViewHolder, position: Int) {
20 |
21 | val item = dataList[position]
22 |
23 | holder.bind(item)
24 | }
25 |
26 | class ViewHolder private constructor(
27 | val binding: ItemRankBinding,
28 | ) :
29 | RecyclerView.ViewHolder(binding.root) {
30 |
31 | fun bind(item: FetchRankEntity.Rank) {
32 |
33 | binding.tvWalkCount.text = item.accountId
34 | binding.tvName.text = item.name
35 | item.profileImageUrl.let { binding.ivProfileImage.loadFromUrl(it) }
36 |
37 | binding.executePendingBindings()
38 | }
39 |
40 | companion object {
41 | fun from(parent: ViewGroup): ViewHolder {
42 | val layoutInflater = LayoutInflater.from(parent.context)
43 | val binding = ItemRankBinding.inflate(layoutInflater, parent, false)
44 | return ViewHolder(binding)
45 | }
46 | }
47 | }
48 |
49 | override fun getItemCount() = dataList.size
50 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/register/RegisterActivity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.register
2 |
3 | import android.content.Intent
4 | import android.os.Bundle
5 | import androidx.activity.viewModels
6 | import com.yongjincompany.dsmtcg.R
7 | import com.yongjincompany.dsmtcg.base.BaseActivity
8 | import com.yongjincompany.dsmtcg.databinding.ActivityRegisterBinding
9 | import com.yongjincompany.dsmtcg.extensions.repeatOnStarted
10 | import com.yongjincompany.dsmtcg.ui.MainActivity
11 | import com.yongjincompany.dsmtcg.viewmodel.register.RegisterViewModel
12 | import dagger.hilt.android.AndroidEntryPoint
13 |
14 | @AndroidEntryPoint
15 | class RegisterActivity : BaseActivity(
16 | R.layout.activity_register
17 | ) {
18 | private val vm: RegisterViewModel by viewModels()
19 |
20 | override fun onCreate(savedInstanceState: Bundle?) {
21 | super.onCreate(savedInstanceState)
22 |
23 | binding.ibBack.setOnClickListener {
24 | finish()
25 | }
26 |
27 | binding.btContinue.setOnClickListener {
28 | val accountId: String = binding.etId.text.toString()
29 | val password: String = binding.etPassword.text.toString()
30 | val name: String = binding.etName.text.toString()
31 | vm.register(accountId, password, name)
32 | }
33 |
34 | repeatOnStarted {
35 | vm.eventFlow.collect { event -> handleEvent(event) }
36 | }
37 | }
38 |
39 | private fun handleEvent(event: RegisterViewModel.Event) = when (event) {
40 | is RegisterViewModel.Event.SuccessRegister -> {
41 | val intent = Intent(this, MainActivity::class.java)
42 | .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
43 | startActivity(intent)
44 |
45 | showShortToast("회원가입을 성공적으로 완료하였습니다!")
46 | }
47 |
48 | is RegisterViewModel.Event.ErrorMessage -> showShortToast(event.message)
49 |
50 | is RegisterViewModel.Event.BadRequest -> showShortToast("비밀번호에는 특수문자가 포함되어야합니다.")
51 |
52 | is RegisterViewModel.Event.Conflict -> showShortToast("이미 회원가입이 완료된 전화번호입니다.")
53 |
54 | is RegisterViewModel.Event.UnKnown -> showShortToast("알 수 없는 오류가 발생하였습니다.")
55 | }
56 |
57 | override fun initView() {
58 |
59 | }
60 |
61 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/shop/cardpack/adapter/GoldChestCardAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.shop.cardpack.adapter
2 |
3 | import android.view.LayoutInflater
4 | import android.view.ViewGroup
5 | import androidx.recyclerview.widget.RecyclerView
6 | import com.yongjincompany.domain.entity.chests.GoldChestOpenEntity
7 | import com.yongjincompany.domain.entity.chests.SilverChestOpenEntity
8 | import com.yongjincompany.domain.entity.chests.SpecialChestOpenEntity
9 | import com.yongjincompany.dsmtcg.databinding.ItemChestBinding
10 | import com.yongjincompany.dsmtcg.extensions.loadFromUrl
11 |
12 | class GoldChestCardAdapter(
13 | private val dataList: ArrayList,
14 | ) : RecyclerView.Adapter() {
15 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
16 | return ViewHolder.from(parent)
17 | }
18 |
19 | override fun onBindViewHolder(holder: ViewHolder, position: Int) {
20 |
21 | val item = dataList[position]
22 |
23 | holder.bind(item)
24 | }
25 |
26 | class ViewHolder private constructor(
27 | val binding: ItemChestBinding,
28 | ) : RecyclerView.ViewHolder(binding.root) {
29 |
30 | fun bind(item: GoldChestOpenEntity.Card) {
31 |
32 | binding.cardName.text = item.cardName
33 | binding.cardGrade.text = item.grade
34 | item.cardImageUrl.let { binding.ivCard.loadFromUrl(it) }
35 |
36 | binding.executePendingBindings()
37 | }
38 |
39 | companion object {
40 | fun from(parent: ViewGroup): ViewHolder {
41 | val layoutInflater = LayoutInflater.from(parent.context)
42 | val binding = ItemChestBinding.inflate(layoutInflater, parent, false)
43 | return ViewHolder(binding)
44 | }
45 | }
46 | }
47 |
48 | override fun getItemCount() = dataList.size
49 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/shop/cardpack/adapter/LegendChestCardAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.shop.cardpack.adapter
2 |
3 | import android.view.LayoutInflater
4 | import android.view.ViewGroup
5 | import androidx.recyclerview.widget.RecyclerView
6 | import com.yongjincompany.domain.entity.chests.LegendChestOpenEntity
7 | import com.yongjincompany.dsmtcg.databinding.ItemChestBinding
8 | import com.yongjincompany.dsmtcg.extensions.loadFromUrl
9 |
10 | class LegendChestCardAdapter(
11 | private val dataList: ArrayList,
12 | ) : RecyclerView.Adapter() {
13 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
14 | return ViewHolder.from(parent)
15 | }
16 |
17 | override fun onBindViewHolder(holder: ViewHolder, position: Int) {
18 |
19 | val item = dataList[position]
20 |
21 | holder.bind(item)
22 | }
23 |
24 | class ViewHolder private constructor(
25 | val binding: ItemChestBinding,
26 | ) : RecyclerView.ViewHolder(binding.root) {
27 |
28 | fun bind(item: LegendChestOpenEntity.Card) {
29 |
30 | binding.cardName.text = item.cardName
31 | binding.cardGrade.text = item.grade
32 | item.cardImageUrl.let { binding.ivCard.loadFromUrl(it) }
33 |
34 | binding.executePendingBindings()
35 | }
36 |
37 | companion object {
38 | fun from(parent: ViewGroup): ViewHolder {
39 | val layoutInflater = LayoutInflater.from(parent.context)
40 | val binding = ItemChestBinding.inflate(layoutInflater, parent, false)
41 | return ViewHolder(binding)
42 | }
43 | }
44 | }
45 |
46 | override fun getItemCount() = dataList.size
47 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/shop/cardpack/adapter/SilverChestCardAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.shop.cardpack.adapter
2 |
3 | import android.view.LayoutInflater
4 | import android.view.ViewGroup
5 | import androidx.recyclerview.widget.RecyclerView
6 | import com.yongjincompany.domain.entity.chests.SilverChestOpenEntity
7 | import com.yongjincompany.domain.entity.chests.SpecialChestOpenEntity
8 | import com.yongjincompany.dsmtcg.databinding.ItemChestBinding
9 | import com.yongjincompany.dsmtcg.extensions.loadFromUrl
10 |
11 | class SilverChestCardAdapter(
12 | private val dataList: ArrayList,
13 | ) : RecyclerView.Adapter() {
14 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
15 | return ViewHolder.from(parent)
16 | }
17 |
18 | override fun onBindViewHolder(holder: ViewHolder, position: Int) {
19 |
20 | val item = dataList[position]
21 |
22 | holder.bind(item)
23 | }
24 |
25 | class ViewHolder private constructor(
26 | val binding: ItemChestBinding,
27 | ) :
28 | RecyclerView.ViewHolder(binding.root) {
29 |
30 | fun bind(item: SilverChestOpenEntity.Card) {
31 |
32 | binding.cardName.text = item.cardName
33 | binding.cardGrade.text = item.grade
34 | item.cardImageUrl.let { binding.ivCard.loadFromUrl(it) }
35 |
36 | binding.executePendingBindings()
37 | }
38 |
39 | companion object {
40 | fun from(parent: ViewGroup): ViewHolder {
41 | val layoutInflater = LayoutInflater.from(parent.context)
42 | val binding = ItemChestBinding.inflate(layoutInflater, parent, false)
43 | return ViewHolder(binding)
44 | }
45 | }
46 | }
47 |
48 | override fun getItemCount() = dataList.size
49 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/ui/splash/SplashActivity.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.ui.splash
2 |
3 | import android.os.Bundle
4 | import androidx.activity.ComponentActivity
5 | import androidx.activity.compose.setContent
6 | import dagger.hilt.android.AndroidEntryPoint
7 |
8 | @AndroidEntryPoint
9 | class SplashActivity : ComponentActivity() {
10 | override fun onCreate(savedInstanceState: Bundle?) {
11 | super.onCreate(savedInstanceState)
12 | setContent {
13 | Splash()
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/util/BindingViewHolder.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.util
2 |
3 | import androidx.databinding.ViewDataBinding
4 | import androidx.lifecycle.LifecycleOwner
5 | import androidx.recyclerview.widget.RecyclerView
6 |
7 | class BindingViewHolder(val binding: ViewDataBinding): RecyclerView.ViewHolder(binding.root){
8 | fun setLifeCycleOwner(lifecycleOwner: LifecycleOwner) {
9 | binding.lifecycleOwner = lifecycleOwner
10 | }
11 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/util/DSMTCGExceptionHandler.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.util
2 |
3 | import android.app.Activity
4 | import android.app.Application
5 | import android.content.Intent
6 | import android.os.Bundle
7 | import android.os.Process
8 | import com.yongjincompany.domain.exception.NeedLoginException
9 | import com.yongjincompany.dsmtcg.ui.StartActivity
10 | import kotlin.system.exitProcess
11 |
12 | class DSMTCGExceptionHandler(
13 | application: Application,
14 | private val crashlyticsExceptionHandler: Thread.UncaughtExceptionHandler
15 | ) : Thread.UncaughtExceptionHandler {
16 |
17 | private var lastActivity: Activity? = null
18 | private var activityCount = 0
19 |
20 | init {
21 | application.registerActivityLifecycleCallbacks(
22 | object : Application.ActivityLifecycleCallbacks {
23 |
24 | override fun onActivityCreated(p0: Activity, p1: Bundle?) {
25 | lastActivity = p0
26 | }
27 |
28 | override fun onActivityStarted(p0: Activity) {
29 | activityCount++
30 | lastActivity = p0
31 | }
32 |
33 | override fun onActivityStopped(p0: Activity) {
34 | activityCount--
35 | if (activityCount < 0) lastActivity = null
36 | }
37 |
38 | override fun onActivityResumed(p0: Activity) {}
39 |
40 | override fun onActivityPaused(p0: Activity) {}
41 |
42 | override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {}
43 |
44 | override fun onActivityDestroyed(p0: Activity) {}
45 | }
46 | )
47 | }
48 |
49 | override fun uncaughtException(p0: Thread, p1: Throwable) {
50 | if (p1 is NeedLoginException) {
51 | lastActivity?.run {
52 | startHomeActivity(this)
53 | }
54 | }
55 | crashlyticsExceptionHandler.uncaughtException(p0, p1)
56 | Process.killProcess(Process.myPid())
57 | exitProcess(-1)
58 | }
59 |
60 | private fun startHomeActivity(activity: Activity) = activity.run {
61 | val intent = Intent(this, StartActivity::class.java)
62 | .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
63 | startActivity(intent)
64 | finish()
65 | }
66 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/util/EventFlow.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.util
2 |
3 | import kotlinx.coroutines.flow.Flow
4 | import kotlinx.coroutines.flow.FlowCollector
5 | import kotlinx.coroutines.flow.MutableSharedFlow
6 | import java.util.concurrent.atomic.AtomicBoolean
7 |
8 | interface EventFlow : Flow {
9 |
10 | companion object {
11 |
12 | const val DEFAULT_REPLAY: Int = 3
13 | }
14 | }
15 |
16 | interface MutableEventFlow : EventFlow, FlowCollector
17 |
18 | @Suppress("FunctionName")
19 | fun MutableEventFlow(
20 | replay: Int = EventFlow.DEFAULT_REPLAY
21 | ): MutableEventFlow = EventFlowImpl(replay)
22 |
23 | fun MutableEventFlow.asEventFlow(): EventFlow = ReadOnlyEventFlow(this)
24 |
25 | private class ReadOnlyEventFlow(flow: EventFlow) : EventFlow by flow
26 |
27 | private class EventFlowImpl(
28 | replay: Int
29 | ) : MutableEventFlow {
30 |
31 | private val flow: MutableSharedFlow> = MutableSharedFlow(replay = replay)
32 |
33 | override suspend fun collect(collector: FlowCollector) = flow
34 | .collect { slot ->
35 | if (!slot.markConsumed()) {
36 | collector.emit(slot.value)
37 | }
38 | }
39 |
40 | override suspend fun emit(value: T) {
41 | flow.emit(EventFlowSlot(value))
42 | }
43 | }
44 |
45 | private class EventFlowSlot(val value: T) {
46 |
47 | private val consumed: AtomicBoolean = AtomicBoolean(false)
48 |
49 | fun markConsumed(): Boolean = consumed.getAndSet(true)
50 | }
51 |
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/util/RecyclerViewAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.util
2 |
3 | import android.view.LayoutInflater
4 | import android.view.ViewGroup
5 | import androidx.databinding.DataBindingUtil
6 | import androidx.databinding.ViewDataBinding
7 | import androidx.recyclerview.widget.RecyclerView
8 |
9 | class RecyclerViewAdapter : RecyclerView.Adapter() {
10 |
11 | private val items = mutableListOf()
12 | override fun onCreateViewHolder(parent: ViewGroup, layoutId: Int): BindingViewHolder {
13 | val inflater = LayoutInflater.from(parent.context)
14 | val binding: ViewDataBinding = DataBindingUtil.inflate(inflater, layoutId, parent, false)
15 | return BindingViewHolder(binding)
16 | }
17 |
18 | override fun onBindViewHolder(holder: BindingViewHolder, position: Int) {
19 | items[position].bind(holder.binding)
20 | holder.binding.executePendingBindings()
21 | }
22 |
23 | override fun getItemCount(): Int {
24 | return items.size
25 | }
26 |
27 | override fun getItemViewType(position: Int): Int {
28 | return items[position].itemLayoutId
29 | }
30 |
31 | fun updateData(newItems: List) {
32 | this.items.clear()
33 | this.items.addAll(newItems)
34 | notifyDataSetChanged()
35 | }
36 |
37 | fun addData(newItem: RecyclerViewItem) {
38 | this.items.add(newItem)
39 | notifyDataSetChanged()
40 | }
41 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/util/RecyclerViewItem.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.util
2 |
3 | import androidx.annotation.LayoutRes
4 | import androidx.databinding.ViewDataBinding
5 |
6 | data class RecyclerViewItem(
7 | @LayoutRes val itemLayoutId: Int,
8 | val data: Any?,
9 | val variableId: Int
10 | ) {
11 | fun bind(binding: ViewDataBinding) {
12 | binding.setVariable(variableId, data)
13 | }
14 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/viewmodel/login/LoginViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.viewmodel.login
2 |
3 | import androidx.lifecycle.ViewModel
4 | import androidx.lifecycle.viewModelScope
5 | import com.yongjincompany.domain.exception.BadRequestException
6 | import com.yongjincompany.domain.exception.NoInternetException
7 | import com.yongjincompany.domain.exception.NotFoundException
8 | import com.yongjincompany.domain.exception.UnauthorizedException
9 | import com.yongjincompany.domain.param.user.PostUserSignInParam
10 | import com.yongjincompany.domain.usecase.user.PostUserSignInUseCase
11 | import com.yongjincompany.dsmtcg.util.MutableEventFlow
12 | import com.yongjincompany.dsmtcg.util.asEventFlow
13 | import dagger.hilt.android.lifecycle.HiltViewModel
14 | import kotlinx.coroutines.Dispatchers
15 | import kotlinx.coroutines.launch
16 | import kotlinx.coroutines.withContext
17 | import javax.inject.Inject
18 |
19 | @HiltViewModel
20 | class LoginViewModel @Inject constructor(
21 | private val postUserSignInUseCase: PostUserSignInUseCase
22 | ) : ViewModel() {
23 |
24 | private val _eventFlow = MutableEventFlow()
25 | val eventFlow = _eventFlow.asEventFlow()
26 |
27 | fun postLogin(accountId: String, password: String) {
28 | viewModelScope.launch() {
29 | kotlin.runCatching {
30 | withContext(Dispatchers.Default) {
31 | postUserSignInUseCase.execute(PostUserSignInParam(accountId, password))
32 | }
33 | }.onSuccess {
34 | event(Event.LoginSuccess)
35 | }.onFailure {
36 | when (it) {
37 | is NoInternetException -> event(Event.NoInternet)
38 | is BadRequestException -> event(Event.BadRequest)
39 | is NotFoundException -> event(Event.WrongAccount)
40 | else -> event(Event.UnknownError)
41 | }
42 | }
43 | }
44 | }
45 |
46 | private fun event(event: Event) {
47 | viewModelScope.launch {
48 | _eventFlow.emit(event)
49 | }
50 | }
51 |
52 | sealed class Event {
53 | object LoginSuccess : Event()
54 | object BadRequest : Event()
55 | object WrongAccount : Event()
56 | object NoInternet : Event()
57 | object UnknownError : Event()
58 | }
59 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/viewmodel/register/RegisterViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.viewmodel.register
2 |
3 | import androidx.compose.compiler.plugins.kotlin.EmptyFunctionMetrics.name
4 | import androidx.lifecycle.ViewModel
5 | import androidx.lifecycle.viewModelScope
6 | import com.yongjincompany.domain.exception.BadRequestException
7 | import com.yongjincompany.domain.exception.ConflictException
8 | import com.yongjincompany.domain.param.user.PostUserRegisterParam
9 | import com.yongjincompany.domain.usecase.user.PostUserRegisterUseCase
10 | import com.yongjincompany.dsmtcg.util.MutableEventFlow
11 | import com.yongjincompany.dsmtcg.util.asEventFlow
12 | import dagger.hilt.android.lifecycle.HiltViewModel
13 | import kotlinx.coroutines.launch
14 | import javax.inject.Inject
15 |
16 | @HiltViewModel
17 | class RegisterViewModel @Inject constructor(
18 | private val postUserRegisterUseCase: PostUserRegisterUseCase,
19 | ) : ViewModel() {
20 |
21 | private val _eventFlow = MutableEventFlow()
22 | val eventFlow = _eventFlow.asEventFlow()
23 |
24 | fun register(accountId: String, password: String, name: String) {
25 | viewModelScope.launch {
26 | kotlin.runCatching {
27 | postUserRegisterUseCase.execute(PostUserRegisterParam(
28 | accountId = accountId,
29 | password = password,
30 | name = name,
31 | ))
32 | }.onSuccess {
33 | event((Event.SuccessRegister(true)))
34 | }.onFailure {
35 | when (it) {
36 | is BadRequestException -> event(Event.BadRequest)
37 | is ConflictException -> event(Event.Conflict)
38 | else -> event(Event.UnKnown)
39 | }
40 | }
41 | }
42 | }
43 |
44 | private fun event(event: Event) {
45 | viewModelScope.launch {
46 | _eventFlow.emit(event)
47 | }
48 | }
49 |
50 | sealed class Event {
51 | data class SuccessRegister(var state: Boolean = false) : Event()
52 | object BadRequest : Event()
53 | object Conflict : Event()
54 | object UnKnown : Event()
55 | data class ErrorMessage(val message: String) : Event()
56 | }
57 |
58 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/viewmodel/room/RoomViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.viewmodel.room
2 |
3 | import androidx.lifecycle.ViewModel
4 | import androidx.lifecycle.viewModelScope
5 | import com.yongjincompany.domain.entity.rooms.FetchRoomEntity
6 | import com.yongjincompany.domain.exception.UnauthorizedException
7 | import com.yongjincompany.domain.usecase.room.FetchRoomsUseCase
8 | import com.yongjincompany.dsmtcg.util.MutableEventFlow
9 | import com.yongjincompany.dsmtcg.util.asEventFlow
10 | import kotlinx.coroutines.launch
11 | import javax.inject.Inject
12 |
13 | class RoomViewModel @Inject constructor(
14 | private val fetchRoomsUseCase: FetchRoomsUseCase
15 | ) : ViewModel() {
16 | private val _eventFlow = MutableEventFlow()
17 | val eventFlow = _eventFlow.asEventFlow()
18 |
19 | fun fetchRoomValue() {
20 | viewModelScope.launch {
21 | kotlin.runCatching {
22 | fetchRoomsUseCase.execute(Unit).collect {
23 | event(RoomViewModel.Event.FetchRoom(it.toData()))
24 | }
25 | }.onFailure {
26 | when (it) {
27 | is UnauthorizedException -> event(RoomViewModel.Event.ErrorMessage("토큰이 만료되었습니다. 다시 로그인해주세요."))
28 | else -> event(RoomViewModel.Event.ErrorMessage("알 수 없는 에러가 발생했습니다."))
29 | }
30 | }
31 | }
32 |
33 | }
34 |
35 | private fun FetchRoomEntity.toData() =
36 | FetchRoomEntity(
37 | roomList.map { it.toData() }
38 | )
39 |
40 | private fun FetchRoomEntity.Room.toData() =
41 | FetchRoomEntity.Room(
42 | roomId = roomId,
43 | roomName = roomName,
44 | profileImage = profileImage,
45 | userName = userName,
46 | )
47 |
48 | private fun event(event: Event) {
49 | viewModelScope.launch {
50 | _eventFlow.emit(event)
51 | }
52 | }
53 |
54 | sealed class Event {
55 | data class FetchRoom(val fetchRoomEntity: FetchRoomEntity) : Event()
56 | data class ErrorMessage(val message: String) : Event()
57 | }
58 |
59 | }
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/viewmodel/setting/LogOutViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.viewmodel.setting
2 |
3 | import androidx.lifecycle.ViewModel
4 | import androidx.lifecycle.viewModelScope
5 | import com.yongjincompany.domain.exception.UnauthorizedException
6 | import com.yongjincompany.domain.usecase.user.LogOutUseCase
7 | import com.yongjincompany.dsmtcg.util.MutableEventFlow
8 | import com.yongjincompany.dsmtcg.util.asEventFlow
9 | import dagger.hilt.android.lifecycle.HiltViewModel
10 | import kotlinx.coroutines.launch
11 | import javax.inject.Inject
12 |
13 | @HiltViewModel
14 | class LogOutViewModel @Inject constructor(
15 | private val logOutUseCase: LogOutUseCase
16 | ) : ViewModel() {
17 | private val _eventFlow = MutableEventFlow()
18 | val eventFlow = _eventFlow.asEventFlow()
19 |
20 | fun logOut() {
21 | viewModelScope.launch {
22 | kotlin.runCatching {
23 | logOutUseCase.execute(Unit)
24 | }.onSuccess {
25 | event(Event.LogOut)
26 | }.onFailure {
27 | event(Event.LogOutFailed)
28 | }
29 | }
30 | }
31 |
32 | private fun event(event: Event) {
33 | viewModelScope.launch {
34 | _eventFlow.emit(event)
35 | }
36 | }
37 |
38 | sealed class Event {
39 | object LogOut : Event()
40 | object LogOutFailed : Event()
41 | }
42 | }
43 |
44 |
--------------------------------------------------------------------------------
/presentation/src/main/java/com/yongjincompany/dsmtcg/viewmodel/splash/SplashViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg.viewmodel.splash
2 |
3 | import androidx.lifecycle.ViewModel
4 | import androidx.lifecycle.viewModelScope
5 | import com.yongjincompany.domain.usecase.user.AutoLoginUseCase
6 | import com.yongjincompany.dsmtcg.util.MutableEventFlow
7 | import com.yongjincompany.dsmtcg.util.asEventFlow
8 | import dagger.hilt.android.lifecycle.HiltViewModel
9 | import kotlinx.coroutines.launch
10 | import javax.inject.Inject
11 |
12 | @HiltViewModel
13 | class SplashViewModel @Inject constructor(
14 | private val autoLoginUseCase: AutoLoginUseCase
15 | ) : ViewModel() {
16 |
17 | private val _eventFlow = MutableEventFlow()
18 | val eventFlow = _eventFlow.asEventFlow()
19 |
20 | fun autoLogin() = viewModelScope.launch {
21 | kotlin.runCatching {
22 | autoLoginUseCase.execute(Unit)
23 | }.onSuccess {
24 | emitEvent(Event.AutoLoginSuccess)
25 | }.onFailure {
26 | emitEvent(Event.NeedLogin)
27 | }
28 |
29 | }
30 |
31 | private suspend fun emitEvent(event: Event) {
32 | _eventFlow.emit(event)
33 | }
34 |
35 | sealed class Event {
36 | object AutoLoginSuccess : Event()
37 | object NeedLogin : Event()
38 | }
39 | }
--------------------------------------------------------------------------------
/presentation/src/main/res/color/selector_bnv_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable-v24/dsm_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable-v24/dsm_logo.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
15 |
18 |
21 |
22 |
23 |
24 |
30 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/all_back.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/all_back.jpg
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/arena.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/arena.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/bamboo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/bamboo.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/bamboo_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
12 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/card_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/chest_back.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/chest_back.gif
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/circle_btn.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
9 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/ddong_card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/ddong_card.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/editext_back.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/free_card_pack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/free_card_pack.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/free_chest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/free_chest.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/gradient_animation.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
9 |
10 |
12 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/gradient_center.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
10 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/gradient_end.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
10 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/gradient_start.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
10 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/ic_card.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/ic_exit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/ic_exit.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/ic_home.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/ic_round.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/ic_setting.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/ic_tournament.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/ic_tournament.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/img.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/jinsung.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/jinsung.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/label.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/leagend_card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/leagend_card.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/logo.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/logo2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/logo2.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/logo_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/logo_round.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/menu_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
9 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/my_card_back.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
9 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/next_card_back.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/person.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/person.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/rank_cup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/rank_cup.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/register_btn.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
11 |
12 |
15 |
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/rose_card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/rose_card.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/shopkeeper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/shopkeeper.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/special_card_pack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/special_card_pack.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/special_chest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/drawable/special_chest.png
--------------------------------------------------------------------------------
/presentation/src/main/res/drawable/trade_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
12 |
--------------------------------------------------------------------------------
/presentation/src/main/res/font/nanumsquare_aceb.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/font/nanumsquare_aceb.ttf
--------------------------------------------------------------------------------
/presentation/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
11 |
12 |
13 |
18 |
19 |
33 |
34 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/presentation/src/main/res/layout/fragment_trade.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/presentation/src/main/res/layout/item_room.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
10 |
11 |
15 |
16 |
24 |
25 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/presentation/src/main/res/menu/bottom_nav_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-hdpi/ic_main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-hdpi/ic_main.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-mdpi/ic_main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-mdpi/ic_main.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-xhdpi/ic_main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-xhdpi/ic_main.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-xxhdpi/ic_main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-xxhdpi/ic_main.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/presentation/src/main/res/mipmap-xxxhdpi/ic_main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YouGoodBackEnd/DSM-TCG-Android/7d8aef77eed40b6971c75acb5bba0d7a260d443e/presentation/src/main/res/mipmap-xxxhdpi/ic_main.png
--------------------------------------------------------------------------------
/presentation/src/main/res/navigation/mobile_navigation.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
19 |
20 |
25 |
--------------------------------------------------------------------------------
/presentation/src/main/res/values-night/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/presentation/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFBB86FC
4 | #FF6200EE
5 | #FF3700B3
6 | #FF03DAC5
7 | #FF018786
8 | #FF000000
9 | #FFFFFFFF
10 | #73AAAA
11 | #009999
12 | #424242
13 | #757575
14 |
15 | #00ffffff
16 | #4CAF50
17 | #CDDC39
18 | #FF9800
19 |
--------------------------------------------------------------------------------
/presentation/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #E7E7E7
4 |
--------------------------------------------------------------------------------
/presentation/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | DSMTCG
3 |
--------------------------------------------------------------------------------
/presentation/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/presentation/src/test/java/com/yongjincompany/dsmtcg/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package com.yongjincompany.dsmtcg
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | dependencyResolutionManagement {
2 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
3 | repositories {
4 | google()
5 | mavenCentral()
6 | jcenter() // Warning: this repository is going to shut down soon
7 | }
8 | }
9 | rootProject.name = "DSMTCG"
10 | include ':presentation'
11 | include ':data'
12 | include ':domain'
13 |
--------------------------------------------------------------------------------