feat: add id parsing

Signed-off-by: Sphericalkat <amolele@gmail.com>
This commit is contained in:
Amogh Lele 2023-05-28 16:58:11 +05:30
parent 665d33d9d3
commit aacabdd54d
4 changed files with 63 additions and 47 deletions

View File

@ -10,9 +10,9 @@ import (
) )
func show(c *fiber.Ctx) error { func show(c *fiber.Ctx) error {
postId := c.Params("id", "") postId := converters.ConvertId(c)
if postId == "" { if postId == "" {
return c.Redirect("/") return c.Status(422).SendString("Invalid post ID")
} }
e, err := client.PostData(postId) e, err := client.PostData(postId)
@ -42,5 +42,5 @@ func index(c *fiber.Ctx) error {
func RegisterRoutes(app *fiber.App) { func RegisterRoutes(app *fiber.App) {
app.Get("/", index) app.Get("/", index)
app.Get("/:id", show) app.Get("/*", show)
} }

View File

@ -14,7 +14,7 @@ import (
) )
func PostData(postId string) (*entities.MediumResponse, error) { func PostData(postId string) (*entities.MediumResponse, error) {
if config.Conf.Env == "dev" { if config.Conf.Env == "devd" {
file, err := os.ReadFile("response.json") file, err := os.ReadFile("response.json")
if err != nil { if err != nil {
return nil, err return nil, err
@ -33,49 +33,7 @@ func PostData(postId string) (*entities.MediumResponse, error) {
url := "https://medium.com/_/graphql" url := "https://medium.com/_/graphql"
method := "POST" method := "POST"
payload := strings.NewReader(fmt.Sprintf(`query { payload := strings.NewReader(fmt.Sprintf("{\"query\":\"query {\\n post(id: \\\"%s\\\") {\\n title\\n createdAt\\n creator {\\n id\\n name\\n }\\n content {\\n bodyModel {\\n paragraphs {\\n name\\n text\\n type\\n href\\n layout\\n markups {\\n title\\n type\\n href\\n userId\\n start\\n end\\n anchorType\\n }\\n iframe {\\n mediaResource {\\n href\\n iframeSrc\\n iframeWidth\\n iframeHeight\\n }\\n }\\n metadata {\\n id\\n originalWidth\\n originalHeight\\n }\\n }\\n }\\n }\\n }\\n }\",\"variables\":{}}", postId))
post(id: "%s") {
title
createdAt
creator {
id
name
}
content {
bodyModel {
paragraphs {
name
text
type
href
layout
markups {
title
type
href
userId
start
end
anchorType
}
iframe {
mediaResource {
href
iframeSrc
iframeWidth
iframeHeight
}
}
metadata {
id
originalWidth
originalHeight
}
}
}
}
}
}`, postId))
client := &http.Client{} client := &http.Client{}
req, err := http.NewRequest(method, url, payload) req, err := http.NewRequest(method, url, payload)

View File

@ -0,0 +1,46 @@
package converters
import (
"net/url"
"regexp"
"strings"
"github.com/gofiber/fiber/v2"
)
var r = regexp.MustCompile(`[\/\-]([0-9a-f]+)\/?$`)
func ConvertId(c *fiber.Ctx) string {
path := c.Path()
postId := idFromParams(c)
if postId == "" {
return idFromPath(path)
}
return ""
}
func idFromPath(path string) string {
if strings.HasPrefix(path, "/tag/") {
return ""
}
matches := r.FindStringSubmatch(path)
if len(matches) != 2 {
return ""
}
return matches[1]
}
func idFromParams(c *fiber.Ctx) string {
ru := c.Query("redirectUrl", "")
if ru != "" {
pu, err := url.Parse(ru)
if err != nil {
return ""
}
return idFromPath(pu.Path)
}
return ""
}

View File

@ -0,0 +1,12 @@
package converters
import "testing"
func TestConvertId(t *testing.T) {
id := "@fareedkhandev/pandas-ai-the-future-of-data-analysis-8f0be9b5ab6f"
convertedId := idFromPath(id)
expected := "8f0be9b5ab6f"
if convertedId != expected {
t.Errorf("ConvertId(%s) = %s; want %s", id, convertedId, expected)
}
}