blog_category.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. package fetdata
  2. import (
  3. "golang-fave/engine/wrapper"
  4. "golang-fave/utils"
  5. )
  6. type BlogCategory struct {
  7. wrap *wrapper.Wrapper
  8. object *utils.MySql_blog_category
  9. user *User
  10. bufferCats map[int]*utils.MySql_blog_category
  11. }
  12. func (this *BlogCategory) load(cache *map[int]*utils.MySql_blog_category) *BlogCategory {
  13. if this == nil {
  14. return this
  15. }
  16. if cache != nil {
  17. this.bufferCats = (*cache)
  18. return this
  19. }
  20. if this.bufferCats == nil {
  21. this.bufferCats = map[int]*utils.MySql_blog_category{}
  22. }
  23. if rows, err := this.wrap.DB.Query(`
  24. SELECT
  25. main.id,
  26. main.user,
  27. main.name,
  28. main.alias,
  29. main.lft,
  30. main.rgt,
  31. main.depth,
  32. parent.id AS parent_id
  33. FROM
  34. (
  35. SELECT
  36. node.id,
  37. node.user,
  38. node.name,
  39. node.alias,
  40. node.lft,
  41. node.rgt,
  42. (COUNT(parent.id) - 1) AS depth
  43. FROM
  44. blog_cats AS node,
  45. blog_cats AS parent
  46. WHERE
  47. node.lft BETWEEN parent.lft AND parent.rgt
  48. GROUP BY
  49. node.id
  50. ORDER BY
  51. node.lft ASC
  52. ) AS main
  53. LEFT JOIN (
  54. SELECT
  55. node.id,
  56. node.user,
  57. node.name,
  58. node.alias,
  59. node.lft,
  60. node.rgt,
  61. (COUNT(parent.id) - 0) AS depth
  62. FROM
  63. blog_cats AS node,
  64. blog_cats AS parent
  65. WHERE
  66. node.lft BETWEEN parent.lft AND parent.rgt
  67. GROUP BY
  68. node.id
  69. ORDER BY
  70. node.lft ASC
  71. ) AS parent ON
  72. parent.depth = main.depth AND
  73. main.lft > parent.lft AND
  74. main.rgt < parent.rgt
  75. WHERE
  76. main.id > 1
  77. ORDER BY
  78. main.lft ASC
  79. ;
  80. `); err == nil {
  81. defer rows.Close()
  82. for rows.Next() {
  83. row := utils.MySql_blog_category{}
  84. if err := rows.Scan(
  85. &row.A_id,
  86. &row.A_user,
  87. &row.A_name,
  88. &row.A_alias,
  89. &row.A_lft,
  90. &row.A_rgt,
  91. &row.A_depth,
  92. &row.A_parent,
  93. ); err == nil {
  94. this.bufferCats[row.A_id] = &row
  95. }
  96. }
  97. }
  98. return this
  99. }
  100. func (this *BlogCategory) loadById(id int) {
  101. if this == nil {
  102. return
  103. }
  104. if this.object != nil {
  105. return
  106. }
  107. this.object = &utils.MySql_blog_category{}
  108. if err := this.wrap.DB.QueryRow(`
  109. SELECT
  110. main.id,
  111. main.user,
  112. main.name,
  113. main.alias,
  114. main.lft,
  115. main.rgt,
  116. main.depth,
  117. parent.id AS parent_id
  118. FROM
  119. (
  120. SELECT
  121. node.id,
  122. node.user,
  123. node.name,
  124. node.alias,
  125. node.lft,
  126. node.rgt,
  127. (COUNT(parent.id) - 1) AS depth
  128. FROM
  129. blog_cats AS node,
  130. blog_cats AS parent
  131. WHERE
  132. node.lft BETWEEN parent.lft AND parent.rgt
  133. GROUP BY
  134. node.id
  135. ORDER BY
  136. node.lft ASC
  137. ) AS main
  138. LEFT JOIN (
  139. SELECT
  140. node.id,
  141. node.user,
  142. node.name,
  143. node.alias,
  144. node.lft,
  145. node.rgt,
  146. (COUNT(parent.id) - 0) AS depth
  147. FROM
  148. blog_cats AS node,
  149. blog_cats AS parent
  150. WHERE
  151. node.lft BETWEEN parent.lft AND parent.rgt
  152. GROUP BY
  153. node.id
  154. ORDER BY
  155. node.lft ASC
  156. ) AS parent ON
  157. parent.depth = main.depth AND
  158. main.lft > parent.lft AND
  159. main.rgt < parent.rgt
  160. WHERE
  161. main.id > 1 AND
  162. main.id = ?
  163. ORDER BY
  164. main.lft ASC
  165. ;`,
  166. id,
  167. ).Scan(
  168. &this.object.A_id,
  169. &this.object.A_user,
  170. &this.object.A_name,
  171. &this.object.A_alias,
  172. &this.object.A_lft,
  173. &this.object.A_rgt,
  174. &this.object.A_depth,
  175. &this.object.A_parent,
  176. ); err != nil {
  177. return
  178. }
  179. }
  180. func (this *BlogCategory) Id() int {
  181. if this == nil {
  182. return 0
  183. }
  184. return this.object.A_id
  185. }
  186. func (this *BlogCategory) User() *User {
  187. if this == nil {
  188. return nil
  189. }
  190. if this.user != nil {
  191. return this.user
  192. }
  193. this.user = (&User{wrap: this.wrap}).load()
  194. this.user.loadById(this.object.A_user)
  195. return this.user
  196. }
  197. func (this *BlogCategory) Name() string {
  198. if this == nil {
  199. return ""
  200. }
  201. return this.object.A_name
  202. }
  203. func (this *BlogCategory) Alias() string {
  204. if this == nil {
  205. return ""
  206. }
  207. return this.object.A_alias
  208. }
  209. func (this *BlogCategory) Left() int {
  210. if this == nil {
  211. return 0
  212. }
  213. return this.object.A_lft
  214. }
  215. func (this *BlogCategory) Right() int {
  216. if this == nil {
  217. return 0
  218. }
  219. return this.object.A_rgt
  220. }
  221. func (this *BlogCategory) Permalink() string {
  222. if this == nil {
  223. return ""
  224. }
  225. return "/blog/category/" + this.object.A_alias + "/"
  226. }
  227. func (this *BlogCategory) Level() int {
  228. if this == nil {
  229. return 0
  230. }
  231. return this.object.A_depth
  232. }
  233. func (this *BlogCategory) Parent() *BlogCategory {
  234. if this == nil {
  235. return nil
  236. }
  237. if this.bufferCats == nil {
  238. return nil
  239. }
  240. if _, ok := this.bufferCats[this.object.A_parent]; !ok {
  241. return nil
  242. }
  243. cat := &BlogCategory{wrap: this.wrap, object: this.bufferCats[this.object.A_parent]}
  244. return cat.load(&this.bufferCats)
  245. }
  246. func (this *BlogCategory) HaveChilds() bool {
  247. // TODO: Add ability
  248. if this == nil {
  249. return false
  250. }
  251. return false
  252. }