Как написать функцию, чтобы удалялись данные из firebase при разнице времени создания документа и сегодняшней даты?
У меня есть приложение на swiftui с использованием firebase.
В базе данных при создании документа сохраняются 2 необязательных параметра: массив upPostPlusDay и счетчик upPostPlusDayValueCount, ну и дата создания документа publishedDate (timestamp).
Помогите, пожалуйста, написать функцию, чтобы при разнице в дате создания документа и сегодняшней дате, например, в 7 дней, значение массива удалялось, а значение счетчика обнулялось.
В массиве может содержаться только одно значение.
Вот код модели для записи параметров в базу данных:
import SwiftUI
import FirebaseFirestoreSwift
struct Post: Identifiable, Codable, Equatable, Hashable {
@DocumentID var id: String?
var text: String
var postHead: String
var postAddress: String
var imageURL: URL?
var imageReferenceID: String = ""
var publishedDate: Date = Date()
var likedIDs: [String] = []
var dislikedIDs: [String] = []
var plusFavorites: [String] = []
var upPostPlusDay: [Int] = []
var upPostPlusDayValueCount: Double = 0
var userName: String
var userUID: String
var userProfileURL: URL
var userBioLink: String
enum CodingKeys: CodingKey {
case id
case text
case postHead
case postAddress
case imageURL
case imageReferenceID
case publishedDate
case likedIDs
case dislikedIDs
case plusFavorites
case upPostPlusDay
case upPostPlusDayValueCount
case userName
case userUID
case userProfileURL
case userBioLink
}
}
Ответы (1 шт):
Для реализации такой функции вам нужно добавить в модель Post функцию, которая будет проверять разницу между сегодняшней датой и publishedDate, и если она больше или равна 7 дням, то удалять элемент массива upPostPlusDay и обнулять значение upPostPlusDayValueCount. Также вы можете добавить эту функцию как метод объекта Post для более удобного вызова.
Вот пример кода для такой функции:
func updateUpPostPlusDay() {
let calendar = Calendar.current
let currentDate = Date()
if let publishedDate = self.publishedDate {
let components = calendar.dateComponents([.day], from: publishedDate, to: currentDate)
if let days = components.day, days >= 7 {
// remove element from upPostPlusDay array
self.upPostPlusDay.removeAll()
// reset upPostPlusDayValueCount
self.upPostPlusDayValueCount = 0
}
}
}
Вы можете вызывать эту функцию после загрузки каждого документа из базы данных Firebase, чтобы проверить, нужно ли обновлять данные в объекте Post.
Например:
let postRef = Firestore.firestore().collection("posts").document("post-id")
postRef.getDocument { (document, error) in
if let document = document, document.exists {
do {
let post = try document.data(as: Post.self)
post?.updateUpPostPlusDay()
// use the updated post object here
} catch let error {
print("Error getting post: \(error)")
}
} else {
print("Post document does not exist")
}
}