Skip to content

Commit 5730d6c

Browse files
authored
Merge branch 'develop' into feat/running_tab
2 parents 3f60444 + a03f646 commit 5730d6c

File tree

79 files changed

+1713
-882
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+1713
-882
lines changed

README.md

Lines changed: 79 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
[![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fboostcampwm-2022%2Fandroid05-MoGakRun&count_bg=%239CBF87&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false)](https://hits.seeyoufarm.com)
55

66

7+
78
# MoGakRun
89
<img height="250" src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png"></img>
9-
> **_모여서 각자 달려 볼까?~ 🏃‍♂️🏃‍♀️, MoGakRun_** <br/><br/>
10+
> **_모여서 각자 달려 볼까?~ 🏃‍♂️🏃‍♀️ with MoGakRun_** <br/><br/>
1011
> **개발기간: 2021.11.07 ~ 2021.12.16**
1112
1213
<br/>
@@ -17,21 +18,21 @@
1718

1819
__모각런__ 은 친구들과 함께 러닝 그룹을 형성하고 규칙에 맞춰
1920

20-
**각자** 러닝을 즐길 수 있게 도와주는 당신의 러닝메이트입니다.
21+
__모여서 각자 러닝__ 즐길 수 있게 도와주는 당신의 러닝메이트입니다.
2122

2223
<br/>
2324

24-
## 🌳 이거 왜 안돼로이더(Whyranoid) 🌳
25+
## 😎 이거 왜 안돼로이더(Whyranoid)
2526

26-
|K022 소병희|S023 신승민|K046 전현수|K051 주용한|
27+
|K022 소병희|K023 신승민|K046 전현수|K051 주용한|
2728
|:-:|:-:|:-:|:-:|
2829
|<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=200 style="border-radius:100%" >|<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=200 style="border-radius:100%" >|<img src="https://user-images.githubusercontent.com/65655825/204988296-fc8e10b8-aabf-485c-9c6a-73346c09910a.jpg" width=200 style="border-radius:100%" >|<img src="https://user-images.githubusercontent.com/65655825/204987646-91eb987b-1a66-4f39-b4f4-0aae6a2b9368.png" width=200 style="border-radius:100%" >|
2930
|[@bngsh](https://github.com/bngsh)|[@Seungmin-develop](https://github.com/Seungmin-develop)|[@soopeach](https://github.com/devjungwonlee)|[@yonghanJu](https://github.com/yonghanJu)|
3031

3132

3233
<br/>
3334

34-
## ⚙️ 개발환경 및 라이브러리
35+
## ⚙️ 개발환경 및 라이브러리
3536

3637
<p align="center">
3738
<img src="https://img.shields.io/badge/Kotlin-1.9.0-yellowgreen?logo=kotlin"/>
@@ -42,18 +43,81 @@ __모각런__ 은 친구들과 함께 러닝 그룹을 형성하고 규칙에
4243

4344
| Purpose | Library |
4445
| ------------------------------------------------------------ | ------------------------------------------------------- |
45-
| 백그라운드 작업 | Jetpack Work Manager |
46-
| 비동기 작업 | Flow, Shared Flow, State Flow, Coroutine |
47-
| 의존성 주입 | Hilt |
46+
| Background Task | Jetpack Work Manager |
47+
| Async Task | Flow, Shared Flow, State Flow, Coroutine |
48+
| Dependecy Injection | Hilt |
4849
| CI | GitAction |
49-
| 로깅 | Timber |
50-
| 페이징 | Paging3 |
51-
| 메모리 관리 | LeakCanary |
52-
| 데이터베이스 로컬 | Room, PreferenceDataStore |
53-
| 데이터베이스 서버 | Firebase FireStore Database, Firebase Storage |
50+
| Logging | Timber |
51+
| Paging | Paging3 |
52+
| Memory Management | LeakCanary |
53+
| Local Database | Room, PreferenceDataStore |
54+
| Server Database | Firebase FireStore Database, Firebase Auth |
5455
| Device | LocationServices, LocationManager, Broadcast Receiver |
55-
| Presentation | Material Design2, Jetpack Navigation, ViewPager2, Lottie, Glide, Shimmer, Naver Map, CalendarView |
56+
| Presentation | Material Design2, Jetpack Navigation, ViewPager2, Lottie, Glide, Shimmer, NaverMap, Kizitonwose Calendar |
57+
58+
<br>
59+
60+
## 📁 프로젝트 주요 기능
61+
62+
> 🔑 Google 계정을 통해 회원가입, 로그인을 할 수 있어요!
63+
64+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%><img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%>
65+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%>
66+
67+
> 🏃 모각런과 함께 운동을 시작해 볼까요?!
68+
69+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%><img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%>
70+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%>
71+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%><img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%>
72+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%>
73+
74+
> 👍 나의 운동 기록을 친구들에게 자랑해보세요!
75+
76+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%><img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%>
77+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%>
78+
79+
> 🙌 그룹원들과 모여서 각자 달려보는건 어떨까요?
80+
81+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=23%><img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=23%>
82+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=23%><img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=23%>
83+
84+
> 😊 나의 운동 기록들을 한눈에 살펴보아요
85+
86+
<img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%><img src="https://user-images.githubusercontent.com/65655825/204984450-cd7aa396-edd6-4d6c-9a72-3ac9253e9675.png" width=30%>
87+
88+
<br/>
89+
<br/>
90+
91+
## 기술적 도전들
92+
93+
### 캘린더를 원하는 형태로 커스텀하고 모듈 라이브러리화 시켜보기!
94+
95+
- 마이런 탭에서 캘린더 뷰를 통해 나의 운동 기록을 한 눈에 보여줍니다. 이때 캘린더에게 요했던 기능들을 커스텀하고 라이브러리화 및 배포를 통해 다른 프로젝트에서 재사용이 가능하도록 만들었습니다.
96+
97+
<br>
98+
99+
### 엄격한 관심사 분리 및 재사용이 가능한 모듈화 분리
100+
101+
- 위 캘린더뷰와 비슷한 맥락으로 엄격한 관심사 분리를 통해 레이어별, 기능별 모듈을 분리해서 내부 프로젝트 또는 외부에서도 재사용이 가능한 모듈 분리를 위해 노력했습니다.
102+
103+
<br>
104+
105+
### 웨어러블 디바이스와 연동
106+
- 기능별 모듈을 분리하는 이유로는 웨어러블 디바이스에서의 재활용이 있습니다! 러닝 앱인 만큼 웨어러블 디바이스와의 연결을 지원하면 좋겠다고 생각을 했고 그러기 위해서는 공유 가능한 기능별 모듈 분리가 필수적이라고 생각했습니다!
107+
108+
<br>
109+
110+
### 단방향 데이터 흐름을 만들기
111+
- Firebase 제공해주는 여러 API들은 콜백 기반이며 이는 data, domain, presentation 레이어에 걸체 단방향 데이터 흐름을 만들기에 힘들고 따라서 가독성이 떨어지고 반응형 프로그래밍 작성이 힘들다고 생각했습니다. 이런 부분들을 개선하기 위해 suspend, flow를 활용해 단방형 데이터 흐름을 만들었습니다.
112+
113+
<br>
114+
115+
### 배포, 유지 보수, Compose로 전환
116+
117+
- 부스트캠프는 "이거 왜 안돼로이더"의 여정의 끝이 아닌 시작입니다.
118+
프로젝트 배포와 유지보수를 목표로하고 있습니다.
119+
서브 브랜치를 통해 WearOS 지원을 위한 코드 분리와 일부 화면 Compose 마이그레이션이 진행 중입니다.
56120

57121
<br>
58122

59-
## 🌟 프로젝트 주요 기능
123+
**[이거 왜 안돼로이더의 개발일지 보러가기!!](https://www.notion.so/6c16bd9841cd452587bf59f96adcaaa4)**

app/build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ plugins {
33
id "org.jetbrains.kotlin.android"
44
id "kotlin-kapt"
55
id "dagger.hilt.android.plugin"
6+
id "com.google.firebase.crashlytics"
67
}
78

89
android {
@@ -65,4 +66,10 @@ dependencies {
6566
// Hilt Worker with Kotlin
6667
implementation "androidx.hilt:hilt-work:$hiltWorkerVersion"
6768
kapt "androidx.hilt:hilt-compiler:$hiltCompilerVersion"
69+
70+
// BoM for the Firebase platform
71+
implementation platform("com.google.firebase:firebase-bom:$firebaseVersion")
72+
73+
// Crashlytics
74+
implementation "com.google.firebase:firebase-crashlytics"
6875
}

build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ buildscript {
77
junitVersion = "4.13.2"
88
junitUiVersion = "1.1.4"
99
espressoCoreVersion = "3.5.0"
10-
firebaseVersion = "31.0.3"
10+
firebaseVersion = "31.1.0"
1111
googleServiceVersion = "4.3.14"
1212
timberVersion = "5.0.1"
1313
leakcanaryVersion = "2.10"
@@ -34,10 +34,12 @@ buildscript {
3434
workManagerVersion = "2.7.1"
3535
hiltWorkerVersion = "1.0.0"
3636
hiltCompilerVersion = "1.0.0"
37+
crashlyticsVersion = "2.9.2"
3738
}
3839
dependencies {
3940
classpath "com.google.gms:google-services:$googleServiceVersion"
4041
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navVersion"
42+
classpath "com.google.firebase:firebase-crashlytics-gradle:$crashlyticsVersion"
4143
}
4244
}
4345

data/src/main/java/com/whyranoid/data/constant/FieldId.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ object FieldId {
44

55
const val GROUP_MEMBERS_ID = "membersId"
66
const val GROUP_ID = "groupId"
7+
const val AUTHOR_ID = "authorId"
78
const val GROUP_NAME = "groupName"
89
const val GROUP_INTRODUCE = "introduce"
910
const val RULES = "rules"

data/src/main/java/com/whyranoid/data/di/GroupModule.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package com.whyranoid.data.di
22

3+
import com.whyranoid.data.group.GroupDataSource
4+
import com.whyranoid.data.group.GroupDataSourceImpl
35
import com.whyranoid.data.group.GroupRepositoryImpl
6+
import com.whyranoid.data.groupnotification.GroupNotificationDataSource
7+
import com.whyranoid.data.groupnotification.GroupNotificationDataSourceImpl
8+
import com.whyranoid.data.user.UserDataSource
9+
import com.whyranoid.data.user.UserDataSourceImpl
410
import com.whyranoid.domain.repository.GroupRepository
511
import dagger.Binds
612
import dagger.Module
@@ -11,6 +17,15 @@ import dagger.hilt.components.SingletonComponent
1117
@InstallIn(SingletonComponent::class)
1218
abstract class GroupModule {
1319

20+
@Binds
21+
abstract fun bindGroupDataSource(groupDataSourceImpl: GroupDataSourceImpl): GroupDataSource
22+
23+
@Binds
24+
abstract fun bindUserDataSource(userDataSourceImpl: UserDataSourceImpl): UserDataSource
25+
26+
@Binds
27+
abstract fun bindGroupNotificationDataSource(groupNotificationDataSourceImpl: GroupNotificationDataSourceImpl): GroupNotificationDataSource
28+
1429
@Binds
1530
abstract fun bindGroupRepository(groupRepositoryImpl: GroupRepositoryImpl): GroupRepository
1631
}

data/src/main/java/com/whyranoid/data/di/PostModule.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.whyranoid.data.di
22

3+
import com.whyranoid.data.post.PostDataSource
4+
import com.whyranoid.data.post.PostDataSourceImpl
35
import com.whyranoid.data.post.PostRepositoryImpl
46
import com.whyranoid.domain.repository.PostRepository
57
import dagger.Binds
@@ -11,6 +13,9 @@ import dagger.hilt.components.SingletonComponent
1113
@InstallIn(SingletonComponent::class)
1214
abstract class PostModule {
1315

16+
@Binds
17+
abstract fun bindPostDataSource(postDataSourceImpl: PostDataSourceImpl): PostDataSource
18+
1419
@Binds
1520
abstract fun bindPostRepository(postRepositoryImpl: PostRepositoryImpl): PostRepository
1621
}

0 commit comments

Comments
 (0)