api_list_recent_discuss.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package route
  2. import (
  3. "opennamu/route/tool"
  4. )
  5. func Api_list_recent_discuss(config tool.Config, limit string, num string, set_type string) map[string]any {
  6. db := tool.DB_connect()
  7. defer tool.DB_close(db)
  8. other_set := map[string]string{}
  9. json.Unmarshal([]byte(config.Other_set), &other_set)
  10. limit_int := tool.Str_to_int(limit)
  11. if limit_int > 50 || limit_int < 0 {
  12. limit_int = 50
  13. }
  14. page_int := tool.Str_to_int(num)
  15. if page_int > 0 {
  16. page_int = (page_int * limit_int) - limit_int
  17. } else {
  18. page_int = 0
  19. }
  20. query := ""
  21. switch set_type {
  22. case "normal":
  23. query = "select title, sub, date, code, stop, agree from rd order by date desc limit ?, ?"
  24. case "close":
  25. query = "select title, sub, date, code, stop, agree from rd where stop = 'O' order by date desc limit ?, ?"
  26. default:
  27. query = "select title, sub, date, code, stop, agree from rd where stop != 'O' order by date desc limit ?, ?"
  28. }
  29. rows := tool.Query_DB(
  30. db,
  31. query,
  32. page_int, limit_int,
  33. )
  34. defer rows.Close()
  35. data_list := [][]string{}
  36. ip_parser_temp := map[string][]string{}
  37. for rows.Next() {
  38. var title string
  39. var sub string
  40. var date string
  41. var code string
  42. var stop string
  43. var agree string
  44. err := rows.Scan(&title, &sub, &date, &code, &stop, &agree)
  45. if err != nil {
  46. panic(err)
  47. }
  48. ip := ""
  49. id := ""
  50. tool.QueryRow_DB(
  51. db,
  52. "select ip, id from topic where code = ? order by id + 0 desc limit 1",
  53. []any{ &ip, &id },
  54. code,
  55. )
  56. var ip_pre string
  57. var ip_render string
  58. if _, ok := ip_parser_temp[ip]; ok {
  59. ip_pre = ip_parser_temp[ip][0]
  60. ip_render = ip_parser_temp[ip][1]
  61. } else {
  62. ip_pre = tool.IP_preprocess(db, ip, config.IP)[0]
  63. ip_render = tool.IP_parser(db, ip, config.IP)
  64. ip_parser_temp[ip] = []string{ip_pre, ip_render}
  65. }
  66. data_list = append(data_list, []string{
  67. title,
  68. sub,
  69. date,
  70. code,
  71. stop,
  72. ip_pre,
  73. ip_render,
  74. id,
  75. agree,
  76. })
  77. }
  78. return_data := make(map[string]any)
  79. return_data["response"] = "ok"
  80. return_data["data"] = data_list
  81. return return_data
  82. }