package api import ( "net/http" "os" "github.com/mrleo1nid/pzmanager/internal/pzconfig" ) // handleGetMods отдаёт списки модов из servertest.ini. Названия модов не // запрашиваются здесь: поход в Steam медленный, для него есть отдельный // эндпоинт lookup. func (s *Server) handleGetMods(w http.ResponseWriter, r *http.Request) { path := s.cfg.ServerConfigPath() ini, err := pzconfig.LoadINI(path) if os.IsNotExist(err) { writeJSON(w, http.StatusOK, map[string]any{ "exists": false, "path": path, "hint": "Файл конфигурации появится после первого запуска сервера", }) return } if err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } mods, workshop := ini.Mods() writeJSON(w, http.StatusOK, map[string]any{ "exists": true, "path": path, "mods": mods, "workshop_items": workshop, "map": pzconfig.SplitList(ini.Get(pzconfig.KeyMap)), }) } func (s *Server) handlePutMods(w http.ResponseWriter, r *http.Request) { var body struct { Mods []string `json:"mods"` WorkshopItems []string `json:"workshop_items"` Map []string `json:"map"` } if !decodeJSON(w, r, &body) { return } path := s.cfg.ServerConfigPath() ini, err := pzconfig.LoadINI(path) if err != nil { writeError(w, http.StatusBadRequest, "конфиг сервера недоступен: "+err.Error()) return } ini.SetMods(body.Mods, body.WorkshopItems) if len(body.Map) > 0 { ini.Set(pzconfig.KeyMap, pzconfig.JoinList(body.Map)) } if err := pzconfig.SaveINI(path, ini); err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } s.sup.AppendLog("manager", "Список модов обновлён. Сервер докачает моды из мастерской при следующем запуске.") writeJSON(w, http.StatusOK, map[string]any{"saved": true}) } // handleLookupMods спрашивает у Steam названия модов по Workshop ID. func (s *Server) handleLookupMods(w http.ResponseWriter, r *http.Request) { var body struct { IDs []string `json:"ids"` } if !decodeJSON(w, r, &body) { return } if len(body.IDs) == 0 { writeJSON(w, http.StatusOK, map[string]any{"items": []pzconfig.WorkshopItem{}}) return } if len(body.IDs) > 200 { writeError(w, http.StatusBadRequest, "слишком много идентификаторов за один запрос") return } items := s.workshop.Details(r.Context(), body.IDs) writeJSON(w, http.StatusOK, map[string]any{"items": items}) }