diff --git a/api/v1/memo.go b/api/v1/memo.go index 3291607a..6f1e6324 100644 --- a/api/v1/memo.go +++ b/api/v1/memo.go @@ -147,9 +147,7 @@ func (s *APIV1Service) registerMemoRoutes(g *echo.Group) { // @Router /api/v1/memo [GET] func (s *APIV1Service) GetMemoList(c echo.Context) error { ctx := c.Request().Context() - hasParentFlag := false find := &store.FindMemo{ - HasParent: &hasParentFlag, OrderByPinned: true, } if userID, err := util.ConvertStringToInt32(c.QueryParam("creatorId")); err == nil { @@ -450,10 +448,7 @@ func (s *APIV1Service) CreateMemo(c echo.Context) error { // - creatorUsername is listed at ./web/src/helpers/api.ts:82, but it's not present here func (s *APIV1Service) GetAllMemos(c echo.Context) error { ctx := c.Request().Context() - hasParentFlag := false - findMemoMessage := &store.FindMemo{ - HasParent: &hasParentFlag, - } + findMemoMessage := &store.FindMemo{} _, ok := c.Get(userIDContextKey).(int32) if !ok { findMemoMessage.VisibilityList = []store.Visibility{store.Public} @@ -510,10 +505,8 @@ func (s *APIV1Service) GetAllMemos(c echo.Context) error { func (s *APIV1Service) GetMemoStats(c echo.Context) error { ctx := c.Request().Context() normalStatus := store.Normal - hasParentFlag := false findMemoMessage := &store.FindMemo{ RowStatus: &normalStatus, - HasParent: &hasParentFlag, ExcludeContent: true, } if creatorID, err := util.ConvertStringToInt32(c.QueryParam("creatorId")); err == nil { @@ -744,8 +737,16 @@ func (s *APIV1Service) UpdateMemo(c echo.Context) error { return echo.NewHTTPError(http.StatusNotFound, fmt.Sprintf("Memo not found: %d", memoID)) } + memoMessage, err := s.convertMemoFromStore(ctx, memo) + if err != nil { + return echo.NewHTTPError(http.StatusInternalServerError, "Failed to compose memo").SetInternal(err) + } if patchMemoRequest.ResourceIDList != nil { - addedResourceIDList, removedResourceIDList := getIDListDiff(memo.ResourceIDList, patchMemoRequest.ResourceIDList) + originResourceIDList := []int32{} + for _, resource := range memoMessage.ResourceList { + originResourceIDList = append(originResourceIDList, resource.ID) + } + addedResourceIDList, removedResourceIDList := getIDListDiff(originResourceIDList, patchMemoRequest.ResourceIDList) for _, resourceID := range addedResourceIDList { if _, err := s.Store.UpdateResource(ctx, &store.UpdateResource{ ID: resourceID, @@ -764,15 +765,15 @@ func (s *APIV1Service) UpdateMemo(c echo.Context) error { } if patchMemoRequest.RelationList != nil { - patchMemoRelationList := make([]*store.MemoRelation, 0) + patchMemoRelationList := make([]*MemoRelation, 0) for _, memoRelation := range patchMemoRequest.RelationList { - patchMemoRelationList = append(patchMemoRelationList, &store.MemoRelation{ + patchMemoRelationList = append(patchMemoRelationList, &MemoRelation{ MemoID: memo.ID, RelatedMemoID: memoRelation.RelatedMemoID, - Type: store.MemoRelationType(memoRelation.Type), + Type: memoRelation.Type, }) } - addedMemoRelationList, removedMemoRelationList := getMemoRelationListDiff(memo.RelationList, patchMemoRelationList) + addedMemoRelationList, removedMemoRelationList := getMemoRelationListDiff(memoMessage.RelationList, patchMemoRelationList) for _, memoRelation := range addedMemoRelationList { if _, err := s.Store.UpsertMemoRelation(ctx, memoRelation); err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to upsert memo relation").SetInternal(err) @@ -810,7 +811,7 @@ func (s *APIV1Service) UpdateMemo(c echo.Context) error { } func (s *APIV1Service) convertMemoFromStore(ctx context.Context, memo *store.Memo) (*Memo, error) { - memoResponse := &Memo{ + memoMessage := &Memo{ ID: memo.ID, RowStatus: RowStatus(memo.RowStatus.String()), CreatorID: memo.CreatorID, @@ -823,63 +824,81 @@ func (s *APIV1Service) convertMemoFromStore(ctx context.Context, memo *store.Mem // Compose creator name. user, err := s.Store.GetUser(ctx, &store.FindUser{ - ID: &memoResponse.CreatorID, + ID: &memoMessage.CreatorID, }) if err != nil { return nil, err } if user.Nickname != "" { - memoResponse.CreatorName = user.Nickname + memoMessage.CreatorName = user.Nickname } else { - memoResponse.CreatorName = user.Username + memoMessage.CreatorName = user.Username } - memoResponse.CreatorUsername = user.Username + memoMessage.CreatorUsername = user.Username // Compose display ts. - memoResponse.DisplayTs = memoResponse.CreatedTs + memoMessage.DisplayTs = memoMessage.CreatedTs // Find memo display with updated ts setting. memoDisplayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx) if err != nil { return nil, err } if memoDisplayWithUpdatedTs { - memoResponse.DisplayTs = memoResponse.UpdatedTs + memoMessage.DisplayTs = memoMessage.UpdatedTs } + // Compose related resources. + resourceList, err := s.Store.ListResources(ctx, &store.FindResource{ + MemoID: &memo.ID, + }) + if err != nil { + return nil, errors.Wrapf(err, "failed to list resources") + } + memoMessage.ResourceList = []*Resource{} + for _, resource := range resourceList { + memoMessage.ResourceList = append(memoMessage.ResourceList, convertResourceFromStore(resource)) + } + + // Compose related memo relations. relationList := []*MemoRelation{} - for _, relation := range memo.RelationList { + tempList, err := s.Store.ListMemoRelations(ctx, &store.FindMemoRelation{ + MemoID: &memo.ID, + }) + if err != nil { + return nil, err + } + for _, relation := range tempList { relationList = append(relationList, convertMemoRelationFromStore(relation)) } - memoResponse.RelationList = relationList - - resourceList := []*Resource{} - for _, resourceID := range memo.ResourceIDList { - resource, err := s.Store.GetResource(ctx, &store.FindResource{ - ID: &resourceID, - }) - if resource != nil && err == nil { - resourceList = append(resourceList, convertResourceFromStore(resource)) - } + tempList, err = s.Store.ListMemoRelations(ctx, &store.FindMemoRelation{ + RelatedMemoID: &memo.ID, + }) + if err != nil { + return nil, err } - memoResponse.ResourceList = resourceList - - if memo.ParentID != nil { - parentMemo, err := s.Store.GetMemo(ctx, &store.FindMemo{ - ID: memo.ParentID, - }) - if err != nil { - return nil, err - } - if parentMemo != nil { - parent, err := s.convertMemoFromStore(ctx, parentMemo) + for _, relation := range tempList { + relationList = append(relationList, convertMemoRelationFromStore(relation)) + } + memoMessage.RelationList = relationList + for _, relation := range memoMessage.RelationList { + if relation.MemoID == memoMessage.ID && relation.Type == MemoRelationComment { + parentMemo, err := s.Store.GetMemo(ctx, &store.FindMemo{ + ID: &relation.RelatedMemoID, + }) if err != nil { return nil, err } - memoResponse.Parent = parent + if parentMemo != nil { + parent, err := s.convertMemoFromStore(ctx, parentMemo) + if err != nil { + return nil, err + } + memoMessage.Parent = parent + } } } - return memoResponse, nil + return memoMessage, nil } func (s *APIV1Service) getMemoDisplayWithUpdatedTsSettingValue(ctx context.Context) (bool, error) { @@ -912,7 +931,7 @@ func convertCreateMemoRequestToMemoMessage(memoCreate *CreateMemoRequest) *store } } -func getMemoRelationListDiff(oldList, newList []*store.MemoRelation) (addedList, removedList []*store.MemoRelation) { +func getMemoRelationListDiff(oldList, newList []*MemoRelation) (addedList, removedList []*store.MemoRelation) { oldMap := map[string]bool{} for _, relation := range oldList { oldMap[fmt.Sprintf("%d-%s", relation.RelatedMemoID, relation.Type)] = true @@ -924,13 +943,21 @@ func getMemoRelationListDiff(oldList, newList []*store.MemoRelation) (addedList, for _, relation := range oldList { key := fmt.Sprintf("%d-%s", relation.RelatedMemoID, relation.Type) if !newMap[key] { - removedList = append(removedList, relation) + removedList = append(removedList, &store.MemoRelation{ + MemoID: relation.MemoID, + RelatedMemoID: relation.RelatedMemoID, + Type: store.MemoRelationType(relation.Type), + }) } } for _, relation := range newList { key := fmt.Sprintf("%d-%s", relation.RelatedMemoID, relation.Type) if !oldMap[key] { - addedList = append(addedList, relation) + addedList = append(addedList, &store.MemoRelation{ + MemoID: relation.MemoID, + RelatedMemoID: relation.RelatedMemoID, + Type: store.MemoRelationType(relation.Type), + }) } } return addedList, removedList diff --git a/api/v1/rss.go b/api/v1/rss.go index 8d8da824..32cddd58 100644 --- a/api/v1/rss.go +++ b/api/v1/rss.go @@ -12,7 +12,6 @@ import ( "github.com/gorilla/feeds" "github.com/labstack/echo/v4" - "github.com/pkg/errors" "github.com/yuin/goldmark" "github.com/usememos/memos/internal/util" @@ -114,25 +113,19 @@ func (s *APIV1Service) generateRSSFromMemoList(ctx context.Context, memoList []* var itemCountLimit = util.Min(len(memoList), maxRSSItemCount) feed.Items = make([]*feeds.Item, itemCountLimit) for i := 0; i < itemCountLimit; i++ { - memo := memoList[i] - feed.Items[i] = &feeds.Item{ - Title: getRSSItemTitle(memo.Content), - Link: &feeds.Link{Href: baseURL + "/m/" + fmt.Sprintf("%d", memo.ID)}, - Description: getRSSItemDescription(memo.Content), - Created: time.Unix(memo.CreatedTs, 0), - Enclosure: &feeds.Enclosure{Url: baseURL + "/m/" + fmt.Sprintf("%d", memo.ID) + "/image"}, + memoMessage, err := s.convertMemoFromStore(ctx, memoList[i]) + if err != nil { + return "", err } - if len(memo.ResourceIDList) > 0 { - resourceID := memo.ResourceIDList[0] - resource, err := s.Store.GetResource(ctx, &store.FindResource{ - ID: &resourceID, - }) - if err != nil { - return "", err - } - if resource == nil { - return "", errors.Errorf("Resource not found: %d", resourceID) - } + feed.Items[i] = &feeds.Item{ + Title: getRSSItemTitle(memoMessage.Content), + Link: &feeds.Link{Href: baseURL + "/m/" + fmt.Sprintf("%d", memoMessage.ID)}, + Description: getRSSItemDescription(memoMessage.Content), + Created: time.Unix(memoMessage.CreatedTs, 0), + Enclosure: &feeds.Enclosure{Url: baseURL + "/m/" + fmt.Sprintf("%d", memoMessage.ID) + "/image"}, + } + if len(memoMessage.ResourceList) > 0 { + resource := memoMessage.ResourceList[0] enclosure := feeds.Enclosure{} if resource.ExternalLink != "" { enclosure.Url = resource.ExternalLink diff --git a/store/db/mysql/memo.go b/store/db/mysql/memo.go index 71a186ae..2bb15d36 100644 --- a/store/db/mysql/memo.go +++ b/store/db/mysql/memo.go @@ -8,7 +8,6 @@ import ( "github.com/pkg/errors" - "github.com/usememos/memos/internal/util" "github.com/usememos/memos/store" ) @@ -107,7 +106,17 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo } orders = append(orders, "`id` DESC") - query := "SELECT `memo`.`id` AS `id`, `memo`.`creator_id` AS `creator_id`, UNIX_TIMESTAMP(`memo`.`created_ts`) AS `created_ts`, UNIX_TIMESTAMP(`memo`.`updated_ts`) AS `updated_ts`, `memo`.`row_status` AS `row_status`, `memo`.`content` AS `content`, `memo`.`visibility` AS `visibility`, MAX(CASE WHEN `memo_organizer`.`pinned` = 1 THEN 1 ELSE 0 END) AS `pinned`, GROUP_CONCAT(`resource`.`id`) AS `resource_id_list`, (SELECT GROUP_CONCAT(`memo_id`,':',`related_memo_id`,':',`type`) FROM `memo_relation` WHERE `memo_relation`.`memo_id` = `memo`.`id` OR `memo_relation`.`related_memo_id` = `memo`.`id` ) AS `relation_list` FROM `memo` LEFT JOIN `memo_organizer` ON `memo`.`id` = `memo_organizer`.`memo_id` LEFT JOIN `resource` ON `memo`.`id` = `resource`.`memo_id` WHERE " + strings.Join(where, " AND ") + " GROUP BY `memo`.`id` ORDER BY " + strings.Join(orders, ", ") + fields := []string{ + "`memo`.`id` AS `id`", + "`memo`.`creator_id` AS `creator_id`", + "UNIX_TIMESTAMP(`memo`.`created_ts`) AS `created_ts`", + "UNIX_TIMESTAMP(`memo`.`updated_ts`) AS `updated_ts`", + "`memo`.`row_status` AS `row_status`", + "`memo`.`content` AS `content`", + "`memo`.`visibility` AS `visibility`", + "MAX(CASE WHEN `memo_organizer`.`pinned` = 1 THEN 1 ELSE 0 END) AS `pinned`", + } + query := "SELECT " + strings.Join(fields, ",\n") + " FROM `memo` LEFT JOIN `memo_organizer` ON `memo`.`id` = `memo_organizer`.`memo_id` WHERE " + strings.Join(where, " AND ") + " GROUP BY `memo`.`id` ORDER BY " + strings.Join(orders, ", ") if find.Limit != nil { query = fmt.Sprintf("%s LIMIT %d", query, *find.Limit) if find.Offset != nil { @@ -124,8 +133,6 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo list := make([]*store.Memo, 0) for rows.Next() { var memo store.Memo - var memoResourceIDList sql.NullString - var memoRelationList sql.NullString if err := rows.Scan( &memo.ID, &memo.CreatorID, @@ -135,51 +142,9 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo &memo.Content, &memo.Visibility, &memo.Pinned, - &memoResourceIDList, - &memoRelationList, ); err != nil { return nil, err } - - if memoResourceIDList.Valid { - idStringList := strings.Split(memoResourceIDList.String, ",") - memo.ResourceIDList = make([]int32, 0, len(idStringList)) - for _, idString := range idStringList { - id, err := util.ConvertStringToInt32(idString) - if err != nil { - return nil, err - } - memo.ResourceIDList = append(memo.ResourceIDList, id) - } - } - if memoRelationList.Valid { - memo.RelationList = make([]*store.MemoRelation, 0) - relatedMemoTypeList := strings.Split(memoRelationList.String, ",") - for _, relatedMemoType := range relatedMemoTypeList { - relatedMemoTypeList := strings.Split(relatedMemoType, ":") - if len(relatedMemoTypeList) != 3 { - return nil, errors.Errorf("invalid relation format") - } - memoID, err := util.ConvertStringToInt32(relatedMemoTypeList[0]) - if err != nil { - return nil, err - } - relatedMemoID, err := util.ConvertStringToInt32(relatedMemoTypeList[1]) - if err != nil { - return nil, err - } - relationType := store.MemoRelationType(relatedMemoTypeList[2]) - memo.RelationList = append(memo.RelationList, &store.MemoRelation{ - MemoID: memoID, - RelatedMemoID: relatedMemoID, - Type: relationType, - }) - // Set the first parent ID if relation type is comment. - if memo.ParentID == nil && memoID == memo.ID && relationType == store.MemoRelationComment { - memo.ParentID = &relatedMemoID - } - } - } list = append(list, &memo) } diff --git a/store/db/postgres/memo.go b/store/db/postgres/memo.go index f2f740ef..938e9962 100644 --- a/store/db/postgres/memo.go +++ b/store/db/postgres/memo.go @@ -10,7 +10,6 @@ import ( "github.com/Masterminds/squirrel" "github.com/pkg/errors" - "github.com/usememos/memos/internal/util" "github.com/usememos/memos/store" ) @@ -84,9 +83,7 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo "memo.row_status AS row_status", "memo.content AS content", "memo.visibility AS visibility", - "MAX(CASE WHEN memo_organizer.pinned = 1 THEN 1 ELSE 0 END) AS pinned", - "string_agg(CAST(resource.id AS TEXT), ',') AS resource_id_list", // Cast to TEXT - "(SELECT string_agg(CAST(memo_id AS TEXT) || ':' || CAST(related_memo_id AS TEXT) || ':' || type, ',') FROM memo_relation WHERE memo_relation.memo_id = memo.id OR memo_relation.related_memo_id = memo.id) AS relation_list"). // Cast IDs to TEXT + "MAX(CASE WHEN memo_organizer.pinned = 1 THEN 1 ELSE 0 END) AS pinned"). From("memo"). LeftJoin("memo_organizer ON memo.id = memo_organizer.memo_id"). LeftJoin("resource ON memo.id = resource.memo_id"). @@ -164,8 +161,6 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo updatedTsPlaceHolder, createdTsPlaceHolder := make([]uint8, 8), make([]uint8, 8) for rows.Next() { var memo store.Memo - var memoResourceIDList sql.NullString - var memoRelationList sql.NullString if err := rows.Scan( &memo.ID, &memo.CreatorID, @@ -175,8 +170,6 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo &memo.Content, &memo.Visibility, &memo.Pinned, - &memoResourceIDList, - &memoRelationList, ); err != nil { return nil, err } @@ -185,45 +178,6 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo memo.CreatedTs = int64(binary.BigEndian.Uint64(createdTsPlaceHolder)) memo.UpdatedTs = int64(binary.BigEndian.Uint64(updatedTsPlaceHolder)) - if memoResourceIDList.Valid { - idStringList := strings.Split(memoResourceIDList.String, ",") - memo.ResourceIDList = make([]int32, 0, len(idStringList)) - for _, idString := range idStringList { - id, err := util.ConvertStringToInt32(idString) - if err != nil { - return nil, err - } - memo.ResourceIDList = append(memo.ResourceIDList, id) - } - } - if memoRelationList.Valid { - memo.RelationList = make([]*store.MemoRelation, 0) - relatedMemoTypeList := strings.Split(memoRelationList.String, ",") - for _, relatedMemoType := range relatedMemoTypeList { - relatedMemoTypeList := strings.Split(relatedMemoType, ":") - if len(relatedMemoTypeList) != 3 { - return nil, errors.Errorf("invalid relation format") - } - memoID, err := util.ConvertStringToInt32(relatedMemoTypeList[0]) - if err != nil { - return nil, err - } - relatedMemoID, err := util.ConvertStringToInt32(relatedMemoTypeList[1]) - if err != nil { - return nil, err - } - relationType := store.MemoRelationType(relatedMemoTypeList[2]) - memo.RelationList = append(memo.RelationList, &store.MemoRelation{ - MemoID: memoID, - RelatedMemoID: relatedMemoID, - Type: relationType, - }) - // Set the first parent ID if relation type is comment. - if memo.ParentID == nil && memoID == memo.ID && relationType == store.MemoRelationComment { - memo.ParentID = &relatedMemoID - } - } - } list = append(list, &memo) } diff --git a/store/db/sqlite/memo.go b/store/db/sqlite/memo.go index dd662a71..c21b467f 100644 --- a/store/db/sqlite/memo.go +++ b/store/db/sqlite/memo.go @@ -6,9 +6,6 @@ import ( "fmt" "strings" - "github.com/pkg/errors" - - "github.com/usememos/memos/internal/util" "github.com/usememos/memos/store" ) @@ -88,13 +85,6 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo if v := find.Pinned; v != nil { where = append(where, "memo_organizer.pinned = 1") } - if v := find.HasParent; v != nil { - if *v { - where = append(where, "parent_id IS NOT NULL") - } else { - where = append(where, "parent_id IS NULL") - } - } orders := []string{} if find.OrderByPinned { @@ -108,45 +98,21 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo orders = append(orders, "id DESC") fields := []string{ - `memo.id AS id,`, - `memo.creator_id AS creator_id,`, - `memo.created_ts AS created_ts,`, - `memo.updated_ts AS updated_ts,`, - `memo.row_status AS row_status,`, - `memo.visibility AS visibility,`, + `memo.id AS id`, + `memo.creator_id AS creator_id`, + `memo.created_ts AS created_ts`, + `memo.updated_ts AS updated_ts`, + `memo.row_status AS row_status`, + `memo.visibility AS visibility`, + `CASE WHEN memo_organizer.pinned = 1 THEN 1 ELSE 0 END AS pinned`, } if !find.ExcludeContent { - fields = append(fields, `memo.content AS content,`) + fields = append(fields, `memo.content AS content`) } - query := ` - SELECT - ` + strings.Join(fields, "\n") + ` - CASE WHEN mo.pinned = 1 THEN 1 ELSE 0 END AS pinned, - ( - SELECT - related_memo_id - FROM - memo_relation - WHERE - memo_relation.memo_id = memo.id AND memo_relation.type = 'COMMENT' - LIMIT 1 - ) AS parent_id, - GROUP_CONCAT(resource.id) AS resource_id_list, - ( - SELECT - GROUP_CONCAT(memo_relation.memo_id || ':' || memo_relation.related_memo_id || ':' || memo_relation.type) - FROM - memo_relation - WHERE - memo_relation.memo_id = memo.id OR memo_relation.related_memo_id = memo.id - ) AS relation_list - FROM - memo - LEFT JOIN - memo_organizer mo ON memo.id = mo.memo_id - LEFT JOIN - resource ON memo.id = resource.memo_id + query := `SELECT ` + strings.Join(fields, ", ") + ` + FROM memo + LEFT JOIN memo_organizer ON memo.id = memo_organizer.memo_id WHERE ` + strings.Join(where, " AND ") + ` GROUP BY memo.id ORDER BY ` + strings.Join(orders, ", ") @@ -166,8 +132,6 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo list := make([]*store.Memo, 0) for rows.Next() { var memo store.Memo - var memoResourceIDList sql.NullString - var memoRelationList sql.NullString dests := []any{ &memo.ID, &memo.CreatorID, @@ -175,50 +139,14 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo &memo.UpdatedTs, &memo.RowStatus, &memo.Visibility, + &memo.Pinned, } if !find.ExcludeContent { dests = append(dests, &memo.Content) } - dests = append(dests, &memo.Pinned, &memo.ParentID, &memoResourceIDList, &memoRelationList) if err := rows.Scan(dests...); err != nil { return nil, err } - - if memoResourceIDList.Valid { - idStringList := strings.Split(memoResourceIDList.String, ",") - memo.ResourceIDList = make([]int32, 0, len(idStringList)) - for _, idString := range idStringList { - id, err := util.ConvertStringToInt32(idString) - if err != nil { - return nil, err - } - memo.ResourceIDList = append(memo.ResourceIDList, id) - } - } - if memoRelationList.Valid { - memo.RelationList = make([]*store.MemoRelation, 0) - relatedMemoTypeList := strings.Split(memoRelationList.String, ",") - for _, relatedMemoType := range relatedMemoTypeList { - relatedMemoTypeList := strings.Split(relatedMemoType, ":") - if len(relatedMemoTypeList) != 3 { - return nil, errors.New("invalid relation format") - } - memoID, err := util.ConvertStringToInt32(relatedMemoTypeList[0]) - if err != nil { - return nil, err - } - relatedMemoID, err := util.ConvertStringToInt32(relatedMemoTypeList[1]) - if err != nil { - return nil, err - } - relationType := store.MemoRelationType(relatedMemoTypeList[2]) - memo.RelationList = append(memo.RelationList, &store.MemoRelation{ - MemoID: memoID, - RelatedMemoID: relatedMemoID, - Type: relationType, - }) - } - } list = append(list, &memo) } diff --git a/store/memo.go b/store/memo.go index 8158d679..ac29df74 100644 --- a/store/memo.go +++ b/store/memo.go @@ -42,12 +42,7 @@ type Memo struct { Visibility Visibility // Composed fields - // For those comment memos, the parent ID is the memo ID of the memo being commented. - // If the parent ID is nil, then this memo is not a comment. - ParentID *int32 - Pinned bool - ResourceIDList []int32 - RelationList []*MemoRelation + Pinned bool } type FindMemo struct { @@ -63,7 +58,6 @@ type FindMemo struct { ContentSearch []string VisibilityList []Visibility Pinned *bool - HasParent *bool ExcludeContent bool // Pagination diff --git a/store/memo_relation.go b/store/memo_relation.go index 68e62cf8..3d68049d 100644 --- a/store/memo_relation.go +++ b/store/memo_relation.go @@ -39,19 +39,6 @@ func (s *Store) ListMemoRelations(ctx context.Context, find *FindMemoRelation) ( return s.driver.ListMemoRelations(ctx, find) } -func (s *Store) GetMemoRelation(ctx context.Context, find *FindMemoRelation) (*MemoRelation, error) { - list, err := s.ListMemoRelations(ctx, find) - if err != nil { - return nil, err - } - - if len(list) == 0 { - return nil, nil - } - - return list[0], nil -} - func (s *Store) DeleteMemoRelation(ctx context.Context, delete *DeleteMemoRelation) error { return s.driver.DeleteMemoRelation(ctx, delete) } diff --git a/test/store/memo_relation_test.go b/test/store/memo_relation_test.go index 55b189dc..3da3ab60 100644 --- a/test/store/memo_relation_test.go +++ b/test/store/memo_relation_test.go @@ -55,37 +55,4 @@ func TestMemoRelationStore(t *testing.T) { } _, err = ts.UpsertMemoRelation(ctx, commentRelation) require.NoError(t, err) - - memo, err = ts.GetMemo(ctx, &store.FindMemo{ - ID: &memo.ID, - }) - require.NoError(t, err) - require.Equal(t, 2, len(memo.RelationList)) - require.Equal(t, referenceRelation, memo.RelationList[0]) - require.Equal(t, commentRelation, memo.RelationList[1]) - relatedMemo, err = ts.GetMemo(ctx, &store.FindMemo{ - ID: &relatedMemo.ID, - }) - require.NoError(t, err) - require.Equal(t, 1, len(relatedMemo.RelationList)) - require.Equal(t, referenceRelation, relatedMemo.RelationList[0]) - commentMemo, err = ts.GetMemo(ctx, &store.FindMemo{ - ID: &commentMemo.ID, - }) - require.NoError(t, err) - require.Equal(t, 1, len(commentMemo.RelationList)) - require.Equal(t, commentRelation, commentMemo.RelationList[0]) - err = ts.DeleteMemo(ctx, &store.DeleteMemo{ - ID: relatedMemo.ID, - }) - require.NoError(t, err) - err = ts.DeleteMemo(ctx, &store.DeleteMemo{ - ID: commentMemo.ID, - }) - require.NoError(t, err) - memoRelation, err := ts.ListMemoRelations(ctx, &store.FindMemoRelation{ - MemoID: &memo.ID, - }) - require.NoError(t, err) - require.Equal(t, 0, len(memoRelation)) }