HipstuCAU / nyam_nyam

오늘 먹을 메뉴를 고민하고 있는 학우들을 위해 만들었습니다.
2 stars 0 forks source link

Setting 구조를 다시 설계합니다. #111

Open TaekH opened 7 months ago

TaekH commented 7 months ago

UserDefaultsManager를 구현합니다.

현재 중대한학식의 경우 중앙대에만 중점적으로 맞춰져있는 구조이기 때문에, 유저가 설정한 기본 캠퍼스, 그 캠퍼스에 해당하는 카페테리아의 정렬만 UserDefaults 데이터로 저장하도록 구현되면 됩니다. 그러나 추후 학교의 확장의 경우 UserDefaults에는 학교, 해당하는 학교에 대한 캠퍼스, 캠퍼스에 대한 카페테리아 모두가 저장되어야 합니다. 또한 이를 불러오는 UserInfoRepository 또한 해당하는 학교와 그에 따른 캠퍼스, 카페테리아를 UserDefaults 데이터에 접근해서 불러와야하므로 따로 구조를 갖도록 UserDefaults를 초기에 설정하는 것이 맞다고 생각했습니다.

UserDefaultsManager 의 구조는 기본적으로 개발자 선에서 컨트롤 할 수 있는 DataKeyUniversityID 에 따라 StringKey 를 만들어서 저장할 수 있도록 구현할 예정입니다.

또한 UserDefaultsfetchget 구조는 사용자의 universityID를 갖는 DataKey를 통해 UserUniversityDTO를 불러오는 방식으로 구현될 예정입니다.

TaekH commented 6 months ago

본문과 같은 구조로 UserDefaultsManager를 구성중이고, set의 경우 errorthrow하도록 개선할 예정입니다.

static func set<Element>(_ value: Element?, forKey key: String) throws where Element: Codable {
        guard let value = value else { return }
        do {
            let encodedData = try JSONEncoder().encode(value)
            userDefaults?.set(encodedData, forKey: key)
        } catch {
            logger.log(
                level: .error,
                message: .init(stringLiteral: error.localizedDescription)
            )
            //TODO: UserDefaults 를 위한 Error를 따로 구성할지 고민 필요
            throw FileError.fileSaveError(error)
        }
    }