5주차 데모 발표 - Team-HGD/SniffMEET GitHub Wiki

1. 서비스 소개

데모발표사진1

MVP

💡
  1. 반려견 정보와 프로필을 등록하고
  2. 같이 산책을 하고 싶은 사람과 직접 폰을 맞대는 방식으로 산책 메이트를 맺고
  3. 메이트에게 산책 신청을 보낼 수 있다.

2. 기술 스택

  • VIPER

    바이퍼
    • 확실한 역할 구분을 위해서 도입

    • 애증의 VIPER…

      • Entity
      • Builder
      폴더구조
  • MPC, NBI

    폴더구조
    • MPC (Multipeer Connectivity) - 애플 디바이스끼리 Peer to Peer 통신을 하도록 지원해주는 기술
    • NBI (Nearby Interaction) - 두 기기간의 거리와 방향을 알 수 있게 만들어 주는 기술
    • 억까의 연속
      • MPC 연결성

      • NI 방향 측정

        결과1 결과2
  • Supabase & Network Layer

    supa2 supa2
    • supabase 세팅
      • RLS 관련 설정 문제

        • 더 상위의 role을 가진 권한으로 값을 읽어올 수 없던 문제
        CREATE policy "Authenticated users can read"
        ON "public"."hgdtest"
        TO public
        USING (
          (auth.role() = 'authenticated'::text)
        );
      • user_metadata

3. 진행 상황

완료 ✅

  • 반려견과 프로필 정보를 입력받아 익명 로그인하기
  • MPC와 NBI로 P2P 통신하기
  • 프로필 드랍으로 메이트 맺기
  • 메이트에게 산책 요청하고 받기
  • UI 작업

진행중 👟

  • Push Notification 산책 요청 주고 받기
  • Push Notification 서버

고민거리 🧐

  • 스켈레톤 뷰 supa2 supa2

  • 연결 작업

    • Entity
    • 키값

4. 시연

익명 로그인

익명로그인

메이트 맺기 - 프로필 드랍

프로필 드랍1 프로필 드랍2

메이트 목록 - 산책 요청

산책요청1 산책요청2

5. 앞으로의 계획

기능 개발

  • 이번주 중에 MVP 기능 개발 끝내기
  • 산책 로그 탭 만들기
    • 산책하기 기능 (타이머, 지도 뷰)
    • 리포트 기능 (주간, 월간)

리팩토링

  • UseCase 정리

    • 의존 관계 개선하고 사용 방식 통일하기
    struct SaveProfileImageUseCaseImpl: SaveProfileImageUseCase {
        private let remoteImageManager: any RemoteImageManagable
        private let userDefaultsManager: any UserDefaultsManagable
    
    		init(
            remoteImageManager: any RemoteImageManagable,
            userDefaultsManager: any UserDefaultsManagable
        ) {
            self.remoteImageManager = remoteImageManager
            self.userDefaultsManager = userDefaultsManager
        }
    
        func execute(imageData: Data) async throws -> String {
            let fileName: String = UUID().uuidString
            try await remoteImageManager.upload(
                imageData: imageData,
                fileName: fileName,
                mimeType: .image
            )
            try userDefaultsManager.set(
                value: fileName,
                forKey: Environment.UserDefaultsKey.profileImage
            )
            return fileName
        }
    }
  • 테스트

    • UseCase 테스트
  • 컨벤션 약간씩 다른 부분 수정

⚠️ **GitHub.com Fallback** ⚠️