helper.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package controller
  2. import (
  3. "strconv"
  4. "time"
  5. "github.com/gin-gonic/gin"
  6. )
  7. const timeFormat = "2006-01-02T15:04:05Z07:00"
  8. // parseUintParam 将路径参数转换为 uint64。
  9. func parseUintParam(c *gin.Context, name string) (uint64, error) {
  10. value := c.Param(name)
  11. return strconv.ParseUint(value, 10, 64)
  12. }
  13. // parseUintQuery 将查询参数转换为 uint64。
  14. func parseUintQuery(c *gin.Context, name string) (uint64, error) {
  15. value := c.Query(name)
  16. if value == "" {
  17. return 0, strconv.ErrSyntax
  18. }
  19. return strconv.ParseUint(value, 10, 64)
  20. }
  21. // getUserIDFromHeader 从请求头 X-User-Id 读取当前用户 ID(用于知识库开关校验)
  22. // 若未设置则返回 0(调用方可按需放行或拒绝)
  23. func getUserIDFromHeader(c *gin.Context) uint {
  24. value := c.GetHeader("X-User-Id")
  25. if value == "" {
  26. return 0
  27. }
  28. id, err := strconv.ParseUint(value, 10, 64)
  29. if err != nil {
  30. return 0
  31. }
  32. return uint(id)
  33. }
  34. // formatTimeValue 按统一格式输出时间字符串。
  35. func formatTimeValue(t time.Time) string {
  36. return t.Format(timeFormat)
  37. }
  38. // formatTimePointer 在指针为空时返回空字符串。
  39. func formatTimePointer(t *time.Time) string {
  40. if t == nil {
  41. return ""
  42. }
  43. return t.Format(timeFormat)
  44. }
  45. // getTraceID 从请求上下文读取 trace_id(由中间件注入)。
  46. func getTraceID(c *gin.Context) string {
  47. if v, ok := c.Get("trace_id"); ok {
  48. if s, ok2 := v.(string); ok2 {
  49. return s
  50. }
  51. }
  52. return ""
  53. }