package handlers import ( "errors" "github.com/Pena-Co-Ltd/amocrm_templategen_back/dal/model" "github.com/gorilla/mux" "net/http" ) type ReqTemplateGroupCreate struct { Name string `json:"name"` } type RespTemplateGroupCreate struct { ID string `json:"id"` } func (h *Handlers) TemplateGroupCreate(w http.ResponseWriter, r *http.Request) { var req ReqTemplateGroupCreate amoData := getAmoByJwt(r) if amoData == nil { h.reportError(w, ErrorUnauthorized, http.StatusUnauthorized) return } err := decodePost(&req, r) if err != nil { h.reportError(w, err, http.StatusBadRequest) return } if req.Name == "" { h.reportError(w, errors.New("name required"), http.StatusBadRequest) return } groupID, err := h.dal.TemplateGroup.Insert(r.Context(), &model.TemplateGroup{ UserID: amoData.UserID, Name: req.Name, }) sendResponse(w, http.StatusOK, &RespTemplateGroupCreate{ID: groupID}) } func (h *Handlers) TemplateGroupGet(w http.ResponseWriter, r *http.Request) { id := mux.Vars(r)["id"] if id == "" { h.reportError(w, errors.New("id required"), http.StatusBadRequest) return } resp, err := h.dal.TemplateGroup.GetByID(r.Context(), id) if err != nil { h.reportError(w, err, http.StatusInternalServerError) return } sendResponse(w, http.StatusOK, &resp) } func (h *Handlers) TemplateGroupGetList(w http.ResponseWriter, r *http.Request) { amoData := getAmoByJwt(r) if amoData == nil { h.reportError(w, ErrorUnauthorized, http.StatusUnauthorized) return } resp, err := h.dal.TemplateGroup.GetListByUserID(r.Context(), amoData.UserID) if err != nil { h.reportError(w, err, http.StatusInternalServerError) return } sendResponse(w, http.StatusOK, &resp) } type ReqTemplateGroupEdit struct { ID string `json:"id"` Name string `json:"name"` } func (h *Handlers) TemplateGroupEdit(w http.ResponseWriter, r *http.Request) { var req ReqTemplateGroupEdit amoData := getAmoByJwt(r) if amoData == nil { h.reportError(w, ErrorUnauthorized, http.StatusUnauthorized) return } err := decodePost(&req, r) if err != nil { h.reportError(w, err, http.StatusBadRequest) return } if req.ID == "" { h.reportError(w, errors.New("id required"), http.StatusBadRequest) return } if req.Name == "" { h.reportError(w, errors.New("name required"), http.StatusBadRequest) return } err = h.dal.TemplateGroup.Update(r.Context(), &model.TemplateGroup{ ID: req.ID, UserID: amoData.UserID, Name: req.Name, }) if err != nil { h.reportError(w, err, http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) } type ReqTemplateGroupDelete struct { ID string `json:"id"` } func (h *Handlers) TemplateGroupDelete(w http.ResponseWriter, r *http.Request) { var req ReqTemplateGroupDelete amoData := getAmoByJwt(r) if amoData == nil { h.reportError(w, ErrorUnauthorized, http.StatusUnauthorized) return } err := decodePost(&req, r) if err != nil { h.reportError(w, err, http.StatusBadRequest) return } if req.ID == "" { h.reportError(w, errors.New("id required"), http.StatusBadRequest) return } //TODO: Крайне желательно переписать на транзакции! err = h.dal.Template.DeleteGroupFromAll(r.Context(), req.ID) if err != nil { h.reportError(w, err, http.StatusInternalServerError) return } err = h.dal.TemplateGroup.Delete(r.Context(), req.ID) if err != nil { h.reportError(w, err, http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) } type ReqTemplateGroupPut struct { GroupID string `json:"group_id"` TemplateID string `json:"template_id"` } func (h *Handlers) TemplateGroupPut(w http.ResponseWriter, r *http.Request) { var req ReqTemplateGroupPut amoData := getAmoByJwt(r) if amoData == nil { h.reportError(w, ErrorUnauthorized, http.StatusUnauthorized) return } err := decodePost(&req, r) if err != nil { h.reportError(w, err, http.StatusBadRequest) return } if req.TemplateID == "" { h.reportError(w, errors.New("template_id required"), http.StatusBadRequest) return } if req.GroupID == "" { h.reportError(w, errors.New("group_id required"), http.StatusBadRequest) return } err = h.dal.Template.PushGroup(r.Context(), req.TemplateID, req.GroupID, amoData.UserID) if err != nil { h.reportError(w, err, http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) } type ReqTemplateGroupRemove struct { GroupID string `json:"group_id"` TemplateID string `json:"template_id"` } func (h *Handlers) TemplateGroupRemove(w http.ResponseWriter, r *http.Request) { var req ReqTemplateGroupRemove amoData := getAmoByJwt(r) if amoData == nil { h.reportError(w, ErrorUnauthorized, http.StatusUnauthorized) return } err := decodePost(&req, r) if err != nil { h.reportError(w, err, http.StatusBadRequest) return } if req.TemplateID == "" { h.reportError(w, errors.New("template_id required"), http.StatusBadRequest) return } if req.GroupID == "" { h.reportError(w, errors.New("group_id required"), http.StatusBadRequest) return } err = h.dal.Template.PullGroup(r.Context(), req.TemplateID, req.GroupID, amoData.UserID) if err != nil { h.reportError(w, err, http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) }