From 29f784cc207f566bc00aaffa6512a3d96bc1476e Mon Sep 17 00:00:00 2001 From: boojack Date: Wed, 15 Mar 2023 00:04:52 +0800 Subject: [PATCH] feat: update find resource with linked memo amount (#1354) * feat: update find resource with linked memo amount * chore: remove unused test --- plugin/http-getter/image_test.go | 21 -------------- server/resource.go | 10 ------- store/resource.go | 47 ++++++++++++++++++-------------- 3 files changed, 26 insertions(+), 52 deletions(-) delete mode 100644 plugin/http-getter/image_test.go diff --git a/plugin/http-getter/image_test.go b/plugin/http-getter/image_test.go deleted file mode 100644 index a81d3031..00000000 --- a/plugin/http-getter/image_test.go +++ /dev/null @@ -1,21 +0,0 @@ -package getter - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestGetImage(t *testing.T) { - tests := []struct { - urlStr string - }{ - { - urlStr: "https://star-history.com/bytebase.webp", - }, - } - for _, test := range tests { - _, err := GetImage(test.urlStr) - require.NoError(t, err) - } -} diff --git a/server/resource.go b/server/resource.go index 13dd8879..a463ac59 100644 --- a/server/resource.go +++ b/server/resource.go @@ -244,16 +244,6 @@ func (s *Server) registerResourceRoutes(g *echo.Group) { if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to fetch resource list").SetInternal(err) } - - for _, resource := range list { - memoResourceList, err := s.Store.FindMemoResourceList(ctx, &api.MemoResourceFind{ - ResourceID: &resource.ID, - }) - if err != nil { - return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find memo resource list").SetInternal(err) - } - resource.LinkedMemoAmount = len(memoResourceList) - } return c.JSON(http.StatusOK, composeResponse(list)) }) diff --git a/store/resource.go b/store/resource.go index 81f2bd38..351c11b2 100644 --- a/store/resource.go +++ b/store/resource.go @@ -22,12 +22,13 @@ type resourceRaw struct { UpdatedTs int64 // Domain specific fields - Filename string - Blob []byte - ExternalLink string - Type string - Size int64 - Visibility api.Visibility + Filename string + Blob []byte + ExternalLink string + Type string + Size int64 + Visibility api.Visibility + LinkedMemoAmount int } func (raw *resourceRaw) toResource() *api.Resource { @@ -40,12 +41,13 @@ func (raw *resourceRaw) toResource() *api.Resource { UpdatedTs: raw.UpdatedTs, // Domain specific fields - Filename: raw.Filename, - Blob: raw.Blob, - ExternalLink: raw.ExternalLink, - Type: raw.Type, - Size: raw.Size, - Visibility: raw.Visibility, + Filename: raw.Filename, + Blob: raw.Blob, + ExternalLink: raw.ExternalLink, + Type: raw.Type, + Size: raw.Size, + Visibility: raw.Visibility, + LinkedMemoAmount: raw.LinkedMemoAmount, } } @@ -278,32 +280,35 @@ func (s *Store) findResourceListImpl(ctx context.Context, tx *sql.Tx, find *api. where, args := []string{"1 = 1"}, []interface{}{} if v := find.ID; v != nil { - where, args = append(where, "id = ?"), append(args, *v) + where, args = append(where, "resource.id = ?"), append(args, *v) } if v := find.CreatorID; v != nil { - where, args = append(where, "creator_id = ?"), append(args, *v) + where, args = append(where, "resource.creator_id = ?"), append(args, *v) } if v := find.Filename; v != nil { - where, args = append(where, "filename = ?"), append(args, *v) + where, args = append(where, "resource.filename = ?"), append(args, *v) } if v := find.MemoID; v != nil { - where, args = append(where, "id in (SELECT resource_id FROM memo_resource WHERE memo_id = ?)"), append(args, *v) + where, args = append(where, "resource.id in (SELECT resource_id FROM memo_resource WHERE memo_id = ?)"), append(args, *v) } - fields := []string{"id", "filename", "external_link", "type", "size", "creator_id", "created_ts", "updated_ts"} + fields := []string{"resource.id", "resource.filename", "resource.external_link", "resource.type", "resource.size", "resource.creator_id", "resource.created_ts", "resource.updated_ts"} if find.GetBlob { - fields = append(fields, "blob") + fields = append(fields, "resource.blob") } if s.profile.IsDev() { - fields = append(fields, "visibility") + fields = append(fields, "resource.visibility") } query := fmt.Sprintf(` SELECT + COUNT(DISTINCT memo_resource.memo_id) AS linked_memo_amount, %s FROM resource + LEFT JOIN memo_resource ON resource.id = memo_resource.resource_id WHERE %s - ORDER BY id DESC + GROUP BY resource.id + ORDER BY resource.id DESC `, strings.Join(fields, ", "), strings.Join(where, " AND ")) rows, err := tx.QueryContext(ctx, query, args...) if err != nil { @@ -315,6 +320,7 @@ func (s *Store) findResourceListImpl(ctx context.Context, tx *sql.Tx, find *api. for rows.Next() { var resourceRaw resourceRaw dests := []interface{}{ + &resourceRaw.LinkedMemoAmount, &resourceRaw.ID, &resourceRaw.Filename, &resourceRaw.ExternalLink, @@ -333,7 +339,6 @@ func (s *Store) findResourceListImpl(ctx context.Context, tx *sql.Tx, find *api. if err := rows.Scan(dests...); err != nil { return nil, FormatError(err) } - resourceRawList = append(resourceRawList, &resourceRaw) }