Skip to content

Commit 8dddf50

Browse files
committed
Refactor user default storage clean up logic
1 parent 00491ed commit 8dddf50

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

ExampleMVVM/Data/PersistentStorages/MoviesQueriesStorage/UserDefaultsStorage/UserDefaultsMoviesQueriesStorage.swift

+23-6
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,14 @@ final class UserDefaultsMoviesQueriesStorage {
3333
userDefaults.set(encoded, forKey: recentsMoviesQueriesKey)
3434
}
3535
}
36-
37-
private func removeQueries(limit: Int, in queries: [MovieQuery]) -> [MovieQuery] {
38-
return queries.count <= limit ? queries : Array(queries[0..<limit])
39-
}
4036
}
4137

4238
extension UserDefaultsMoviesQueriesStorage: MoviesQueriesStorage {
4339

4440
func fetchRecentsQueries(maxCount: Int, completion: @escaping (Result<[MovieQuery], Error>) -> Void) {
4541
DispatchQueue.global(qos: .userInitiated).async { [weak self] in
4642
guard let self = self else { return }
43+
4744
var queries = self.fetchMoviesQuries()
4845
queries = queries.count < self.maxStorageLimit ? queries : Array(queries[0..<maxCount])
4946
completion(.success(queries))
@@ -53,11 +50,31 @@ extension UserDefaultsMoviesQueriesStorage: MoviesQueriesStorage {
5350
func saveRecentQuery(query: MovieQuery, completion: @escaping (Result<MovieQuery, Error>) -> Void) {
5451
DispatchQueue.global(qos: .userInitiated).async { [weak self] in
5552
guard let self = self else { return }
53+
5654
var queries = self.fetchMoviesQuries()
57-
queries = queries.filter { $0 != query }
55+
self.cleanUpQueries(for: query, in: &queries)
5856
queries.insert(query, at: 0)
59-
self.persist(moviesQuries: self.removeQueries(limit: self.maxStorageLimit, in: queries))
57+
self.persist(moviesQuries: queries)
58+
6059
completion(.success(query))
6160
}
6261
}
6362
}
63+
64+
65+
// MARK: - Private
66+
extension UserDefaultsMoviesQueriesStorage {
67+
68+
private func cleanUpQueries(for query: MovieQuery, in queries: inout [MovieQuery]) {
69+
removeDuplicates(for: query, in: &queries)
70+
removeQueries(limit: maxStorageLimit - 1, in: &queries)
71+
}
72+
73+
private func removeDuplicates(for query: MovieQuery, in queries: inout [MovieQuery]) {
74+
queries = queries.filter { $0 != query }
75+
}
76+
77+
private func removeQueries(limit: Int, in queries: inout [MovieQuery]) {
78+
queries = queries.count <= limit ? queries : Array(queries[0..<limit])
79+
}
80+
}

0 commit comments

Comments
 (0)