account_ollama_cloud_usage.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package admin
  2. import (
  3. "strconv"
  4. "github.com/Wei-Shaw/sub2api/internal/pkg/response"
  5. "github.com/Wei-Shaw/sub2api/internal/service"
  6. "github.com/gin-gonic/gin"
  7. )
  8. type ollamaCloudUsageSessionRequest struct {
  9. Session string `json:"session" binding:"required"`
  10. }
  11. type ollamaCloudUsageAutoRefreshRequest struct {
  12. Enabled *bool `json:"enabled" binding:"required"`
  13. }
  14. func (h *AccountHandler) GetOllamaCloudUsageSettings(c *gin.Context) {
  15. if h.ollamaCloudUsage == nil {
  16. response.ErrorFrom(c, service.ErrOllamaCloudUsageUnavailable)
  17. return
  18. }
  19. settings, err := h.ollamaCloudUsage.GetSettings(c.Request.Context())
  20. if err != nil {
  21. response.ErrorFrom(c, err)
  22. return
  23. }
  24. response.Success(c, settings)
  25. }
  26. func (h *AccountHandler) UpdateOllamaCloudUsageSettings(c *gin.Context) {
  27. if h.ollamaCloudUsage == nil {
  28. response.ErrorFrom(c, service.ErrOllamaCloudUsageUnavailable)
  29. return
  30. }
  31. var req service.OllamaCloudUsageSettings
  32. if err := c.ShouldBindJSON(&req); err != nil {
  33. response.BadRequest(c, "Invalid request: "+err.Error())
  34. return
  35. }
  36. if err := h.ollamaCloudUsage.UpdateSettings(c.Request.Context(), &req); err != nil {
  37. response.ErrorFrom(c, err)
  38. return
  39. }
  40. settings, err := h.ollamaCloudUsage.GetSettings(c.Request.Context())
  41. if err != nil {
  42. response.ErrorFrom(c, err)
  43. return
  44. }
  45. response.Success(c, settings)
  46. }
  47. func (h *AccountHandler) GetOllamaCloudUsage(c *gin.Context) {
  48. if !h.requireOllamaCloudUsage(c) {
  49. return
  50. }
  51. accountID, ok := ollamaCloudUsageAccountID(c)
  52. if !ok {
  53. return
  54. }
  55. state, err := h.ollamaCloudUsage.GetState(c.Request.Context(), accountID)
  56. if err != nil {
  57. response.ErrorFrom(c, err)
  58. return
  59. }
  60. response.Success(c, state)
  61. }
  62. func (h *AccountHandler) SaveOllamaCloudUsageSession(c *gin.Context) {
  63. if !h.requireOllamaCloudUsage(c) {
  64. return
  65. }
  66. accountID, ok := ollamaCloudUsageAccountID(c)
  67. if !ok {
  68. return
  69. }
  70. var req ollamaCloudUsageSessionRequest
  71. if err := c.ShouldBindJSON(&req); err != nil {
  72. response.BadRequest(c, "Invalid request: "+err.Error())
  73. return
  74. }
  75. state, err := h.ollamaCloudUsage.SaveSession(c.Request.Context(), accountID, req.Session)
  76. if err != nil {
  77. response.ErrorFrom(c, err)
  78. return
  79. }
  80. response.Success(c, state)
  81. }
  82. func (h *AccountHandler) DeleteOllamaCloudUsageSession(c *gin.Context) {
  83. if !h.requireOllamaCloudUsage(c) {
  84. return
  85. }
  86. accountID, ok := ollamaCloudUsageAccountID(c)
  87. if !ok {
  88. return
  89. }
  90. state, err := h.ollamaCloudUsage.DeleteSession(c.Request.Context(), accountID)
  91. if err != nil {
  92. response.ErrorFrom(c, err)
  93. return
  94. }
  95. response.Success(c, state)
  96. }
  97. func (h *AccountHandler) SetOllamaCloudUsageAutoRefresh(c *gin.Context) {
  98. if !h.requireOllamaCloudUsage(c) {
  99. return
  100. }
  101. accountID, ok := ollamaCloudUsageAccountID(c)
  102. if !ok {
  103. return
  104. }
  105. var req ollamaCloudUsageAutoRefreshRequest
  106. if err := c.ShouldBindJSON(&req); err != nil {
  107. response.BadRequest(c, "Invalid request: "+err.Error())
  108. return
  109. }
  110. state, err := h.ollamaCloudUsage.SetAutoRefresh(c.Request.Context(), accountID, *req.Enabled)
  111. if err != nil {
  112. response.ErrorFrom(c, err)
  113. return
  114. }
  115. response.Success(c, state)
  116. }
  117. func (h *AccountHandler) RefreshOllamaCloudUsage(c *gin.Context) {
  118. if !h.requireOllamaCloudUsage(c) {
  119. return
  120. }
  121. accountID, ok := ollamaCloudUsageAccountID(c)
  122. if !ok {
  123. return
  124. }
  125. state, err := h.ollamaCloudUsage.Refresh(c.Request.Context(), accountID)
  126. if err != nil {
  127. response.ErrorFrom(c, err)
  128. return
  129. }
  130. response.Success(c, state)
  131. }
  132. func (h *AccountHandler) requireOllamaCloudUsage(c *gin.Context) bool {
  133. if h != nil && h.ollamaCloudUsage != nil {
  134. return true
  135. }
  136. response.ErrorFrom(c, service.ErrOllamaCloudUsageUnavailable)
  137. return false
  138. }
  139. func ollamaCloudUsageAccountID(c *gin.Context) (int64, bool) {
  140. if c == nil {
  141. return 0, false
  142. }
  143. accountID, err := strconv.ParseInt(c.Param("id"), 10, 64)
  144. if err != nil || accountID <= 0 {
  145. response.BadRequest(c, "Invalid account ID")
  146. return 0, false
  147. }
  148. return accountID, true
  149. }