From 058328fcb74eb624ff8212091838c3cd9865a488 Mon Sep 17 00:00:00 2001 From: Hiromu OCHIAI Date: Sun, 12 Jan 2025 16:24:58 +0900 Subject: [PATCH] =?UTF-8?q?ignore=E3=81=A8mtg=E3=81=AF=E3=80=81=E3=81=9D?= =?UTF-8?q?=E3=82=82=E3=81=9D=E3=82=82hub=E3=81=AB=E5=85=A5=E3=82=8C?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/tasks/fetch.go | 46 ++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/server/tasks/fetch.go b/server/tasks/fetch.go index b38847a..df3929c 100644 --- a/server/tasks/fetch.go +++ b/server/tasks/fetch.go @@ -4,7 +4,6 @@ import ( "fmt" "net/http" "os" - "strings" "time" "cloud.google.com/go/datastore" @@ -33,7 +32,7 @@ func CronFetchGoogleEvents(w http.ResponseWriter, req *http.Request) { id := os.Getenv("GOOGLE_CALENDAR_ID") now := time.Now() - events, err := service.Events.List(id). + all, err := service.Events.List(id). ShowDeleted(false). SingleEvents(true). TimeMin(now.Format(time.RFC3339)). @@ -47,8 +46,25 @@ func CronFetchGoogleEvents(w http.ResponseWriter, req *http.Request) { return } + // #ignore と、#mtg が含まれるイベントは、そもそもHubに入れない + targets := []calendar.Event{} + ignored := []calendar.Event{} + for _, item := range all.Items { + switch { + case models.EventExpressionIgnore.MatchString(item.Summary): + ignored = append(ignored, *item) + case models.EventExpressionMeeting.MatchString(item.Summary): + ignored = append(ignored, *item) + default: + targets = append(targets, *item) + } + } + if req.URL.Query().Get("dry") != "" { - marmoset.RenderJSON(w, 200, events) + marmoset.RenderJSON(w, 200, marmoset.P{ + "targets": targets, + "ignored": ignored, + }) return } @@ -61,21 +77,18 @@ func CronFetchGoogleEvents(w http.ResponseWriter, req *http.Request) { } defer client.Close() - var ignored, created int - + var created, updated int if _, err := client.RunInTransaction(ctx, func(tx *datastore.Transaction) error { - for _, item := range events.Items { - if strings.Contains(item.Summary, "#ignore") { - ignored += 1 - continue - } + for _, item := range targets { ev := models.Event{} key := datastore.NameKey(models.KindEvent, item.Id, nil) if err := tx.Get(key, &ev); err != nil { - created += 1 fmt.Printf("[DEBUG] NEW EVENT: %+v\n", item) + created += 1 + } else { + updated += 1 } - ev.Google = models.CreateEventFromCalendarAPI(item) + ev.Google = models.CreateEventFromCalendarAPI(&item) if _, err := tx.Put(key, &ev); err != nil { return err } @@ -91,10 +104,11 @@ func CronFetchGoogleEvents(w http.ResponseWriter, req *http.Request) { marmoset.Render(w).JSON(http.StatusOK, marmoset.P{ "message": "ok", "events": map[string]any{ - "total": len(events.Items), - "ignored": ignored, - "created": created, - "updated": len(events.Items) - (created + ignored), + "total": len(all.Items), + "ignored": len(ignored), + "created": created, + "updated": updated, + "validation": len(all.Items) == len(ignored)+created+updated, }, }) }