259 lines
5.5 KiB
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)
|
|
}
|