added system bool varible

This commit is contained in:
Pavel 2024-10-02 16:36:49 +03:00
parent 80a89df157
commit dafb97288f
4 changed files with 48 additions and 10 deletions

@ -49,6 +49,7 @@ func NewOtherController(deps Deps) *OtherController {
type ReqScreenshot struct {
TicketID string `json:"ticket"`
Lang string `json:"lang"`
System bool `json:"system"`
}
func (o *OtherController) RequestScreenshot(ctx *fiber.Ctx) error {
@ -60,6 +61,7 @@ func (o *OtherController) RequestScreenshot(ctx *fiber.Ctx) error {
sess.Id,
sess.Id,
request.TicketID,
request.System, // system error flag
)
if err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
@ -81,6 +83,7 @@ var fileTypeLimits = map[string]int64{
type PutFileReq struct {
Ticket string `json:"ticket"`
System bool `json:"system"`
}
type PutFileResp struct {
@ -241,6 +244,7 @@ func (o *OtherController) PutFile(ctx *fiber.Ctx) error {
sess.Id,
req.Ticket,
fileIDs,
req.System, // system error flag
)
if err != nil {
@ -281,8 +285,13 @@ func (o *OtherController) PutFile(ctx *fiber.Ctx) error {
userLink = "незарегистрированного пользователя"
}
message := fmt.Sprintf("Вам пришло сообщение от %s сссылка на пользователя с %s, ccылка на чат - %s",
var message string
if req.System {
message = fmt.Sprintf("СИСТЕМНАЯ ОШИБКА! Произошла ошибка в сообщении от %s c %s. Ссылка на чат: %s", userLink, domain, supportLink)
} else {
message = fmt.Sprintf("Вам пришло сообщение от %s ссылка на пользователя с %s, ссылка на чат - %s",
userLink, domain, supportLink)
}
if _, err := o.notifier.Send(tb.ChatID(o.tgChatID), message); err != nil {
fmt.Println("CAN NOT NOTIFY", err)

@ -106,6 +106,7 @@ func (t *TicketController) CreateTicket(ctx *fiber.Ctx) error {
session.Id,
ticketID,
[]string{},
false, // system error flag
); err != nil {
return ctx.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
@ -167,6 +168,7 @@ type ReqPutMessage struct {
TicketID string `json:"ticket"`
Files []string `json:"files"`
Lang string `json:"lang"`
System bool `json:"system"`
}
func (t *TicketController) PutMessage(ctx *fiber.Ctx) error {
@ -190,6 +192,7 @@ func (t *TicketController) PutMessage(ctx *fiber.Ctx) error {
sess.Id,
request.TicketID,
[]string{},
request.System,
)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
@ -217,8 +220,13 @@ func (t *TicketController) PutMessage(ctx *fiber.Ctx) error {
userLink = "незарегистрированного пользователя"
}
message := fmt.Sprintf("Вам пришло сообщение от %s сссылка на пользователя с %s, ссылка на чат - %s",
var message string
if request.System {
message = fmt.Sprintf("СИСТЕМНАЯ ОШИБКА! Произошла ошибка в сообщении от %s c %s. Ссылка на чат: %s", userLink, domain, supportLink)
} else {
message = fmt.Sprintf("Вам пришло сообщение от %s ссылка на пользователя с %s, ссылка на чат - %s",
userLink, domain, supportLink)
}
if _, err := t.notifier.Send(telebot.ChatID(t.tgChatID), message); err != nil {
t.zapLogger.Error("CAN NOT NOTIFY", zap.Error(err))
@ -291,6 +299,7 @@ type GetMessagesReq struct {
TicketID string `json:"ticket"`
}
// todo тут стоит фильтровать по system?
func (t *TicketController) GetMessages(ctx *fiber.Ctx) error {
var request GetMessagesReq
if err := ctx.BodyParser(&request); err != nil {
@ -376,7 +385,8 @@ func (t *TicketController) CloseTicket(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
if _, err := t.dal.PutMessage(ctx.Context(), "close", "close", "close", request.TicketID, []string{}); err != nil {
// system error flag
if _, err := t.dal.PutMessage(ctx.Context(), "close", "close", "close", request.TicketID, []string{}, false); err != nil {
return ctx.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
@ -477,10 +487,21 @@ func (t *TicketController) userTickets(ctx context.Context, userID string, outpu
}
if data != nil {
var filteredData []model.Ticket
for _, ticket := range data {
if !ticket.TopMessage.System {
filteredData = append(filteredData, ticket)
}
}
data = filteredData
output <- GetTicketsResp{data, count}
}
if err := t.dal.WatchTickets(ctx, userID, func(ticket model.Ticket) error {
if ticket.TopMessage.System {
return nil
}
output <- ticket
return nil
}); err != nil {
@ -538,7 +559,9 @@ func (t *TicketController) Subscribe(ctx context.Context) chan interface{} {
if err := t.dal.WatchMessages(ctx, ticketID,
func(message model.Message) error {
if !message.System {
output <- message
}
//if err := h.dal.SetShown(ctx, message.ID, sess.Session); err != nil {
// fmt.Println("3", err)
@ -618,7 +641,9 @@ func (t *TicketController) Subscribe(ctx context.Context) chan interface{} {
if err := t.dal.WatchMessages(ctx, ticketID,
func(message model.Message) error {
if !message.System {
output <- message
}
//if err := h.dal.SetShown(ctx, message.ID, sess.Session); err != nil {
// fmt.Println("3", err)

@ -13,6 +13,8 @@ type Message struct {
Shown map[string]int `bson:"Shown" json:"shown"`
RequestScreenshot string `bson:"RequestScreenshot" json:"request_screenshot"`
System bool `bson:"System" json:"system"`
CreatedAt time.Time `bson:"CreatedAt" json:"created_at"`
}

@ -128,7 +128,7 @@ func (d *DAL) CreateAccountIndex(ctx context.Context) error {
func (d *DAL) PutMessage(
ctx context.Context,
message, userID, sessionID, ticketID string,
files []string,
files []string, system bool,
) (*model.Message, error) {
insertable := model.Message{
ID: xid.New().String(),
@ -138,6 +138,7 @@ func (d *DAL) PutMessage(
Message: message,
Files: files,
Shown: map[string]int{},
System: system,
CreatedAt: time.Now(),
}
@ -186,7 +187,7 @@ func (d *DAL) PutSCResponse(
func (d *DAL) PutSCRequest(
ctx context.Context,
userID, sessionID, ticketID string,
userID, sessionID, ticketID string, system bool,
) (*model.Message, error) {
insertable := model.Message{
ID: xid.New().String(),
@ -197,6 +198,7 @@ func (d *DAL) PutSCRequest(
Files: []string{},
Shown: map[string]int{},
RequestScreenshot: "acquisition",
System: system,
CreatedAt: time.Now(),
}