Experiences/Competition

[2024 GDSC] Wetox-iOS Project API 연동

κΉ€κ°œλ―Έ_ 2024. 2. 22. 21:52

 

 

 

 

 

2024 Google Solution Challenge

https://github.com/GDSC-Wetox/Wetox-iOS

 

GitHub - GDSC-Wetox/Wetox-iOS: GDSC-Hongik Wetox iOS

GDSC-Hongik Wetox iOS . Contribute to GDSC-Wetox/Wetox-iOS development by creating an account on GitHub.

github.com

맀일맀일 개발둜 λΆˆνƒœμš°λŠ” μ€‘μž…λ‹ˆλ‹€. . πŸ‘©‍πŸš’πŸ”₯

λ“œλ””μ–΄ μ„œλ²„ API 연동을 μ™„λ£Œν–ˆλ‹΅λ‹ˆλ‹€!! κΊ„μšΈ 

남은 것은 λ°œν‘œ μ˜μƒ μ€€λΉ„ 뿐 . 

정말 λ„€νŠΈμ›Œν¬ 연동 μ½”λ“œ μ§œλŠ” 기계가 λ˜μ—ˆμ–΄μš” . . 

제좜 끝내고, MVVM λ¦¬νŒ©ν† λ§λ„ κΌ¬μ˜₯ ν•΄μ•Όμ§‘ 

λ¦¬μ•‘νŠΈ μ½”λ“œλ„ μ œλŒ€λ‘œ κ³΅λΆ€ν•˜κ³  λ‹€μ‹œ 짜고 μ‹Άμ–΄μš”

 

 

 

 

 

# μž”λ””λ°­ 풍년 🌱

2월을 νƒœμ› μ–΄μš” ❄️

 

 

 

 

 

# λ‹‰λ„€μž„ 쀑볡 검사 API 

UI Button도 λ„€νŠΈμ›Œν¬ response에 따라 색상 λ°”λ€Œκ²Œ κ΅¬ν˜„ν–ˆκ΅¬μš”,, 

 

 

 

 

 

# 친ꡬ μš”μ²­ 및 수락  API

πŸ•Ί 친ꡬ μš”μ²­ μˆ˜λ½λ„ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€ (κ±°μ ˆμ€ μ—†λ‹€.)

 

 

 

 

 

# AI 생성 ν”„λ‘œν•„ κ°€μ Έμ˜€κΈ° API

 

 

 

이 친ꡬ κ΅¬ν˜„ν•˜λŠ”λ° κ½€λ‚˜ κ³ λ―Όν–ˆμˆ˜ πŸ€”

μ„œλ²„μ—μ„œ λ³΄λ‚΄λŠ” 값이 URL μ£Όμ†Œλ‚˜ JSON이 μ•„λ‹ˆλΌ,

PNG 데이터λ₯Ό κ·ΈλŒ€λ‘œ μ˜λŠ”λ°, 이걸 λ°›μ•„μ˜¬ λ•Œ,

Observable에 response 객체λ₯Ό μ„ μ–Έν•΄μ„œ λ°›λŠ”κ²Œ μ•„λ‹ˆλΌ

Data λ°”λ‘œ λ°›μ•„μ˜€λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•΄μ•Ό ν–ˆμ–΄μš” 

 

 

 

public class RegisterAPI {
    static let registerProvider = MoyaProvider<RegisterService>(plugins: [MoyaLoggerPlugin()])
    
    static func postNicknameValidRequest(nickname: NicknameValidRequest) -> Observable<NicknameValidResponse> {
        let decoder = JSONDecoder()
        decoder.dateDecodingStrategy = .formatted(DateFormatter().mapDateFormat())
        
        return registerProvider.rx.request(.postNicknameValidRequest(nickname: nickname))
            .map(NicknameValidResponse.self, using: decoder)
            .asObservable()
            .catch { error in
                if let moyaError = error as? MoyaError {
                    switch moyaError {
                    case .statusCode(let response):
                        print("HTTP Status Code: \(response.statusCode)")
                    case .jsonMapping(let response):
                        print("JSON Mapping Error for Response: \(response)")
                    default:
                        print("Other MoyaError: \(moyaError.localizedDescription)")
                    }
                }
                return Observable.error(error)
            }
    }
    
    static func getAIProfileImage() -> Observable<Data> {
            return registerProvider.rx.request(.getAIImage)
                .map { response -> Data in
                    return response.data
                }
                .asObservable()
                .catch { error in
                    if let moyaError = error as? MoyaError {
                        switch moyaError {
                        case .statusCode(let response):
                            print("HTTP Status Code: \(response.statusCode)")
                        default:
                            print("Other MoyaError: \(moyaError.localizedDescription)")
                        }
                    }
                    return Observable.error(error)
                }
        }
}

 

λ­”κ°€. . 두 func 의 차이가 λŠκ»΄μ§€μ§€μš” . . πŸ‘©‍πŸš€

기계식 μ½”λ”©ν•˜λ‹€κ°€ ν•œ 발 μ£ΌμΆ€ν–ˆλ˜ 파트 

ν•œ 두 번 κ΅¬ν˜„ν•΄λ‘λ©΄ λ‹€λ₯Έμ• λ“€μ€ μ„œλ‘œ ꡬ쑰가 μŠ·λΉ„μŠ·λΉ„ ν–ˆκ±°λ“±μš” 

 

 

 

 

 

메인 UI λ²„νŠΌ μ»¬λŸ¬λ„ μͺΌλ” λ°”κΏ¨κ΅¬μš”,, μ•± μ•„μ΄μ½˜ λ„˜λ‚˜ κ·€μ—½μ£ ? 

 

 

 

 

 

λ§ˆκ°κΉŒμ§€ ν™”μ΄νŒ…νŒ…!!