docxTemplater/handlers/templateGroup.go

252 lines
5.2 KiB
Go
Raw Normal View History

package handlers
import (
"errors"
"github.com/gorilla/mux"
"net/http"
2022-12-31 14:46:28 +00:00
"penahub.gitlab.yandexcloud.net/backend/templategen/dal/model"
)
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{
2023-08-04 10:23:35 +00:00
UserID: amoData.AccountID,
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
}
2023-08-04 10:23:35 +00:00
resp, err := h.dal.TemplateGroup.GetListByUserID(r.Context(), amoData.AccountID)
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,
2023-08-04 10:23:35 +00:00
UserID: amoData.AccountID,
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 == "" {
2022-11-19 13:24:30 +00:00
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
}
2023-08-04 10:23:35 +00:00
err = h.dal.Template.PushGroup(r.Context(), req.TemplateID, req.GroupID, amoData.AccountID)
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
}
2023-08-04 10:23:35 +00:00
err = h.dal.Template.PullGroup(r.Context(), req.TemplateID, req.GroupID, amoData.AccountID)
if err != nil {
h.reportError(w, err, http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusOK)
}