Spaces:
Running
Running
restructure repo into production layout; add whatsapp-service, tests, ddl, docs, scripts; scrub hardcoded secrets
83d6851 | package label_handler | |
| import ( | |
| "net/http" | |
| instance_model "agentdeck-whatsapp-service/pkg/instance/model" | |
| label_service "agentdeck-whatsapp-service/pkg/label/service" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| type LabelHandler interface { | |
| ChatLabel(ctx *gin.Context) | |
| MessageLabel(ctx *gin.Context) | |
| EditLabel(ctx *gin.Context) | |
| ChatUnlabel(ctx *gin.Context) | |
| MessageUnlabel(ctx *gin.Context) | |
| GetLabels(ctx *gin.Context) | |
| } | |
| type labelHandler struct { | |
| labelService label_service.LabelService | |
| } | |
| // Add label to chat | |
| // @Summary Add label to chat | |
| // @Description Add label to chat | |
| // @Tags Label | |
| // @Accept json | |
| // @Produce json | |
| // @Param message body label_service.ChatLabelStruct true "Label data" | |
| // @Success 200 {object} gin.H "success" | |
| // @Failure 400 {object} gin.H "Error on validation" | |
| // @Failure 500 {object} gin.H "Internal server error" | |
| // @Router /label/chat [post] | |
| func (l *labelHandler) ChatLabel(ctx *gin.Context) { | |
| getInstance := ctx.MustGet("instance") | |
| instance, ok := getInstance.(*instance_model.Instance) | |
| if !ok { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": "instance not found"}) | |
| return | |
| } | |
| var data *label_service.ChatLabelStruct | |
| err := ctx.ShouldBindBodyWithJSON(&data) | |
| if err != nil { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| if data.JID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "jid is required"}) | |
| return | |
| } | |
| if data.LabelID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "label id is required"}) | |
| return | |
| } | |
| err = l.labelService.ChatLabel(data, instance) | |
| if err != nil { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| ctx.JSON(http.StatusOK, gin.H{"message": "success"}) | |
| } | |
| // Add label to message | |
| // @Summary Add label to message | |
| // @Description Add label to message | |
| // @Tags Label | |
| // @Accept json | |
| // @Produce json | |
| // @Param message body label_service.MessageLabelStruct true "Label data" | |
| // @Success 200 {object} gin.H "success" | |
| // @Failure 400 {object} gin.H "Error on validation" | |
| // @Failure 500 {object} gin.H "Internal server error" | |
| // @Router /label/message [post] | |
| func (l *labelHandler) MessageLabel(ctx *gin.Context) { | |
| getInstance := ctx.MustGet("instance") | |
| instance, ok := getInstance.(*instance_model.Instance) | |
| if !ok { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": "instance not found"}) | |
| return | |
| } | |
| var data *label_service.MessageLabelStruct | |
| err := ctx.ShouldBindBodyWithJSON(&data) | |
| if err != nil { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| if data.JID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "jid is required"}) | |
| return | |
| } | |
| if data.LabelID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "label id is required"}) | |
| return | |
| } | |
| if data.MessageID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "message id is required"}) | |
| return | |
| } | |
| err = l.labelService.MessageLabel(data, instance) | |
| if err != nil { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| ctx.JSON(http.StatusOK, gin.H{"message": "success"}) | |
| } | |
| // Edit label | |
| // @Summary Edit label | |
| // @Description Edit label | |
| // @Tags Label | |
| // @Accept json | |
| // @Produce json | |
| // @Param message body label_service.EditLabelStruct true "Label data" | |
| // @Success 200 {object} gin.H "success" | |
| // @Failure 400 {object} gin.H "Error on validation" | |
| // @Failure 500 {object} gin.H "Internal server error" | |
| // @Router /label/edit [post] | |
| func (l *labelHandler) EditLabel(ctx *gin.Context) { | |
| getInstance := ctx.MustGet("instance") | |
| instance, ok := getInstance.(*instance_model.Instance) | |
| if !ok { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": "instance not found"}) | |
| return | |
| } | |
| var data *label_service.EditLabelStruct | |
| err := ctx.ShouldBindBodyWithJSON(&data) | |
| if err != nil { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| if data.LabelID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "label id is required"}) | |
| return | |
| } | |
| if data.Name == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "name is required"}) | |
| return | |
| } | |
| err = l.labelService.EditLabel(data, instance) | |
| if err != nil { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| ctx.JSON(http.StatusOK, gin.H{"message": "success"}) | |
| } | |
| // Remove label from chat | |
| // @Summary Remove label from chat | |
| // @Description Remove label from chat | |
| // @Tags Label | |
| // @Accept json | |
| // @Produce json | |
| // @Param message body label_service.ChatLabelStruct true "Label data" | |
| // @Success 200 {object} gin.H "success" | |
| // @Failure 400 {object} gin.H "Error on validation" | |
| // @Failure 500 {object} gin.H "Internal server error" | |
| // @Router /unlabel/chat [post] | |
| func (l *labelHandler) ChatUnlabel(ctx *gin.Context) { | |
| getInstance := ctx.MustGet("instance") | |
| instance, ok := getInstance.(*instance_model.Instance) | |
| if !ok { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": "instance not found"}) | |
| return | |
| } | |
| var data *label_service.ChatLabelStruct | |
| err := ctx.ShouldBindBodyWithJSON(&data) | |
| if err != nil { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| if data.JID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "jid is required"}) | |
| return | |
| } | |
| if data.LabelID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "label id is required"}) | |
| return | |
| } | |
| err = l.labelService.ChatUnlabel(data, instance) | |
| if err != nil { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| ctx.JSON(http.StatusOK, gin.H{"message": "success"}) | |
| } | |
| // Remove label from message | |
| // @Summary Remove label from message | |
| // @Description Remove label from message | |
| // @Tags Label | |
| // @Accept json | |
| // @Produce json | |
| // @Param message body label_service.MessageLabelStruct true "Label data" | |
| // @Success 200 {object} gin.H "success" | |
| // @Failure 400 {object} gin.H "Error on validation" | |
| // @Failure 500 {object} gin.H "Internal server error" | |
| // @Router /unlabel/message [post] | |
| func (l *labelHandler) MessageUnlabel(ctx *gin.Context) { | |
| getInstance := ctx.MustGet("instance") | |
| instance, ok := getInstance.(*instance_model.Instance) | |
| if !ok { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": "instance not found"}) | |
| return | |
| } | |
| var data *label_service.MessageLabelStruct | |
| err := ctx.ShouldBindBodyWithJSON(&data) | |
| if err != nil { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| if data.JID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "jid is required"}) | |
| return | |
| } | |
| if data.LabelID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "label id is required"}) | |
| return | |
| } | |
| if data.MessageID == "" { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "message id is required"}) | |
| return | |
| } | |
| err = l.labelService.MessageUnlabel(data, instance) | |
| if err != nil { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| ctx.JSON(http.StatusOK, gin.H{"message": "success"}) | |
| } | |
| // Get all labels | |
| // @Summary Get all labels | |
| // @Description Get all labels | |
| // @Tags Label | |
| // @Accept json | |
| // @Produce json | |
| // @Success 200 {object} gin.H "success" | |
| // @Failure 500 {object} gin.H "Internal server error" | |
| // @Router /label/list [get] | |
| func (l *labelHandler) GetLabels(ctx *gin.Context) { | |
| getInstance := ctx.MustGet("instance") | |
| instance, ok := getInstance.(*instance_model.Instance) | |
| if !ok { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": "instance not found"}) | |
| return | |
| } | |
| labels, err := l.labelService.GetLabels(instance) | |
| if err != nil { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| ctx.JSON(http.StatusOK, labels) | |
| } | |
| func NewLabelHandler( | |
| labelService label_service.LabelService, | |
| ) LabelHandler { | |
| return &labelHandler{ | |
| labelService: labelService, | |
| } | |
| } | |