1 of 58

회원가입

2 of 58

UserAuth, UserProfile

회원 가입 - 성공

Widget/ViewModel

user_auths

Firebase

1. 회원가입 요청

Presentation

Domain

Data

Api

UseCase

2. 회원가입 요청

Repository/DataSource

login_session

Hive

3. 이메일 확인

4. 가입 승인

7. 계정 정보 저장

8. 저장 완료

9. 회원가입 완료

5. 프로필 저장

6. 저장 완료

UserAuth, UserProfile

UserAuth

UserProfile

user_profiles

UserProfile

10. 회원가입 완료

bool

bool

bool

bool

회원 정보 입력

스낵바�홈화면 이동

Remote

Local

UserAuth (

email,

pw

)

3 of 58

UserAuth, UserProfile

회원 가입 – 실패 (이미 가입된 이메일 or 네트워크 문제)

Widget/ViewModel

user_auths

Firebase

1. 회원가입 요청

Presentation

Domain

Data

Api

UseCase

2. 회원가입 요청

Repository/DataSource

3. 이메일 확인

4. 가입 실패

5. 가입 실패

UserAuth, UserProfile

UserAuth

6. 회원가입 실패

bool

bool

회원 정보 입력

스낵바�(TextFiled 에러)

Remote

Local

UserAuth (

email,

pw

)

4 of 58

계정 탈퇴

5 of 58

회원 탈퇴

앱 설정 화면

login_session

Hive

1. 탈퇴 요청

Presentation

Domain

Data

Api

UseCase

2. 탈퇴 요청

Repository/DataSource

3. 회원 탈퇴 요청

4. 회원 탈퇴 완료

7. 회원 탈퇴 완료

bool

8. 탈퇴 완료

bool

bool

계정 탈퇴

Remote

Local

UserAuth (

email,

pw

)

로그인 화면

user_auths

Firebase

5. 계정 정보 삭제

6. 삭제 완료

bool

UserAuth

UserAuth

UserAuth

6 of 58

로그인

7 of 58

로그인 - 성공

Widget/ViewModel

user_auths

Firebase

1. 로그인 요청

Presentation

Domain

Data

Api

UseCase

Repository/DataSource

login_session

Hive

3. 계정 확인

4. 계정 확인 완료

7. 계정 정보 저장

8. 저장 완료

9. 로그인 완료

5. 프로필 요청

6. 프로필 반환

UserAuth

UserAuth

email

user_profiles

LoginSession

10. 로그인 완료

UserProfile

bool

bool

bool

로그인 정보 입력

홈화면 이동

Remote

Local

UserAuth (

email,

pw

)

Firebase

UserProfile�->�LoginSession

UserAuth

8 of 58

UserAuth

로그인 – 실패 (계정 정보 불일치 or 네트워크 문제)

Widget/ViewModel

user_auths

Firebase

1. 로그인 요청

Presentation

Domain

Data

Api

UseCase

2. 로그인 요청

Repository/DataSource

3. 계정 확인

4. 계정 확인 실패

5. 로그인 실패

UserAuth

UserAuth

6. 로그인 실패

bool

bool

로그인 정보 입력

스낵바

Remote

Local

UserAuth (

email,

pw

)

9 of 58

로그아웃

10 of 58

로그아웃

앱 설정 화면

1. 로그아웃 요청

Presentation

Domain

Data

Api

UseCase

2. 로그아웃 요청

Repository/DataSource

5. 로그아웃 완료

6. 로그아웃 완료

bool

bool

로그인 정보 입력

Remote

Local

login_session

Hive

3. 로그인 정보 삭제

4. 로그아웃 완료

bool

로그인 화면

11 of 58

오늘 날씨 예보 (DailyLocationWeather)

12 of 58

날씨 예보 최신화 요청 – 성공

Widget/ViewModel

GPS

Device

1. 날씨 예보 요청

Presentation

Domain

Data

Api

UseCase

2. 날씨 예보 요청

Repository/DataSource

daily_location_weather

Hive

3. 좌표 요청

4. 좌표 반환

9. 예보 저장

10. 저장 완료, 예보 반환

11. 날씨 예보 반환

5. 도시 요청

6. 도시 반환

lat, lng

좌표 -> 도시

12. 날씨 예보 반환

DailyLocationWeather

DailyLocationWeather

날씨 예보�정보 표시

Remote

Local

lat, lng

미정

DailyLocationWeather (

Weather(날씨, 계절, 온도),�Location(좌표, 도시)

)

날씨 예보

미정

7. 예보 요청

8. 예보 반환

Location

Json

DailyLocationWeather

DailyLocationWeather

13 of 58

날씨 예보 최신화 요청 – 실패 (좌표 요청(GPS) 실패)�기존의 위치로 날씨만 업데이트 하는 경우

Widget/ViewModel

GPS

Device

1. 날씨 예보 요청

Presentation

Domain

Data

Api

UseCase

2. 날씨 예보 요청

Repository/DataSource

daily_location_weather

Hive

3. 좌표 요청

4. 요청 실패

9. 예보 저장

10. 저장 완료, 예보 반환

11. 날씨 예보 반환

12. 날씨 예보 반환

DailyLocationWeather

DailyLocationWeather

날씨 예보�정보 표시

Remote

Local

DailyLocationWeather (

Weather(날씨, 계절, 온도),�Location(좌표, 도시)

)

날씨 예보

미정

7. 예보 요청

8. 예보 반환

Location

Json

DailyLocationWeather

DailyLocationWeather

daily_location_weather

Hive

5. 위치 찾기

6. 위치 반환

Location

14 of 58

날씨 예보 최신화 요청 – 실패 (좌표 요청(GPS) 실패 + 저장된 값 없음)기존의 위치로 날씨만 업데이트 하는 경우

Widget/ViewModel

GPS

Device

1. 날씨 예보 요청

Presentation

Domain

Data

Api

UseCase

2. 날씨 예보 요청

Repository/DataSource

daily_location_weather

Hive

3. 좌표 요청

4. 요청 실패

9. 예보 저장

10. 저장 완료, 예보 반환

11. 날씨 예보 반환

12. 날씨 예보 반환

DailyLocationWeather

DailyLocationWeather

날씨 예보�정보 표시

Remote

Local

DailyLocationWeather (

Weather(날씨, 계절, 온도),�Location(좌표, 도시)

)

Default Location 위치 = 강릉

날씨 예보

미정

7. 예보 요청

8. 예보 반환

Default Location

Json

DailyLocationWeather

DailyLocationWeather

daily_location_weather

Hive

5. 위치 요청

6. 저장 값 없음

15 of 58

Widget/ViewModel

GPS

Device

1. 날씨 예보 요청

Presentation

Domain

Data

Api

UseCase

2. 날씨 예보 요청

Repository/DataSource

daily_location_weather

Hive

3. 좌표 요청

4. 좌표 반환

9. 예보 저장

10. 저장 완료, 예보 반환

11. 날씨 예보 반환

5. 도시 요청

6. 요청 실패

lat, lng

좌표 -> 도시

12. 날씨 예보 반환

DailyLocationWeather

DailyLocationWeather

날씨 예보�정보 표시

Remote

Local

lat, lng

미정

DailyLocationWeather (

Weather(날씨, 계절, 온도),�Location(좌표, 도시)

)

날씨 예보

미정

7. 예보 요청

8. 예보 반환

Location

Json

DailyLocationWeather

DailyLocationWeather

날씨 예보 최신화 요청 – 실패 (위치 요청(도시) 실패)�기존의 위치로 날씨만 업데이트 하는 경우

daily_location_weather

Hive

5. 위치 요청

6. 위치 반환

Location

16 of 58

Widget/ViewModel

GPS

Device

1. 날씨 예보 요청

Presentation

Domain

Data

Api

UseCase

2. 날씨 예보 요청

Repository/DataSource

daily_location_weather

Hive

3. 좌표 요청

4. 좌표 반환

9. 예보 저장

10. 저장 완료, 예보 반환

11. 날씨 예보 반환

5. 도시 요청

6. 요청 실패

lat, lng

좌표 -> 도시

12. 날씨 예보 반환

DailyLocationWeather

DailyLocationWeather

날씨 예보�정보 표시

Remote

Local

lat, lng

미정

날씨 예보

미정

7. 예보 요청

8. 예보 반환

Default�Location

Json

DailyLocationWeather

DailyLocationWeather

날씨 예보 최신화 요청 – 실패 (위치 요청(도시) 실패 + 기존 저장 값 없음)기존의 위치로 날씨만 업데이트 하는 경우

daily_location_weather

Hive

5. 위치 요청

6. 저장 값 없음

DailyLocationWeather (

Weather(날씨, 계절, 온도),�Location(좌표, 도시)

)

Default Location 위치 = 강릉

17 of 58

기존 날씨 예보 요청 – 예보 요청 실패

Widget/ViewModel

GPS

Device

1. 날씨 예보 요청

Presentation

Domain

Data

Api

UseCase

2. 날씨 예보 요청

Repository/DataSource

3. 좌표 요청

4. 요청 실패

11. 날씨 예보 반환

12. 날씨 예보 반환

DailyLocationWeather

DailyLocationWeather

날씨 예보�정보 표시

Remote

Local

DailyLocationWeather (

Weather(날씨, 계절, 온도),�Location(좌표, 도시)

)

날씨 예보

미정

7. 예보 요청

8. 요청 실패

Location

daily_location_weather

Hive

5. 위치 요청

6. 위치 반환

Location

선택지

1. 기존 저장된 예보와 위치 동일하면 기존 예보 보여주기

2. 날씨 정보 요청 실패 표시

18 of 58

기존 날씨 예보 요청 – 갱신 시간 전 (기능 확장으로..)

19 of 58

OOTD 사진 선택 후 �크롭 화면 이동

20 of 58

List<int>

이미지 크롭 from 촬영 -> 원본 이미지 저장

사진 선택 과정

Cache Dir

7. 화면 이동

Presentation

Domain

Data

Api

UseCase

2. 이미지 저장 요청

Repository/DataSource

3. 이미지 저장 요청

4. 저장 완료

5. 저장 완료

List<int>

List<int>

6. 저장 완료

bool

bool

사진 촬영

Remote

Local

bool

사진 크롭 화면

사진 크롭

1. 이미지 저장 요청

21 of 58

이미지 크롭 from 앨범 -> 원본 이미지 저장

사진 선택 과정

8. 화면 이동

Presentation

사진 선택

사진 크롭 화면

사진 크롭

Image_Picker

List<int>

Cache Dir

Domain

Data

Api

UseCase

3. 이미지 저장 요청

Repository/DataSource

4. 이미지 저장 요청

5. 저장 완료

6. 저장 완료

List<int>

List<int>

7. 저장 완료

bool

bool

Remote

Local

bool

2. 이미지 저장 요청

22 of 58

사진 크롭 화면에서 �뒤로가기�이건 그냥 pop해서 카메라/피커 원래로 gogo

23 of 58

사진 크롭 후

작성 화면 이동

24 of 58

List<int>

이미지 크롭 완료 후 이동

사진 크롭 화면

Cache Dir

7. 화면 이동

Presentation

Domain

Data

Api

UseCase

2. 이미지 저장 요청

Repository/DataSource

3. 이미지 저장 요청

4. 저장 완료

5. 저장 완료

List<int>

List<int>

6. 저장 완료

bool

bool

사진 크롭 완료

Remote

Local

bool

피드 작성 화면

피드 작성

1. 이미지 저장 요청

25 of 58

이미지 크롭 완료 후 이동

피드 작성 화면

Cache Dir

Presentation

Domain

Data

Api

UseCase

2. 크롭 이미지 요청

Repository/DataSource

3. 크롭 이미지 요청

4. 이미지 반환

5. 이미지 반환

6. 이미지 반환

List<int>

List<Int>

피드 작성

Remote

Local

List<int>

1. 크롭 이미지 요청

26 of 58

작성 화면에서�뒤로 가기

27 of 58

이미지 크롭 from 촬영

피드 작성 화면

Cache Dir

1 or 7. 화면 이동

Presentation

Domain

Data

Api

UseCase

2. 원본 이미지 요청

Repository/DataSource

3. 원본 이미지 요청

4. 이미지 반환

5. 이미지 반환

6. 이미지 반환

List<int>

List<int>

피드 작성

Remote

Local

List<int>

사진 크롭 화면

사진 크롭

1. 원본 이미지 요청

28 of 58

OOTD 피드 작성

29 of 58

피드 작성 성공

피드 작성 화면

Cache Dir

11. 화면 이동

Presentation

Domain

Data

Api

UseCase

2. 피드 작성 요청

Repository/DataSource

3. 크롭 이미지 요청

4. 이미지 반환

9. 업로드 완료

10. 업로드 완료

bool

bool

피드 작성

Remote

Local

List<int>

이전 화면

피드 작성 탭 �선택 이전 화면

1. 피드 작성 요청

Feed

Cloud_storage

Firebase

5. 이미지 업로드 요청

6. 업로드 완료

Path

??

feeds

Firebase

7. 피드 업로드 요청

8. 업로드 완료

bool

Feed

Feed

30 of 58

피드 작성 실패

31 of 58

OOTD 피드 상세

32 of 58

피드 데이터 요청

피드 추천 or 검색

Presentation

Domain

Data

Api

피드 썸네일

피드 상세 화면

피드 상세�정보 표시

id

Firebase

0. 화면 이동

UseCase

2. 피드 데이터 요청

Repository/DataSource

3. 피드 데이터 요청

4. 피드 데이터 반환

5. 피드 데이터 반환

id

id

6. 피드 데이터 반환

Feed

Feed

Remote

Json

1. 피드 데이터 요청

id

feeds

33 of 58

OOTD 피드 상세에서 �편집 화면 이동

34 of 58

피드 데이터 전달

피드 상세 화면

Presentation

Domain

Data

Api

피드 상세

피드 작성 화면

피드 편집

0. 화면 이동

Feed

35 of 58

OOTD 피드 편집 취소 후�피드 상세 화면으로 이동�이건 그냥 pop

36 of 58

OOTD 피드 편집 완료 후�피드 상세 화면으로 이동

37 of 58

피드 업로드 요청 후 피드 상세 화면으로 이동

피드 편집 화면

7. 화면 이동

Presentation

Domain

Data

Api

UseCase

2. 피드 작성 요청

Repository/DataSource

5. 업로드 완료

6. 업로드 완료

bool

bool

피드 작성

Remote

피드 상세 화면

수정 내용 반영

1. 피드 작성 요청

Feed

feeds

Firebase

3. 피드 업로드 요청

4. 업로드 완료

bool

Feed

Feed

Text

38 of 58

유저 페이지 �(아래 두개의 시나리오가 동시에)

39 of 58

email

email을 통한 피드 요청

Widget/ViewModel

feeds

Firebase

1. 피드 요청

Presentation

Domain

Data

Api

UseCase

2. 피드 요청

Repository/DataSource

3. 피드 요청

4. 피드 반환

5. 피드 반환

email

email

6. 피드 반환

List<Feed>

List<Feed>

피드

Remote

List<Feed>

40 of 58

email

email을 통한 프로필 요청

Widget/ViewModel

user_profiles

Firebase

1. 프로필 요청

Presentation

Domain

Data

Api

UseCase

2. 프로필 요청

Repository/DataSource

3. 프로필 요청

4. 프로필 반환

5. 프로필 반환

email

email

6. 프로필 반환

UserProfile

UserProfile

유저 프로필

Remote

UserProfile

41 of 58

마이 페이지 �(아래 두개의 시나리오가 동시에)

42 of 58

email을 통한 프로필 요청

Widget/ViewModel

1. 프로필 요청

Presentation

Domain

UseCase

2. 프로필 요청

7. 프로필 반환

8. 프로필 반환

UserProfile

UserProfile

유저 프로필

user_profiles

Firebase

Data

Api

UserProfileRepository/�UserProfileDataSource

5. 프로필 요청

6. 프로필 반환

email

List<Feed>

FirebaseAuthRepository

3. 이메일 요청

4. 이메일 반환

email

Remote

43 of 58

email을 통한 피드 요청

Widget/ViewModel

feeds

Firebase

1. 피드 요청

Presentation

Domain

Data

Api

UseCase

2. 피드 요청

FeedRepository/�FeedDataSource

5. 피드 요청

6. 피드 반환

7. 피드 반환

email

8. 피드 반환

List<Feed>

List<Feed>

피드

List<Feed>

FirebaseAuthDataSource

3. 이메일 요청

4. 이메일 반환

email

44 of 58

마이페이지 �피드 삭제

45 of 58

Id, email

피드 삭제

Widget/ViewModel

feeds

Firebase

1. 삭제 요청

Presentation

Domain

Data

Api

UseCase

2. 삭제 요청

Repository/DataSource

3. 삭제 요청

4. 삭제 완료

7. 삭제 완료

Id, email

id

8. 삭제 완료

bool

bool

피드

Remote

bool

해당 피드�리스트에서 제거�카운트도 - 1

user_profiles

Firebase

5. 카운트 수정

6. 수정 완료

email

bool

46 of 58

마이페이지에서 �편집 화면 이동

47 of 58

피드 데이터 요청

마이페이지 화면

Presentation

Domain

Data

Api

피드 상세

피드 작성 화면

피드 편집

화면 이동

Feed

48 of 58

OOTD 피드 편집 취소 후�마이페이지로 이동�이건 그냥 pop

49 of 58

OOTD 피드 편집 완료 후�마이페이지로 이동

50 of 58

피드 업로드 요청 후 마이페이지 화면으로 이동

피드 편집 화면

7. 화면 이동

Presentation

Domain

Data

Api

UseCase

2. 피드 작성 요청

Repository/DataSource

5. 업로드 완료

6. 업로드 완료

bool

bool

피드 작성

Remote

Local

마이페이지 화면

썸네일 이미지 �그리드 뷰 표시

1. 피드 작성 요청

Feed

feeds

Firebase

3. 피드 업데이트 요청

4. 업로드 완료

bool

Feed

Feed

51 of 58

홈 하단 OOTD 추천�최초 이동

52 of 58

현재 위치, 날씨 기준으로 추천 피드 요청

Widget/ViewModel

1. 날씨 요청

Presentation

Domain

Data

Api

UseCase

2. 날씨 요청

Repository/DataSource

8. 피드 반환

9. 피드 반환

Weather

Weather

날씨 정보 갱신이 트리거

Remote

Local

daily_location_weather

Hive

3.날씨 예보 요청

4. 날씨 예보 반환

DailyLocationWeather

53 of 58

홈 하단 OOTD 추천�피드 조회

54 of 58

현재 위치, 날씨 기준으로 추천 피드 요청

Widget/ViewModel

1. 피드 요청

Presentation

Domain

Data

Api

UseCase

2. 피드 요청

Repository/DataSource

8. 피드 반환

9. 피드 반환

List<Feed>

List<Feed>

피드 조회 요청

Remote

Feeds

Firebase

6. 피드 요청

7. 피드 반환

계절, 날씨, 온도

List<Feed>

Weather

Weather

55 of 58

OOTD 피드 카드 뷰

56 of 58

현재 위치, 날씨 기준으로 추천 피드 요청

Widget/ViewModel

1. 피드 요청

Presentation

Domain

Data

Api

UseCase

2. 피드 요청

Repository/DataSource

8. 피드 반환

List<Feed>

피드 카드 뷰

Remote

Local

daily_location_weather

Hive

3.날씨 예보 요청

4. 날씨 예보 반환

DailyLocationWeather

5. 현재 시간 기준 날씨, 위치만 추출

Feeds

Firebase

6. 예보 요청

7. 예보 반환

계절, 날씨, 온도

List<Feed>

9. 피드 반환

List<Feed>

57 of 58

OOTD 피드 검색

58 of 58

위치, 날씨 필터 조건을 기준으로 추천 피드 요청

Widget/ViewModel

1. 피드 요청

Presentation

Domain

Data

UseCase

2. 피드 요청

Repository/DataSource

5. 피드 반환

6. 피드 반환

List<Feed>

List<Feed>

필터 선택

Remote

Local

Feeds

Firebase

3. 피드 요청

4. 피드 반환

List<Feed>

계절, 날씨, 온도

계절, 날씨, 온도

계절, 날씨, 온도

그리드뷰 업데이트