Mercurial > code > home > repos > gcalendarwatch
view calsync/mongoclient/cals_collection.go @ 50:dade5bbd02e3
refactor
author | drewp@bigasterisk.com |
---|---|
date | Mon, 19 Aug 2024 13:37:05 -0700 |
parents | |
children | a9b720445bcf |
line wrap: on
line source
package mongoclient import ( "log" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo/options" ) // docs in calsCollection type MongoCal struct { Url string `bson:"_id"` // bigasterisk.com/... GoogleId string `bson:"googleId"` Summary string `bson:"summary"` Description string `bson:"description"` } func (c *MongoClient) GetAllCals() ([]MongoCal, error) { cur, err := c.calsCollection.Find(c.ctx, bson.D{}) if err != nil { return nil, err } defer cur.Close(c.ctx) var cals []MongoCal for cur.Next(c.ctx) { var cal MongoCal if err := cur.Decode(&cal); err != nil { return nil, err } cals = append(cals, cal) } return cals, nil } func (c *MongoClient) GetOneCal(calId string) (MongoCal, error) { res := c.calsCollection.FindOne(c.ctx, bson.M{"_id": calId}) var cal MongoCal err := res.Decode(&cal) return cal, err } func (c *MongoClient) UpsertOneCal(cal MongoCal) error { filter := bson.M{"_id": cal.Url} update := bson.M{"$set": cal} _, err := c.calsCollection.UpdateOne(c.ctx, filter, update, options.Update().SetUpsert(true)) if err != nil { return err } return nil } func (c *MongoClient) DeleteCalsNotInSet(urlsToKeep map[string]bool) error { curs, err := c.calsCollection.Find(c.ctx, bson.M{}) if err != nil { return err } defer curs.Close(c.ctx) for curs.Next(c.ctx) { var doc bson.M err = curs.Decode(&doc) if err != nil { return err } calUrl, ok := doc["_id"].(string) if !ok { continue } if !urlsToKeep[calUrl] { log.Println(" cleaning up", calUrl) _, err = c.calsCollection.DeleteOne(c.ctx, bson.M{"_id": doc["_id"]}) if err != nil { return err } } } return curs.Err() }