PageRenderTime 39ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/models/pages.go

http://github.com/TheOnly92/bloody.go
Go | 119 lines | 105 code | 13 blank | 1 comment | 30 complexity | 2cca9e0c5e56f0380aa24a05f02e6c68 MD5 | raw file
  1. package main
  2. import (
  3. "launchpad.net/gobson/bson"
  4. "launchpad.net/mgo"
  5. "time"
  6. //"math"
  7. )
  8. type Page struct {
  9. Id bson.ObjectId "_id,omitempty"
  10. Title string
  11. Slug string
  12. Content string
  13. Created int64
  14. Modified int64
  15. }
  16. type PageModel struct {
  17. c mgo.Collection
  18. }
  19. func PageModelInit() *PageModel {
  20. p := new(PageModel)
  21. p.c = mSession.DB(config.Get("mongodb")).C("pages")
  22. return p
  23. }
  24. func (page *PageModel) Sidebar() []map[string]string {
  25. var result *Page
  26. results := []map[string]string{}
  27. callback := func() error {
  28. results = append(results, map[string]string {"Title": result.Title, "Slug": result.Slug})
  29. return nil
  30. }
  31. err := page.c.Find(nil).Sort(bson.M{"title":-1}).For(&result, callback)
  32. if err != nil {
  33. panic(err)
  34. }
  35. return results
  36. }
  37. func (page *PageModel) List() []map[string]string {
  38. var result *Page
  39. results := []map[string]string{}
  40. callback := func() error {
  41. t := time.Unix(result.Created, 0)
  42. results = append(results, map[string]string {"Title":result.Title, "Date":t.Format("2006 Jan 02 15:04"), "Id": objectIdHex(result.Id.String())})
  43. return nil
  44. }
  45. var err error
  46. err = page.c.Find(nil).Sort(bson.M{"timestamp":-1}).For(&result, callback)
  47. if err != nil {
  48. panic(err)
  49. }
  50. return results
  51. }
  52. func (page *PageModel) Create(title string, content string) {
  53. t := time.Now()
  54. slug := toAscii(title)
  55. if page.GetBySlug(slug) != nil {
  56. slug += "-2"
  57. }
  58. err := page.c.Insert(&Page{"", title, slug, content, t.Unix(), 0})
  59. if err != nil {
  60. panic(err)
  61. }
  62. }
  63. func (page *PageModel) Update(title string, content string, id string) {
  64. result := page.Get(id)
  65. result.Title = title
  66. slug := toAscii(title)
  67. tmp := page.GetBySlug(slug)
  68. if tmp != nil {
  69. if tmp.Id != result.Id {
  70. slug += "-2"
  71. }
  72. }
  73. result.Slug = slug
  74. result.Content = content
  75. result.Modified = time.Now().Unix()
  76. err := page.c.Update(bson.M{"_id":bson.ObjectIdHex(id)},result)
  77. if err != nil {
  78. panic(err)
  79. }
  80. }
  81. func (page *PageModel) Delete(id string) {
  82. err := page.c.Remove(bson.M{"_id":bson.ObjectIdHex(id)})
  83. if err != nil {
  84. panic(err)
  85. }
  86. }
  87. func (page *PageModel) Get(id string) *Page {
  88. var result *Page
  89. err := page.c.Find(bson.M{"_id": bson.ObjectIdHex(id)}).One(&result)
  90. if err != nil && err != mgo.NotFound {
  91. panic(err)
  92. } else if err == mgo.NotFound {
  93. return nil
  94. }
  95. return result
  96. }
  97. func (page *PageModel) GetBySlug(slug string) *Page {
  98. var result *Page
  99. err := page.c.Find(bson.M{"slug": slug}).One(&result)
  100. if err != nil && err != mgo.NotFound {
  101. panic(err)
  102. } else if err == mgo.NotFound {
  103. return nil
  104. }
  105. return result
  106. }