blog_category.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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. ); *this.wrap.LogCpError(&err) == nil {
  94. this.bufferCats[row.A_id] = &row
  95. if _, ok := this.bufferCats[row.A_parent]; ok {
  96. this.bufferCats[row.A_parent].A_childs = true
  97. }
  98. }
  99. }
  100. }
  101. return this
  102. }
  103. func (this *BlogCategory) loadById(id int) {
  104. if this == nil {
  105. return
  106. }
  107. if this.object != nil {
  108. return
  109. }
  110. this.object = &utils.MySql_blog_category{}
  111. if err := this.wrap.DB.QueryRow(
  112. this.wrap.R.Context(),
  113. `SELECT
  114. main.id,
  115. main.user,
  116. main.name,
  117. main.alias,
  118. main.lft,
  119. main.rgt,
  120. main.depth,
  121. parent.id AS parent_id
  122. FROM
  123. (
  124. SELECT
  125. node.id,
  126. node.user,
  127. node.name,
  128. node.alias,
  129. node.lft,
  130. node.rgt,
  131. (COUNT(parent.id) - 1) AS depth
  132. FROM
  133. blog_cats AS node,
  134. blog_cats AS parent
  135. WHERE
  136. node.lft BETWEEN parent.lft AND parent.rgt
  137. GROUP BY
  138. node.id
  139. ORDER BY
  140. node.lft ASC
  141. ) AS main
  142. LEFT JOIN (
  143. SELECT
  144. node.id,
  145. node.user,
  146. node.name,
  147. node.alias,
  148. node.lft,
  149. node.rgt,
  150. (COUNT(parent.id) - 0) AS depth
  151. FROM
  152. blog_cats AS node,
  153. blog_cats AS parent
  154. WHERE
  155. node.lft BETWEEN parent.lft AND parent.rgt
  156. GROUP BY
  157. node.id
  158. ORDER BY
  159. node.lft ASC
  160. ) AS parent ON
  161. parent.depth = main.depth AND
  162. main.lft > parent.lft AND
  163. main.rgt < parent.rgt
  164. WHERE
  165. main.id > 1 AND
  166. main.id = ?
  167. ORDER BY
  168. main.lft ASC
  169. ;`,
  170. id,
  171. ).Scan(
  172. &this.object.A_id,
  173. &this.object.A_user,
  174. &this.object.A_name,
  175. &this.object.A_alias,
  176. &this.object.A_lft,
  177. &this.object.A_rgt,
  178. &this.object.A_depth,
  179. &this.object.A_parent,
  180. ); *this.wrap.LogCpError(&err) != nil {
  181. return
  182. }
  183. }
  184. func (this *BlogCategory) Id() int {
  185. if this == nil {
  186. return 0
  187. }
  188. return this.object.A_id
  189. }
  190. func (this *BlogCategory) User() *User {
  191. if this == nil {
  192. return nil
  193. }
  194. if this.user != nil {
  195. return this.user
  196. }
  197. this.user = (&User{wrap: this.wrap}).load()
  198. this.user.loadById(this.object.A_user)
  199. return this.user
  200. }
  201. func (this *BlogCategory) Name() string {
  202. if this == nil {
  203. return ""
  204. }
  205. return this.object.A_name
  206. }
  207. func (this *BlogCategory) Alias() string {
  208. if this == nil {
  209. return ""
  210. }
  211. return this.object.A_alias
  212. }
  213. func (this *BlogCategory) Left() int {
  214. if this == nil {
  215. return 0
  216. }
  217. return this.object.A_lft
  218. }
  219. func (this *BlogCategory) Right() int {
  220. if this == nil {
  221. return 0
  222. }
  223. return this.object.A_rgt
  224. }
  225. func (this *BlogCategory) Permalink() string {
  226. if this == nil {
  227. return ""
  228. }
  229. return "/blog/category/" + this.object.A_alias + "/"
  230. }
  231. func (this *BlogCategory) Level() int {
  232. if this == nil {
  233. return 0
  234. }
  235. return this.object.A_depth
  236. }
  237. func (this *BlogCategory) Parent() *BlogCategory {
  238. if this == nil {
  239. return nil
  240. }
  241. if this.bufferCats == nil {
  242. return nil
  243. }
  244. if _, ok := this.bufferCats[this.object.A_parent]; !ok {
  245. return nil
  246. }
  247. cat := &BlogCategory{wrap: this.wrap, object: this.bufferCats[this.object.A_parent]}
  248. return cat.load(&this.bufferCats)
  249. }
  250. func (this *BlogCategory) HaveChilds() bool {
  251. if this == nil {
  252. return false
  253. }
  254. return this.object.A_childs
  255. }