This is an automated email from the ASF dual-hosted git repository.

tianxiaoliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-kie.git


The following commit(s) were added to refs/heads/master by this push:
     new 44d413f  modify the return body format of kv and history (#126)
44d413f is described below

commit 44d413f85881f498df8cd2dfb9c6b558c72844ab
Author: zhulijian <[email protected]>
AuthorDate: Thu Mar 26 20:55:15 2020 +0800

    modify the return body format of kv and history (#126)
    
    * fix doc
    
    * kv response use timestamp
---
 deployments/db.js                           |  4 ++--
 docs/api.yaml                               |  4 ++--
 pkg/model/db_schema.go                      |  4 ++--
 server/resource/v1/doc_struct.go            |  2 +-
 server/resource/v1/history_resource.go      |  6 +-----
 server/resource/v1/history_resource_test.go |  8 ++++----
 server/service/mongo/history/dao.go         | 18 ++++++++++++------
 server/service/mongo/history/service.go     |  2 +-
 server/service/mongo/kv/kv_dao.go           |  9 +++++----
 server/service/service.go                   |  2 +-
 10 files changed, 31 insertions(+), 28 deletions(-)

diff --git a/deployments/db.js b/deployments/db.js
index fd4479d..9f11118 100644
--- a/deployments/db.js
+++ b/deployments/db.js
@@ -44,10 +44,10 @@ db.createCollection( "kv", {
                     bsonType: "object"
                 },
                 create_time: {
-                    bsonType: "string",
+                    bsonType: "long",
                 },
                 update_time: {
-                    bsonType: "string",
+                    bsonType: "long",
                 },
                 status: {
                     bsonType: "string",
diff --git a/docs/api.yaml b/docs/api.yaml
index 753dba6..4171d65 100644
--- a/docs/api.yaml
+++ b/docs/api.yaml
@@ -20,7 +20,7 @@ paths:
         - name: wait
           in: query
           description: wait until any kv changed. for example wait=5s, server 
will not
-            response until 5 seconds during that time window, if any kv 
changed, server
+            response until 5 seconds, during that time window, if any kv 
changed, server
             will return 200 and kv list, otherwise return 304 and empty body
           type: string
         - name: match
@@ -109,7 +109,7 @@ paths:
         - name: wait
           in: query
           description: wait until any kv changed. for example wait=5s, server 
will not
-            response until 5 seconds during that time window, if any kv 
changed, server
+            response until 5 seconds, during that time window, if any kv 
changed, server
             will return 200 and kv list, otherwise return 304 and empty body
           type: string
         - name: match
diff --git a/pkg/model/db_schema.go b/pkg/model/db_schema.go
index c2fb6ad..ede75ee 100644
--- a/pkg/model/db_schema.go
+++ b/pkg/model/db_schema.go
@@ -39,8 +39,8 @@ type KVDoc struct {
        UpdateRevision int64  `json:"update_revision,omitempty" 
bson:"update_revision," yaml:"update_revision,omitempty"`
        Project        string `json:"project,omitempty" 
yaml:"project,omitempty"`
        Status         string `json:"status,omitempty" yaml:"status,omitempty"`
-       CreateTime     string `json:"create_time,omitempty" bson:"create_time," 
yaml:"create_time,omitempty"`
-       UpdateTime     string `json:"update_time,omitempty" bson:"update_time," 
yaml:"update_time,omitempty"`
+       CreateTime     int64  `json:"create_time,omitempty" bson:"create_time," 
yaml:"create_time,omitempty"`
+       UpdateTime     int64  `json:"update_time,omitempty" bson:"update_time," 
yaml:"update_time,omitempty"`
 
        Labels map[string]string `json:"labels,omitempty" 
yaml:"labels,omitempty"` //redundant
        Domain string            `json:"domain,omitempty" 
yaml:"domain,omitempty"` //redundant
diff --git a/server/resource/v1/doc_struct.go b/server/resource/v1/doc_struct.go
index 92a7df1..a56ec08 100644
--- a/server/resource/v1/doc_struct.go
+++ b/server/resource/v1/doc_struct.go
@@ -67,7 +67,7 @@ var (
                ParamType: goRestful.QueryParameterKind,
                Required:  false,
                Desc: "wait until any kv changed. " +
-                       "for example wait=5s, server will not response until 5 
seconds during that time window, " +
+                       "for example wait=5s, server will not response until 5 
seconds, during that time window, " +
                        "if any kv changed, server will return 200 and kv list, 
otherwise return 304 and empty body",
        }
        DocQueryRev = &restful.Parameters{
diff --git a/server/resource/v1/history_resource.go 
b/server/resource/v1/history_resource.go
index 9b6269a..0e0ff97 100644
--- a/server/resource/v1/history_resource.go
+++ b/server/resource/v1/history_resource.go
@@ -54,7 +54,7 @@ func (r *HistoryResource) GetRevisions(context 
*restful.Context) {
                return
        }
        key := context.ReadQueryParameter("key")
-       revisions, _, err := service.HistoryService.GetHistory(context.Ctx, 
keyID,
+       revisions, err := service.HistoryService.GetHistory(context.Ctx, keyID,
                service.WithKey(key),
                service.WithOffset(offset),
                service.WithLimit(limit))
@@ -66,10 +66,6 @@ func (r *HistoryResource) GetRevisions(context 
*restful.Context) {
                WriteErrResponse(context, http.StatusInternalServerError, 
err.Error(), common.ContentTypeText)
                return
        }
-       if len(revisions) == 0 {
-               WriteErrResponse(context, http.StatusNotFound, "no revisions 
found", common.ContentTypeText)
-               return
-       }
        err = writeResponse(context, revisions)
        if err != nil {
                openlogging.Error(err.Error())
diff --git a/server/resource/v1/history_resource_test.go 
b/server/resource/v1/history_resource_test.go
index 63614a9..e46ab06 100644
--- a/server/resource/v1/history_resource_test.go
+++ b/server/resource/v1/history_resource_test.go
@@ -58,10 +58,10 @@ func TestHistoryResource_GetRevisions(t *testing.T) {
        c.ServeHTTP(resp, r)
        body, err := ioutil.ReadAll(resp.Body)
        assert.NoError(t, err)
-       data := make([]*model.KVDoc, 0)
+       var data model.KVResponse
        err = json.Unmarshal(body, &data)
        assert.NoError(t, err)
-       before := len(data)
+       before := len(data.Data)
        assert.GreaterOrEqual(t, before, 1)
 
        t.Run("put again, should has 2 revision", func(t *testing.T) {
@@ -79,9 +79,9 @@ func TestHistoryResource_GetRevisions(t *testing.T) {
                c.ServeHTTP(resp, r)
                body, err := ioutil.ReadAll(resp.Body)
                assert.NoError(t, err)
-               data := make([]*model.KVDoc, 0)
+               var data model.KVResponse
                err = json.Unmarshal(body, &data)
-               assert.Equal(t, before+1, len(data))
+               assert.Equal(t, before+1, len(data.Data))
        })
 
 }
diff --git a/server/service/mongo/history/dao.go 
b/server/service/mongo/history/dao.go
index 414908d..486aedb 100644
--- a/server/service/mongo/history/dao.go
+++ b/server/service/mongo/history/dao.go
@@ -35,7 +35,7 @@ const (
        maxHistoryNum = 100
 )
 
-func getHistoryByKeyID(ctx context.Context, filter bson.M, offset, limit 
int64) ([]*model.KVDoc, int, error) {
+func getHistoryByKeyID(ctx context.Context, filter bson.M, offset, limit 
int64) (*model.KVResponse, error) {
        collection := session.GetDB().Collection(session.CollectionKVRevision)
        opt := options.Find().SetSort(map[string]interface{}{
                "revision": -1,
@@ -46,11 +46,11 @@ func getHistoryByKeyID(ctx context.Context, filter bson.M, 
offset, limit int64)
        }
        curTotal, err := collection.CountDocuments(ctx, filter)
        if err != nil {
-               return nil, 0, err
+               return nil, err
        }
        cur, err := collection.Find(ctx, filter, opt)
        if err != nil {
-               return nil, 0, err
+               return nil, err
        }
        kvs := make([]*model.KVDoc, 0)
        var exist bool
@@ -59,15 +59,21 @@ func getHistoryByKeyID(ctx context.Context, filter bson.M, 
offset, limit int64)
                err := cur.Decode(&elem)
                if err != nil {
                        openlogging.Error("decode error: " + err.Error())
-                       return nil, 0, err
+                       return nil, err
                }
                exist = true
+               elem.Domain = ""
+               elem.Project = ""
                kvs = append(kvs, &elem)
        }
        if !exist {
-               return nil, 0, service.ErrRevisionNotExist
+               return nil, service.ErrRevisionNotExist
        }
-       return kvs, int(curTotal), nil
+       result := &model.KVResponse{
+               Data:  kvs,
+               Total: int(curTotal),
+       }
+       return result, nil
 }
 
 //AddHistory add kv history
diff --git a/server/service/mongo/history/service.go 
b/server/service/mongo/history/service.go
index 8767d80..f6e13c1 100644
--- a/server/service/mongo/history/service.go
+++ b/server/service/mongo/history/service.go
@@ -30,7 +30,7 @@ type Service struct {
 }
 
 //GetHistory get all history by label id
-func (s *Service) GetHistory(ctx context.Context, kvID string, options 
...service.FindOption) ([]*model.KVDoc, int, error) {
+func (s *Service) GetHistory(ctx context.Context, kvID string, options 
...service.FindOption) (*model.KVResponse, error) {
        var filter primitive.M
        opts := service.FindOptions{}
        for _, o := range options {
diff --git a/server/service/mongo/kv/kv_dao.go 
b/server/service/mongo/kv/kv_dao.go
index 0b3a49c..c7fbd07 100644
--- a/server/service/mongo/kv/kv_dao.go
+++ b/server/service/mongo/kv/kv_dao.go
@@ -48,8 +48,9 @@ func createKey(ctx context.Context, kv *model.KVDoc) 
(*model.KVDoc, error) {
        }
        kv.UpdateRevision = revision
        kv.CreateRevision = revision
-       kv.CreateTime = time.Now().String()
-       kv.UpdateTime = time.Now().String()
+       now := time.Now().Unix()
+       kv.CreateTime = now
+       kv.UpdateTime = now
        _, err = collection.InsertOne(ctx, kv)
        if err != nil {
                openlogging.Error("create error", 
openlogging.WithTags(openlogging.Tags{
@@ -73,7 +74,7 @@ func createKey(ctx context.Context, kv *model.KVDoc) 
(*model.KVDoc, error) {
 //updateKeyValue update key value and add new revision
 func updateKeyValue(ctx context.Context, kv *model.KVDoc) error {
        var err error
-       kv.UpdateTime = time.Now().String()
+       kv.UpdateTime = time.Now().Unix()
        kv.UpdateRevision, err = counter.ApplyRevision(ctx, kv.Domain)
        if err != nil {
                return err
@@ -239,7 +240,7 @@ func findKVByLabelID(ctx context.Context, domain, labelID, 
key string, project s
 
 }
 
-//findKVByID get kvs by kv id
+//findKVDocByID get kvs by kv id
 func findKVDocByID(ctx context.Context, domain, project, kvID string) 
(*model.KVDoc, error) {
        filter := bson.M{"id": kvID, "domain": domain, "project": project}
        kvs, err := findOneKey(ctx, filter)
diff --git a/server/service/service.go b/server/service/service.go
index a0d238d..d7fa613 100644
--- a/server/service/service.go
+++ b/server/service/service.go
@@ -52,7 +52,7 @@ type KV interface {
 
 //History provide api of History entity
 type History interface {
-       GetHistory(ctx context.Context, keyID string, options ...FindOption) 
([]*model.KVDoc, int, error)
+       GetHistory(ctx context.Context, keyID string, options ...FindOption) 
(*model.KVResponse, error)
 }
 
 //Revision is global revision number management

Reply via email to