diff --git a/post.go b/post.go index e7c8099..c7ae3b8 100644 --- a/post.go +++ b/post.go @@ -69,3 +69,16 @@ func (post Post) MarkdownData() (bytes.Buffer, map[string]interface{}) { return buf, metaData } + +func (post Post) Aliases() []string { + _, metaData := post.MarkdownData() + if metaData["aliases"] != nil { + alias_data := metaData["aliases"].([]interface{}) + aliases := make([]string, 0) + for _, alias := range alias_data { + aliases = append(aliases, alias.(string)) + } + return aliases + } + return []string{} +} diff --git a/repository.go b/repository.go index 0990bba..e4fae33 100644 --- a/repository.go +++ b/repository.go @@ -161,3 +161,21 @@ func (repo Repository) GetUser(name string) (User, error) { } return user, nil } + +func (repo Repository) PostAliases() (map[string]*Post, error) { + users, err := repo.Users() + if err != nil { + return nil, err + } + aliases := make(map[string]*Post) + for _, user := range users { + user_aliases, err := user.PostAliases() + if err != nil { + return nil, err + } + for alias, post := range user_aliases { + aliases[alias] = post + } + } + return aliases, nil +} diff --git a/repository_test.go b/repository_test.go index 56a2de3..60baed3 100644 --- a/repository_test.go +++ b/repository_test.go @@ -237,3 +237,40 @@ func TestSingleUserRepoUserUrlPathIsSimple(t *testing.T) { t.Error("User url is not '/'. Got: ", user.UrlPath()) } } + +func TestCanGetMapWithAllPostAliases(t *testing.T) { + repo, _ := owl.CreateRepository(testRepoName()) + user, _ := repo.CreateUser(randomUserName()) + post, _ := user.CreateNewPost("test-1") + + content := "---\n" + content += "title: Test\n" + content += "aliases: \n" + content += " - /foo/bar\n" + content += " - /foo/baz\n" + content += "---\n" + content += "This is a test" + os.WriteFile(post.ContentFile(), []byte(content), 0644) + + posts, _ := user.Posts() + if len(posts) != 1 { + t.Error("Wrong number of posts returned, expected 1, got ", len(posts)) + } + + var aliases map[string]*owl.Post + aliases, err := repo.PostAliases() + if err != nil { + t.Error("Error getting post aliases: ", err.Error()) + } + if len(aliases) != 2 { + t.Error("Wrong number of aliases returned, expected 2, got ", len(aliases)) + t.Error("Aliases: ", aliases) + } + if aliases["/foo/bar"] == nil { + t.Error("Alias '/foo/bar' not found") + } + if aliases["/foo/baz"] == nil { + t.Error("Alias '/foo/baz' not found") + } + +} diff --git a/user.go b/user.go index 247f8b6..0998304 100644 --- a/user.go +++ b/user.go @@ -137,3 +137,21 @@ func (user User) SetConfig(new_config UserConfig) error { } return nil } + +func (user User) PostAliases() (map[string]*Post, error) { + post_aliases := make(map[string]*Post) + posts, err := user.Posts() + if err != nil { + return post_aliases, err + } + for _, id := range posts { + post, err := user.GetPost(id) + if err != nil { + return post_aliases, err + } + for _, alias := range post.Aliases() { + post_aliases[alias] = &post + } + } + return post_aliases, nil +}