docxTemplater/handlers/templateGroup.go

259 lines
5.5 KiB
Go

package handlers
import (
"errors"
"net/http"
"github.com/gorilla/mux"
"penahub.gitlab.yandexcloud.net/backend/templategen/dal/model"
"penahub.gitlab.yandexcloud.net/backend/templategen/middleware"
)
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 request ReqTemplateGroupCreate
amoData := middleware.GetAmoData(r)
if amoData == nil {
h.reportError(w, http.StatusUnauthorized, ErrorUnauthorized)
return
}
err := decodePost(&request, r)
if err != nil {
h.reportError(w, http.StatusBadRequest, err)
return
}
if request.Name == "" {
h.reportError(w, http.StatusBadRequest, errors.New("name required"))
return
}
groupID, err := h.dal.TemplateGroup.Insert(r.Context(), &model.TemplateGroup{
PenaID: amoData.PenaID,
Name: request.Name,
})
if err != nil {
h.reportError(w, http.StatusInternalServerError, err)
return
}
h.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, http.StatusBadRequest, errors.New("id required"))
return
}
resp, err := h.dal.TemplateGroup.GetByID(r.Context(), id)
if err != nil {
h.reportError(w, http.StatusInternalServerError, err)
return
}
h.sendResponse(w, http.StatusOK, &resp)
}
func (h *Handlers) TemplateGroupGetList(w http.ResponseWriter, r *http.Request) {
amoData := middleware.GetAmoData(r)
if amoData == nil {
h.reportError(w, http.StatusUnauthorized, ErrorUnauthorized)
return
}
resp, err := h.dal.TemplateGroup.GetListByPenaID(r.Context(), amoData.PenaID)
if err != nil {
h.reportError(w, http.StatusInternalServerError, err)
return
}
h.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 request ReqTemplateGroupEdit
amoData := middleware.GetAmoData(r)
if amoData == nil {
h.reportError(w, http.StatusUnauthorized, ErrorUnauthorized)
return
}
err := decodePost(&request, r)
if err != nil {
h.reportError(w, http.StatusBadRequest, err)
return
}
if request.ID == "" {
h.reportError(w, http.StatusBadRequest, errors.New("id required"))
return
}
if request.Name == "" {
h.reportError(w, http.StatusBadRequest, errors.New("name required"))
return
}
err = h.dal.TemplateGroup.Update(r.Context(), &model.TemplateGroup{
ID: request.ID,
PenaID: amoData.PenaID,
Name: request.Name,
})
if err != nil {
h.reportError(w, http.StatusInternalServerError, err)
return
}
w.WriteHeader(http.StatusOK)
}
type ReqTemplateGroupDelete struct {
ID string `json:"id"`
}
func (h *Handlers) TemplateGroupDelete(w http.ResponseWriter, r *http.Request) {
var request ReqTemplateGroupDelete
amoData := middleware.GetAmoData(r)
if amoData == nil {
h.reportError(w, http.StatusUnauthorized, ErrorUnauthorized)
return
}
err := decodePost(&request, r)
if err != nil {
h.reportError(w, http.StatusBadRequest, err)
return
}
if request.ID == "" {
h.reportError(w, http.StatusBadRequest, errors.New("id required"))
return
}
//TODO: Крайне желательно переписать на транзакции!
err = h.dal.Template.DeleteGroupFromAll(r.Context(), request.ID)
if err != nil {
h.reportError(w, http.StatusInternalServerError, err)
return
}
err = h.dal.TemplateGroup.Delete(r.Context(), request.ID)
if err != nil {
h.reportError(w, http.StatusInternalServerError, err)
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 request ReqTemplateGroupPut
amoData := middleware.GetAmoData(r)
if amoData == nil {
h.reportError(w, http.StatusUnauthorized, ErrorUnauthorized)
return
}
err := decodePost(&request, r)
if err != nil {
h.reportError(w, http.StatusBadRequest, err)
return
}
if request.TemplateID == "" {
h.reportError(w, http.StatusBadRequest, errors.New("template_id required"))
return
}
if request.GroupID == "" {
h.reportError(w, http.StatusBadRequest, errors.New("group_id required"))
return
}
err = h.dal.Template.PushGroup(r.Context(), request.TemplateID, request.GroupID, amoData.PenaID)
if err != nil {
h.reportError(w, http.StatusInternalServerError, err)
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 request ReqTemplateGroupRemove
amoData := middleware.GetAmoData(r)
if amoData == nil {
h.reportError(w, http.StatusUnauthorized, ErrorUnauthorized)
return
}
err := decodePost(&request, r)
if err != nil {
h.reportError(w, http.StatusBadRequest, err)
return
}
if request.TemplateID == "" {
h.reportError(w, http.StatusBadRequest, errors.New("template_id required"))
return
}
if request.GroupID == "" {
h.reportError(w, http.StatusBadRequest, errors.New("group_id required"))
return
}
err = h.dal.Template.PullGroup(r.Context(), request.TemplateID, request.GroupID, amoData.PenaID)
if err != nil {
h.reportError(w, http.StatusInternalServerError, err)
return
}
w.WriteHeader(http.StatusOK)
}