투케이2K

129. (TWOK/UTIL) [Ios/Swift] C_FirebaseRealDatabase : 파이어베이스 RealDatabase 관리 클래스 본문

투케이2K 유틸파일

129. (TWOK/UTIL) [Ios/Swift] C_FirebaseRealDatabase : 파이어베이스 RealDatabase 관리 클래스

투케이2K 2024. 5. 15. 11:14
반응형

[설 명]

프로그램 : Ios / Swift

설 명 : C_FirebaseRealDatabase : 파이어베이스 RealDatabase 관리 클래스

 

[소스 코드]

 

import Foundation
import UIKit
// ----------------------------------
// MARK: - [파이어베이스 라이브러리]
// ----------------------------------
import Firebase
// ----------------------------------

class C_FirebaseRealDatabase {



    /**
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * TODO [클래스 설명]
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 1. 파이어베이스 RealDatabase 관리 클래스
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 2. 참고 : AppDelegate 파일에서 사전 FirebaseApp.configure 정의 필요
     *
     * let fireBaseConfigFile = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")!
     * let firOptions = FirebaseOptions(contentsOfFile: fireBaseConfigFile)!
     * FirebaseApp.configure(options: firOptions)
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * */





    /**
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * //  TODO [빠른 로직 찾기 : 주석 로직 찾기]
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * // [SEARCH FAST] : [Observable] : [Write] : [기본] 데이터베이스 SET 쓰기
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * // [SEARCH FAST] : [Observable] : [Read] : [기본] 데이터베이스 SET 읽기
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * // [SEARCH FAST] : [Observable] : [Delete] : [기본] 데이터베이스 SET 삭제
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * */
    
    
    
    
    
    // -----------------------------------------------------------------------------------------
    // MARK: - [전역 변수 선언]
    // -----------------------------------------------------------------------------------------
    private static let ACTIVITY_NAME = "C_FirebaseRealDatabase"





    // -----------------------------------------------------------------------------------------
    // MARK: - [SEARCH FAST] : [Observable] : [Write] : [기본] 데이터베이스 SET 쓰기
    // -----------------------------------------------------------------------------------------
    func observableSetWriteDatabase(table:String, json:String, completion: @escaping (Bool)->()) {
        
        /*
        // -----------------------------------------
        [observableSetWriteDatabase 메소드 설명]
        // -----------------------------------------
        1. [기본] 데이터베이스 SET 쓰기
        // -----------------------------------------
        2. 호출 방법 :
         
         DispatchQueue.main.async { // [비동기 요청]
             
             // [파이어베이스 테이블 명칭]
             let tableName = "testUser"
             
             // [JSON 생성]
             var dic : Dictionary<String, Any> = ["name":"투케이", "age":29]
             var json = C_Util().dic_To_JsonObject_String(_dicData: dic)

             // [메소드 호출]
             C_FirebaseRealDatabase().observableSetWriteDatabase(table:tableName, json:json){(result) in
                 
                 S_Log._F_(description: "[기본] 데이터베이스 SET 쓰기", data: ["\(result)"])
                 
             }
             
         }
         
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Write] : [기본] 데이터베이스 SET 쓰기 수행", data: [
                "table :: \(table)",
                "json :: \(json)"
            ])
            
            
            // [리턴 변수 선언]
            var returnData = false
            
            
            // [널 체크]
            if C_Util().stringNotNull(str: table) == true && C_Util().stringNotNull(str: json) == true {
                
                // [파이어베이스 인스턴스 취득]
                let ref = Database.database().reference()
                
                // [파이어베이스 set 쓰기]
                ref.child("\(table)").setValue("\(json)", withCompletionBlock: { (error, ref) in
                    
                    if let err = error {
                        S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Write] : [기본] 데이터베이스 SET 쓰기 에러", data: [
                            "ERROR :: \(err.localizedDescription)"
                        ])
                        
                        // [콜백 반환]
                        completion(returnData)
                        return
                    }
                    
                    // [리턴 결과 반환]
                    returnData = true
                    
                    S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Write] : [기본] 데이터베이스 SET 쓰기 성공", data: nil)
                    
                    // [콜백 반환]
                    completion(returnData)
                    
                })
            }
            else {
                S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Write] : [기본] 데이터베이스 SET 쓰기 에러", data: [
                    "ERROR :: Input Data Is Null"
                ])
                
                // [콜백 반환]
                completion(returnData)
            }
            
        }
    }
    
    
    
    
    
    // -----------------------------------------------------------------------------------------
    // MARK: - [SEARCH FAST] : [Observable] : [Read] : [기본] 데이터베이스 SET 읽기
    // -----------------------------------------------------------------------------------------
    func observableSetReadDatabase(table:String, completion: @escaping (String)->()) {
        
        /*
        // -----------------------------------------
        [observableSetReadDatabase 메소드 설명]
        // -----------------------------------------
        1. [기본] 데이터베이스 SET 읽기
        // -----------------------------------------
        2. 호출 방법 :
         
         DispatchQueue.main.async { // [비동기 요청]
             
             // [파이어베이스 테이블 명칭]
             let tableName = "testUser"

             // [메소드 호출]
             C_FirebaseRealDatabase().observableSetReadDatabase(table:tableName){(result) in
                 
                 S_Log._F_(description: "[기본] 데이터베이스 SET 읽기", data: ["\(result)"])
                 
             }
             
         }
         
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Read] : [기본] 데이터베이스 SET 읽기 수행", data: [
                "table :: \(table)"
            ])
            
            
            // [리턴 변수 선언]
            var returnData = ""
            
            
            // [널 체크]
            if C_Util().stringNotNull(str: table) == true {
                
                // [파이어베이스 인스턴스 취득]
                let ref = Database.database().reference()
                
                // [파이어베이스 set 쓰기]
                ref.child("\(table)").getData(completion: { (error, ref) in
                    
                    if let err = error {
                        S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Read] : [기본] 데이터베이스 SET 읽기 에러", data: [
                            "ERROR :: \(err.localizedDescription)"
                        ])
                        
                        // [콜백 반환]
                        completion(returnData)
                        return
                    }
                    
                    // [리턴 결과 반환]
                    returnData = ref?.value as! String
                    
                    S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Read] : [기본] 데이터베이스 SET 읽기 성공", data: nil)
                    
                    // [콜백 반환]
                    completion(returnData)
                    
                })
            }
            else {
                S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Read] : [기본] 데이터베이스 SET 읽기 에러", data: [
                    "ERROR :: Input Data Is Null"
                ])
                
                // [콜백 반환]
                completion(returnData)
            }
            
        }
    }
    
    
    
    
    
    // -----------------------------------------------------------------------------------------
    // MARK: - [SEARCH FAST] : [Observable] : [Delete] : [기본] 데이터베이스 SET 삭제
    // -----------------------------------------------------------------------------------------
    func observableSetDeleteDatabase(table:String, completion: @escaping (Bool)->()) {
        
        /*
        // -----------------------------------------
        [observableSetDeleteDatabase 메소드 설명]
        // -----------------------------------------
        1. [기본] 데이터베이스 SET 삭제
        // -----------------------------------------
        2. 호출 방법 :
         
         DispatchQueue.main.async { // [비동기 요청]
             
             // [파이어베이스 테이블 명칭]
             let tableName = "testUser"

             // [메소드 호출]
             C_FirebaseRealDatabase().observableSetDeleteDatabase(table:tableName){(result) in
                 
                 S_Log._F_(description: "[기본] 데이터베이스 SET 삭제", data: ["\(result)"])
                 
             }
             
         }
         
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Delete] : [기본] 데이터베이스 SET 삭제 수행", data: [
                "table :: \(table)"
            ])
            
            
            // [리턴 변수 선언]
            var returnData = false
            
            
            // [널 체크]
            if C_Util().stringNotNull(str: table) == true {
                
                // [파이어베이스 인스턴스 취득]
                let ref = Database.database().reference()
                
                // [파이어베이스 set 쓰기]
                ref.child("\(table)").setValue(nil, withCompletionBlock: { (error, ref) in
                    
                    if let err = error {
                        S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Delete] : [기본] 데이터베이스 SET 삭제 에러", data: [
                            "ERROR :: \(err.localizedDescription)"
                        ])
                        
                        // [콜백 반환]
                        completion(returnData)
                        return
                    }
                    
                    // [리턴 결과 반환]
                    returnData = true
                    
                    S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Delete] : [기본] 데이터베이스 SET 삭제 성공", data: nil)
                    
                    // [콜백 반환]
                    completion(returnData)
                    
                })
            }
            else {
                S_Log._F_(description: C_FirebaseRealDatabase.ACTIVITY_NAME + " : [Firebase] : [Delete] : [기본] 데이터베이스 SET 삭제 에러", data: [
                    "ERROR :: Input Data Is Null"
                ])
                
                // [콜백 반환]
                completion(returnData)
            }
            
        }
    }
    

    
} // [클래스 종료]

 

반응형
Comments