# HG changeset patch # User drewp@bigasterisk.com # Date 1724099825 25200 # Node ID dade5bbd02e30e492e1d1690077e050810a8cd2a # Parent 2991c11668522a81aac97ae77e2b48199672ae43 refactor diff -r 2991c1166852 -r dade5bbd02e3 calsync/mongoclient/cals_collection.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calsync/mongoclient/cals_collection.go Mon Aug 19 13:37:05 2024 -0700 @@ -0,0 +1,80 @@ +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() +} diff -r 2991c1166852 -r dade5bbd02e3 calsync/mongoclient/events_collection.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calsync/mongoclient/events_collection.go Mon Aug 19 13:37:05 2024 -0700 @@ -0,0 +1,57 @@ +package mongoclient + +import ( + "log" + + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo/options" +) + +func (c *MongoClient) UpsertOneEvent(ev MongoEvent) error { + filter := bson.M{"_id": ev.Url} + setFields := bson.M{ + "googleId": ev.GoogleId, + "lastUpdated": ev.LastUpdated, + "htmlLink": ev.HtmlLink, + "title": ev.Title, + } + update := bson.M{"$set": setFields} + _, err := c.eventsCollection.UpdateOne(c.ctx, filter, update, options.Update().SetUpsert(true)) + if err != nil { + return err + } + log.Println(" mongo upserted", ev.Url) + return nil +} + +// func (c *MongoClient) FindEventsIntersecting(t1, t2 time.Time) ([]MongoEvent, error) { +// cur, err := c.eventsCollection.Find(c.ctx, bson.M{ +// "end": bson.M{"$gte": t1}, +// "start": bson.M{"$lte": t2}, +// }) // todo: allday evs +// if err != nil { +// return nil, err +// } +// defer cur.Close(c.ctx) + +// var events []MongoEvent +// for cur.Next(c.ctx) { +// var ev MongoEvent +// if err := cur.Decode(&ev); err != nil { +// return nil, err +// } +// events = append(events, ev) +// } +// return events, nil +// } + +// func (c *MongoClient) CurrentEvents(now time.Time) ([]MongoEvent, error) { +// return c.FindEventsIntersecting(now, now) +// } +// func (c *MongoClient) UpdateOrInsertEvent(ev MongoEvent) error { +// return errors.New("todo") +// } + +// func (c *MongoClient) DeleteEvent(ev MongoEvent) error { +// return errors.New("todo") +// } diff -r 2991c1166852 -r dade5bbd02e3 calsync/mongoclient/mongoclient.go --- a/calsync/mongoclient/mongoclient.go Mon Aug 19 13:25:03 2024 -0700 +++ b/calsync/mongoclient/mongoclient.go Mon Aug 19 13:37:05 2024 -0700 @@ -18,13 +18,6 @@ eventsCollection *mongo.Collection } -// docs in calsCollection -type MongoCal struct { - Url string `bson:"_id"` // bigasterisk.com/... - GoogleId string `bson:"googleId"` - Summary string `bson:"summary"` - Description string `bson:"description"` -} // docs in eventsCollection type MongoEvent struct { @@ -79,122 +72,3 @@ func (c *MongoClient) Close() { c.client.Disconnect(c.ctx) } - -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, - // bson.M{ - // "googleId": cal.GoogleId, - // "summary": cal.Summary, - // "description": cal.Description, - // }, - } - _, 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() -} - -func (c *MongoClient) UpsertOneEvent(ev MongoEvent) error { - filter := bson.M{"_id": ev.Url} - setFields := bson.M{ - "googleId": ev.GoogleId, - "lastUpdated": ev.LastUpdated, - "htmlLink": ev.HtmlLink, - "title": ev.Title, - } - update := bson.M{"$set": setFields} - _, err := c.eventsCollection.UpdateOne(c.ctx, filter, update, options.Update().SetUpsert(true)) - if err != nil { - return err - } - log.Println(" mongo upserted", ev.Url) - return nil -} - -// func (c *MongoClient) FindEventsIntersecting(t1, t2 time.Time) ([]MongoEvent, error) { -// cur, err := c.eventsCollection.Find(c.ctx, bson.M{ -// "end": bson.M{"$gte": t1}, -// "start": bson.M{"$lte": t2}, -// }) // todo: allday evs -// if err != nil { -// return nil, err -// } -// defer cur.Close(c.ctx) - -// var events []MongoEvent -// for cur.Next(c.ctx) { -// var ev MongoEvent -// if err := cur.Decode(&ev); err != nil { -// return nil, err -// } -// events = append(events, ev) -// } -// return events, nil -// } - -// func (c *MongoClient) CurrentEvents(now time.Time) ([]MongoEvent, error) { -// return c.FindEventsIntersecting(now, now) -// } -// func (c *MongoClient) UpdateOrInsertEvent(ev MongoEvent) error { -// return errors.New("todo") -// } - -// func (c *MongoClient) DeleteEvent(ev MongoEvent) error { -// return errors.New("todo") -// }