73 lines
2.1 KiB
Go
73 lines
2.1 KiB
Go
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
|
|
}
|