mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
chore: update list memos
This commit is contained in:
121
api/v1/memo.go
121
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
|
||||
|
Reference in New Issue
Block a user