Как написать функцию, чтобы удалялись данные из firebase при разнице времени создания документа и сегодняшней даты?

Рейтинг: 0Ответов: 1Опубликовано: 04.06.2023

У меня есть приложение на 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")
    }
}