admin_production_handler.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. package handlers
  2. import (
  3. "net/http"
  4. "cmr-backend/internal/apperr"
  5. "cmr-backend/internal/httpx"
  6. "cmr-backend/internal/service"
  7. )
  8. type AdminProductionHandler struct {
  9. service *service.AdminProductionService
  10. }
  11. func NewAdminProductionHandler(service *service.AdminProductionService) *AdminProductionHandler {
  12. return &AdminProductionHandler{service: service}
  13. }
  14. func (h *AdminProductionHandler) ListPlaces(w http.ResponseWriter, r *http.Request) {
  15. result, err := h.service.ListPlaces(r.Context(), parseAdminLimit(r))
  16. if err != nil {
  17. httpx.WriteError(w, err)
  18. return
  19. }
  20. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  21. }
  22. func (h *AdminProductionHandler) ListMapAssets(w http.ResponseWriter, r *http.Request) {
  23. result, err := h.service.ListMapAssets(r.Context(), parseAdminLimit(r))
  24. if err != nil {
  25. httpx.WriteError(w, err)
  26. return
  27. }
  28. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  29. }
  30. func (h *AdminProductionHandler) CreatePlace(w http.ResponseWriter, r *http.Request) {
  31. var req service.CreateAdminPlaceInput
  32. if err := httpx.DecodeJSON(r, &req); err != nil {
  33. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  34. return
  35. }
  36. result, err := h.service.CreatePlace(r.Context(), req)
  37. if err != nil {
  38. httpx.WriteError(w, err)
  39. return
  40. }
  41. httpx.WriteJSON(w, http.StatusCreated, map[string]any{"data": result})
  42. }
  43. func (h *AdminProductionHandler) GetPlace(w http.ResponseWriter, r *http.Request) {
  44. result, err := h.service.GetPlaceDetail(r.Context(), r.PathValue("placePublicID"))
  45. if err != nil {
  46. httpx.WriteError(w, err)
  47. return
  48. }
  49. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  50. }
  51. func (h *AdminProductionHandler) CreateMapAsset(w http.ResponseWriter, r *http.Request) {
  52. var req service.CreateAdminMapAssetInput
  53. if err := httpx.DecodeJSON(r, &req); err != nil {
  54. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  55. return
  56. }
  57. result, err := h.service.CreateMapAsset(r.Context(), r.PathValue("placePublicID"), req)
  58. if err != nil {
  59. httpx.WriteError(w, err)
  60. return
  61. }
  62. httpx.WriteJSON(w, http.StatusCreated, map[string]any{"data": result})
  63. }
  64. func (h *AdminProductionHandler) GetMapAsset(w http.ResponseWriter, r *http.Request) {
  65. result, err := h.service.GetMapAssetDetail(r.Context(), r.PathValue("mapAssetPublicID"))
  66. if err != nil {
  67. httpx.WriteError(w, err)
  68. return
  69. }
  70. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  71. }
  72. func (h *AdminProductionHandler) UpdateMapAsset(w http.ResponseWriter, r *http.Request) {
  73. var req service.UpdateAdminMapAssetInput
  74. if err := httpx.DecodeJSON(r, &req); err != nil {
  75. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  76. return
  77. }
  78. result, err := h.service.UpdateMapAsset(r.Context(), r.PathValue("mapAssetPublicID"), req)
  79. if err != nil {
  80. httpx.WriteError(w, err)
  81. return
  82. }
  83. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  84. }
  85. func (h *AdminProductionHandler) CreateTileRelease(w http.ResponseWriter, r *http.Request) {
  86. var req service.CreateAdminTileReleaseInput
  87. if err := httpx.DecodeJSON(r, &req); err != nil {
  88. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  89. return
  90. }
  91. result, err := h.service.CreateTileRelease(r.Context(), r.PathValue("mapAssetPublicID"), req)
  92. if err != nil {
  93. httpx.WriteError(w, err)
  94. return
  95. }
  96. httpx.WriteJSON(w, http.StatusCreated, map[string]any{"data": result})
  97. }
  98. func (h *AdminProductionHandler) ListCourseSources(w http.ResponseWriter, r *http.Request) {
  99. result, err := h.service.ListCourseSources(r.Context(), parseAdminLimit(r))
  100. if err != nil {
  101. httpx.WriteError(w, err)
  102. return
  103. }
  104. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  105. }
  106. func (h *AdminProductionHandler) CreateCourseSource(w http.ResponseWriter, r *http.Request) {
  107. var req service.CreateAdminCourseSourceInput
  108. if err := httpx.DecodeJSON(r, &req); err != nil {
  109. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  110. return
  111. }
  112. result, err := h.service.CreateCourseSource(r.Context(), req)
  113. if err != nil {
  114. httpx.WriteError(w, err)
  115. return
  116. }
  117. httpx.WriteJSON(w, http.StatusCreated, map[string]any{"data": result})
  118. }
  119. func (h *AdminProductionHandler) GetCourseSource(w http.ResponseWriter, r *http.Request) {
  120. result, err := h.service.GetCourseSource(r.Context(), r.PathValue("sourcePublicID"))
  121. if err != nil {
  122. httpx.WriteError(w, err)
  123. return
  124. }
  125. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  126. }
  127. func (h *AdminProductionHandler) CreateCourseSet(w http.ResponseWriter, r *http.Request) {
  128. var req service.CreateAdminCourseSetInput
  129. if err := httpx.DecodeJSON(r, &req); err != nil {
  130. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  131. return
  132. }
  133. result, err := h.service.CreateCourseSet(r.Context(), r.PathValue("mapAssetPublicID"), req)
  134. if err != nil {
  135. httpx.WriteError(w, err)
  136. return
  137. }
  138. httpx.WriteJSON(w, http.StatusCreated, map[string]any{"data": result})
  139. }
  140. func (h *AdminProductionHandler) GetCourseSet(w http.ResponseWriter, r *http.Request) {
  141. result, err := h.service.GetCourseSetDetail(r.Context(), r.PathValue("courseSetPublicID"))
  142. if err != nil {
  143. httpx.WriteError(w, err)
  144. return
  145. }
  146. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  147. }
  148. func (h *AdminProductionHandler) CreateCourseVariant(w http.ResponseWriter, r *http.Request) {
  149. var req service.CreateAdminCourseVariantInput
  150. if err := httpx.DecodeJSON(r, &req); err != nil {
  151. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  152. return
  153. }
  154. result, err := h.service.CreateCourseVariant(r.Context(), r.PathValue("courseSetPublicID"), req)
  155. if err != nil {
  156. httpx.WriteError(w, err)
  157. return
  158. }
  159. httpx.WriteJSON(w, http.StatusCreated, map[string]any{"data": result})
  160. }
  161. func (h *AdminProductionHandler) ListRuntimeBindings(w http.ResponseWriter, r *http.Request) {
  162. result, err := h.service.ListRuntimeBindings(r.Context(), parseAdminLimit(r))
  163. if err != nil {
  164. httpx.WriteError(w, err)
  165. return
  166. }
  167. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  168. }
  169. func (h *AdminProductionHandler) CreateRuntimeBinding(w http.ResponseWriter, r *http.Request) {
  170. var req service.CreateAdminRuntimeBindingInput
  171. if err := httpx.DecodeJSON(r, &req); err != nil {
  172. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  173. return
  174. }
  175. result, err := h.service.CreateRuntimeBinding(r.Context(), req)
  176. if err != nil {
  177. httpx.WriteError(w, err)
  178. return
  179. }
  180. httpx.WriteJSON(w, http.StatusCreated, map[string]any{"data": result})
  181. }
  182. func (h *AdminProductionHandler) ImportTileRelease(w http.ResponseWriter, r *http.Request) {
  183. var req service.ImportAdminTileReleaseInput
  184. if err := httpx.DecodeJSON(r, &req); err != nil {
  185. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  186. return
  187. }
  188. result, err := h.service.ImportTileRelease(r.Context(), req)
  189. if err != nil {
  190. httpx.WriteError(w, err)
  191. return
  192. }
  193. httpx.WriteJSON(w, http.StatusCreated, map[string]any{"data": result})
  194. }
  195. func (h *AdminProductionHandler) ImportCourseSetKMLBatch(w http.ResponseWriter, r *http.Request) {
  196. var req service.ImportAdminCourseSetBatchInput
  197. if err := httpx.DecodeJSON(r, &req); err != nil {
  198. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  199. return
  200. }
  201. result, err := h.service.ImportCourseSetKMLBatch(r.Context(), req)
  202. if err != nil {
  203. httpx.WriteError(w, err)
  204. return
  205. }
  206. httpx.WriteJSON(w, http.StatusCreated, map[string]any{"data": result})
  207. }
  208. func (h *AdminProductionHandler) GetRuntimeBinding(w http.ResponseWriter, r *http.Request) {
  209. result, err := h.service.GetRuntimeBinding(r.Context(), r.PathValue("runtimeBindingPublicID"))
  210. if err != nil {
  211. httpx.WriteError(w, err)
  212. return
  213. }
  214. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  215. }