From 184675a9b740402745d9c0d3a6d6b3d85189de74 Mon Sep 17 00:00:00 2001 From: mountain Date: Wed, 23 Aug 2023 17:48:47 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=84=EC=A0=95=20=EC=A0=9C=EC=9E=AC=20?= =?UTF-8?q?=EB=8F=99=EC=9E=91=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/api.go | 22 ++++++++++++++++++---- core/api_test.go | 39 +++++++++++++++++++++++++++++++++++++++ core/maingate.go | 10 +++++----- core/service.go | 13 ++++++++++--- go.mod | 2 +- go.sum | 2 ++ 6 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 core/api_test.go diff --git a/core/api.go b/core/api.go index e2c0b95..90f5f1b 100644 --- a/core/api.go +++ b/core/api.go @@ -165,13 +165,27 @@ func (caller apiCaller) blockAPI(w http.ResponseWriter, r *http.Request) error { enc.Encode(mg.bl.all()) } else if r.Method == "PUT" { body, _ := io.ReadAll(r.Body) - var bi blockinfo - if err := json.Unmarshal(body, &bi); err != nil { + + var bipl blockinfoWithStringId + if err := json.Unmarshal(body, &bipl); err != nil { return err } - _, _, err := mg.mongoClient.Update(CollectionBlock, bson.M{ - "_id": primitive.NewObjectID(), + accid, err := primitive.ObjectIDFromHex(bipl.StrId) + if err != nil { + return err + } + + bi := blockinfo{ + Start: primitive.NewDateTimeFromTime(time.Unix(bipl.StartUnix, 0)), + End: primitive.NewDateTimeFromTime(time.Unix(bipl.EndUnix, 0)), + Reason: bipl.Reason, + } + + logger.Println("bi :", accid, bi) + + _, _, err = mg.mongoClient.Update(CollectionBlock, bson.M{ + "_id": accid, }, bson.M{ "$set": &bi, }, options.Update().SetUpsert(true)) diff --git a/core/api_test.go b/core/api_test.go new file mode 100644 index 0000000..a0f883b --- /dev/null +++ b/core/api_test.go @@ -0,0 +1,39 @@ +package core + +import ( + "context" + "fmt" + "testing" + "time" + + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo/options" + "repositories.action2quare.com/ayo/gocommon" +) + +func TestMakeLocalUniqueId(t *testing.T) { + ts := int64(1690815600) + start := primitive.NewDateTimeFromTime(time.Unix(ts, 0)) + ts = int64(1693493999) + end := primitive.NewDateTimeFromTime(time.Unix(ts, 0)) + + fmt.Println(start.Time().Format(time.RFC3339)) + fmt.Println(end.Time().Format(time.RFC3339)) + + mongoClient, err := gocommon.NewMongoClient(context.Background(), "mongodb://121.134.91.160:27018/?replicaSet=rs0&retrywrites=true", "mountain-maingate") + if err != nil { + t.Error(err) + } + + bi := blockinfo{ + Start: start, + End: end, + Reason: "test", + } + mongoClient.Update(CollectionBlock, bson.M{ + "_id": primitive.NewObjectID(), + }, bson.M{ + "$set": &bi, + }, options.Update().SetUpsert(true)) +} diff --git a/core/maingate.go b/core/maingate.go index 88dd1f5..1f22c67 100644 --- a/core/maingate.go +++ b/core/maingate.go @@ -340,10 +340,10 @@ func (mg *Maingate) prepare(context context.Context) (err error) { return err } - if err = mg.mongoClient.MakeUniqueIndices(CollectionBlock, map[string]bson.D{ - "codeaccid": {{Key: "code", Value: 1}, {Key: "accid", Value: 1}}, - }); err != nil { - return err + if *devflag { + if err = mg.mongoClient.DropIndex(CollectionBlock, "codeaccid"); err != nil { + return err + } } if err = mg.mongoClient.MakeExpireIndex(CollectionBlock, int32(3)); err != nil { @@ -417,7 +417,7 @@ func (mg *Maingate) prepare(context context.Context) (err error) { mg.wl.init(whites) var blocks []*blockinfo - if err := mg.mongoClient.AllAs(CollectionBlock, &blocks, options.Find().SetReturnKey(false)); err != nil { + if err := mg.mongoClient.AllAs(CollectionBlock, &blocks); err != nil { return err } mg.bl.init(blocks) diff --git a/core/service.go b/core/service.go index 0cc7c90..e13c8bd 100644 --- a/core/service.go +++ b/core/service.go @@ -21,10 +21,17 @@ import ( ) type blockinfo struct { - Accid primitive.ObjectID `bson:"_id" json:"_id"` Start primitive.DateTime `bson:"start" json:"start"` - End primitive.DateTime `bson:"_ts"` + End primitive.DateTime `bson:"_ts" json:"_ts"` Reason string `bson:"reason" json:"reason"` + Accid primitive.ObjectID `bson:"_id,omitempty" json:"_id,omitempty"` +} + +type blockinfoWithStringId struct { + Reason string `bson:"reason" json:"reason"` + StrId string `bson:"id" json:"id"` + StartUnix int64 `bson:"start_unix" json:"start_unix"` + EndUnix int64 `bson:"end_unix" json:"end_unix"` } type whitelistmember struct { @@ -53,7 +60,7 @@ func (bi *blockinfo) Key() primitive.ObjectID { } func (bi *blockinfo) Expired() bool { - return bi.End.Time().Before(time.Now().UTC()) + return bi.End.Time().Unix() < time.Now().UTC().Unix() } type usertokeninfo struct { diff --git a/go.mod b/go.mod index 42a4fa0..9c42c8f 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/golang-jwt/jwt v3.2.2+incompatible go.mongodb.org/mongo-driver v1.11.7 google.golang.org/api v0.128.0 - repositories.action2quare.com/ayo/gocommon v0.0.0-20230801051747-b501160efc3b + repositories.action2quare.com/ayo/gocommon v0.0.0-20230823084014-c34045e215fc ) require ( diff --git a/go.sum b/go.sum index 660e2c0..f59b0e6 100644 --- a/go.sum +++ b/go.sum @@ -329,3 +329,5 @@ repositories.action2quare.com/ayo/gocommon v0.0.0-20230710085810-8173216e9574 h1 repositories.action2quare.com/ayo/gocommon v0.0.0-20230710085810-8173216e9574/go.mod h1:rn6NA28Mej+qgLNx/Bu2wsdGyIycmacqlNP6gUXX2a0= repositories.action2quare.com/ayo/gocommon v0.0.0-20230801051747-b501160efc3b h1:yV1cBeu0GFxkDD6TDxzKv/rM3OMtyt1JXpeqDF5IO3Y= repositories.action2quare.com/ayo/gocommon v0.0.0-20230801051747-b501160efc3b/go.mod h1:PdpZ16O1czKKxCxn+0AFNaEX/0kssYwC3G8jR0V7ybw= +repositories.action2quare.com/ayo/gocommon v0.0.0-20230823084014-c34045e215fc h1:/nFKyjpcfMCdC7vrEZ7+IQOA5RoMmcBUHNRl40JN3ys= +repositories.action2quare.com/ayo/gocommon v0.0.0-20230823084014-c34045e215fc/go.mod h1:PdpZ16O1czKKxCxn+0AFNaEX/0kssYwC3G8jR0V7ybw=