diff --git a/api/v1/memo.go b/api/v1/memo.go index 91974521..f1a962cd 100644 --- a/api/v1/memo.go +++ b/api/v1/memo.go @@ -46,7 +46,8 @@ func (v Visibility) String() string { } type Memo struct { - ID int32 `json:"id"` + ID int32 `json:"id"` + Name string `json:"name"` // Standard fields RowStatus RowStatus `json:"rowStatus"` @@ -832,6 +833,7 @@ func (s *APIV1Service) UpdateMemo(c echo.Context) error { func (s *APIV1Service) convertMemoFromStore(ctx context.Context, memo *store.Memo) (*Memo, error) { memoMessage := &Memo{ ID: memo.ID, + Name: memo.ResourceName, RowStatus: RowStatus(memo.RowStatus.String()), CreatorID: memo.CreatorID, CreatedTs: memo.CreatedTs, diff --git a/api/v1/rss.go b/api/v1/rss.go index 3732b682..31a5245e 100644 --- a/api/v1/rss.go +++ b/api/v1/rss.go @@ -3,7 +3,6 @@ package v1 import ( "context" "encoding/json" - "fmt" "net/http" "strconv" "strings" @@ -127,10 +126,9 @@ func (s *APIV1Service) generateRSSFromMemoList(ctx context.Context, memoList []* } feed.Items[i] = &feeds.Item{ Title: getRSSItemTitle(memoMessage.Content), - Link: &feeds.Link{Href: baseURL + "/m/" + fmt.Sprintf("%d", memoMessage.ID)}, + Link: &feeds.Link{Href: baseURL + "/m/" + memoMessage.Name}, Description: description, 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] diff --git a/server/frontend/frontend.go b/server/frontend/frontend.go index d1b01a04..24d5f249 100644 --- a/server/frontend/frontend.go +++ b/server/frontend/frontend.go @@ -43,7 +43,7 @@ func (s *FrontendService) Serve(ctx context.Context, e *echo.Echo) { Root: "dist", HTML5: true, Skipper: func(c echo.Context) bool { - return util.HasPrefixes(c.Path(), "/api", "/memos.api.v2", "/robots.txt", "/sitemap.xml", "/m/:memoID") + return util.HasPrefixes(c.Path(), "/api", "/memos.api.v2", "/robots.txt", "/sitemap.xml", "/m/:name") }, })) @@ -54,16 +54,11 @@ func (s *FrontendService) Serve(ctx context.Context, e *echo.Echo) { func (s *FrontendService) registerRoutes(e *echo.Echo) { rawIndexHTML := getRawIndexHTML() - e.GET("/m/:memoID", func(c echo.Context) error { + e.GET("/m/:name", func(c echo.Context) error { ctx := c.Request().Context() - memoID, err := util.ConvertStringToInt32(c.Param("memoID")) - if err != nil { - // Redirect to `index.html` if any error occurs. - return c.HTML(http.StatusOK, rawIndexHTML) - } - + resourceName := c.Param("name") memo, err := s.Store.GetMemo(ctx, &store.FindMemo{ - ID: &memoID, + ResourceName: &resourceName, }) if err != nil { return c.HTML(http.StatusOK, rawIndexHTML) @@ -116,7 +111,7 @@ Sitemap: %s/sitemap.xml`, instanceURL, instanceURL) return err } for _, memo := range memoList { - urlsets = append(urlsets, fmt.Sprintf(`%s`, fmt.Sprintf("%s/m/%d", instanceURL, memo.ID))) + urlsets = append(urlsets, fmt.Sprintf(`%s`, fmt.Sprintf("%s/m/%s", instanceURL, memo.ResourceName))) } sitemap := fmt.Sprintf(`%s`, strings.Join(urlsets, "\n")) return c.XMLBlob(http.StatusOK, []byte(sitemap))