package dbAccess import ( "context" "time" "git.fjla.uk/owlboard/timetable-mgr/log" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo/options" "go.uber.org/zap" ) // CAUTION: Drops the collection named in collectionName func DropCollection(collectionName string) error { log.Info("Dropping collection", zap.String("Collection Name", collectionName)) database := MongoClient.Database(DatabaseName) collection := database.Collection(collectionName) err := collection.Drop(context.Background()) if err != nil { log.Error("Error dropping collection", zap.String("Collection Name", collectionName), zap.Error(err)) return err } return nil } // Checks the update time (unix timestamp) of the collection named in collectionName, uses 'type: collection' entries in the meta collection func CheckUpdateTime(collectionName string) (int64, error) { database := MongoClient.Database(DatabaseName) collection := database.Collection(MetaCollection) filter := bson.D{ {Key: "target", Value: collectionName}, {Key: "type", Value: "collection"}, } var result struct { Updated int64 `bson:"updated"` } err := collection.FindOne(context.Background(), filter).Decode(&result) if err != nil { return 0, err } return result.Updated, nil } // Sets a new update time (unix timestamp) of the collection named in collectionName. The update time is calculated within the function. func SetUpdateTime(collectionName string) error { log.Info("Setting update time", zap.String("collection", collectionName)) database := MongoClient.Database(DatabaseName) collection := database.Collection("meta") options := options.Update().SetUpsert(true) updateTime := time.Now().Unix() filter := bson.M{ "target": collectionName, "type": "collection", } update := bson.M{ "$set": bson.M{ "updated": updateTime, "updated_time": time.Now().In(time.UTC), "target": collectionName, "type": "collection", }, } _, err := collection.UpdateOne(context.Background(), filter, update, options) if err != nil { log.Error("Error setting update time", zap.String("collection", collectionName), zap.Error(err)) return err } return nil }