# Heruvym

/create - метод для создания тикета.
пример запроса

POST http://localhost:8000/support/create

Тело запроса
```
{
  "Title":"test ticket title",
  "Message":"test ticket message"
}
```

тело ответа
```
{
  "Ticket":"c2fekjcobibtq7akknog"
}
```

/subscribe - sse метод для подписывания на изменения по всех тикетах доступных пользователю.

пример запроса
http://localhost:8000/support/subscribe?Authorization=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJRCI6ImMxdmNrZWtvYmlicmFmYWU2bjYwIiwiU2Vzc2lvbiI6ImMxdmNrZWtvYmlicmFmYWU2bjZnIiwiVXNlciI6ImMxdXAxY2tvYmliaXVpNDVxNGYwIiwiVGFyaWZmIjowLCJDcmVhdGVkIjoxNjE4OTIyMDQyMDQ3LCJMYXN0U2VlbiI6MTYxODkyMjA5OTg5MH0.INLy790JP-o6DDZcXfSEXUDg7lE1_83Ns2vDJVrUFuQ

тело ответа
```
Ticket: {
    ID         string `bson:"_id"`
    UserID     string `bson:"UserID"`
    SessionID  string `bson:"SessionID"`
    AnswererID string `bson:"AnswererID"`
    State      string  `bson:"State"`
    TopMessage: {
                    ID        string `bson:"_id" json:"id"`
                    TicketID  string `bson:"TicketID" json:"ticket_id"`
                    UserID    string `bson:"UserID" json:"user_id"`
                    SessionID string `bson:"SessionID" json:"session_id"`
                    Message string         `bson:"Message" json:"message"`
                    Files   []string       `bson:"Files" json:"files"`
                    Shown   map[string]int `bson:"Shown" json:"shown"`
                    CreatedAt time.Time `bson:"CreatedAt" json:"created_at"`
                }
    Title string `bson:"Title"`
    CreatedAt time.Time `bson:"CreatedAt"`
    UpdatedAt time.Time `bson:"UpdatedAt"`
    Rate int `bson:"Rate"`
}
```

/ticket - sse метод для подписки на сообщения из одного тикета.

пример запроса
http://localhost:8000/support/ticket?ticket=c2fekjcobibtq7akknog&Authorization=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJRCI6ImMxdmNrZWtvYmlicmFmYWU2bjYwIiwiU2Vzc2lvbiI6ImMxdmNrZWtvYmlicmFmYWU2bjZnIiwiVXNlciI6ImMxdXAxY2tvYmliaXVpNDVxNGYwIiwiVGFyaWZmIjowLCJDcmVhdGVkIjoxNjE4OTIyMDQyMDQ3LCJMYXN0U2VlbiI6MTYxODkyMjA5OTg5MH0.INLy790JP-o6DDZcXfSEXUDg7lE1_83Ns2vDJVrUFuQ

тело ответа
```
{
    ID        string `bson:"_id" json:"id"`
    TicketID  string `bson:"TicketID" json:"ticket_id"`
    UserID    string `bson:"UserID" json:"user_id"`
    SessionID string `bson:"SessionID" json:"session_id"`
    Message string         `bson:"Message" json:"message"`
    Files   []string       `bson:"Files" json:"files"`
    Shown   map[string]int `bson:"Shown" json:"shown"`
    CreatedAt time.Time `bson:"CreatedAt" json:"created_at"`
}
```
/send - метод для отправки сообщения в тикета

пример запроса
POST http://localhost:8000/support/send

Тело запроса
```
{
  "message":"test ticket message",
  "TicketID":"c2fekjcobibtq7akknog", 
  "lang":"ru",
  "files": ["idoffile"]
}
```
Ответ null


/getTickets - метод для получения тикетов с пагинацией

пример запроса
POST http://localhost:8000/support/getTickets

Тело запроса:
```
{
  "amt":10,
  "page":1,
  "srch":"test",
  "status":"open"
}
```
 Ответ:
``` 
[{
  ID         string `bson:"_id"`
  UserID     string `bson:"UserID"`
  SessionID  string `bson:"SessionID"`
  AnswererID string `bson:"AnswererID"`
  State      string  `bson:"State"`
  TopMessage: {
      ID        string `bson:"_id" json:"id"`
      TicketID  string `bson:"TicketID" json:"ticket_id"`
      UserID    string `bson:"UserID" json:"user_id"`
      SessionID string `bson:"SessionID" json:"session_id"`
      Message string         `bson:"Message" json:"message"`
      Files   []string       `bson:"Files" json:"files"`
      Shown   map[string]int `bson:"Shown" json:"shown"`
      CreatedAt time.Time `bson:"CreatedAt" json:"created_at"`
  }
  Title string `bson:"Title"`
  CreatedAt time.Time `bson:"CreatedAt"`
  UpdatedAt time.Time `bson:"UpdatedAt"`
  Rate int `bson:"Rate"`
}]
```
/getMessages - метод для получения сообщений конкретного тикета с пагинацией

пример запроса
POST http://localhost:8000/support/getMessages

Тело запроса:
```
{
  "amt":10,
  "page":1,
  "srch":"test",
  "ticket":"c2fekjcobibtq7akknog"
}
```

Ответ:
```
[{
   ID        string `bson:"_id" json:"id"`
   TicketID  string `bson:"TicketID" json:"ticket_id"`
   UserID    string `bson:"UserID" json:"user_id"`
   SessionID string `bson:"SessionID" json:"session_id"`

   Message string         `bson:"Message" json:"message"`
   Files   []string       `bson:"Files" json:"files"`
   Shown   map[string]int `bson:"Shown" json:"shown"`

   CreatedAt time.Time `bson:"CreatedAt" json:"created_at"`
}]
```
/pick - подхватывание сотрудником диалога

пример запроса
POST http://localhost:8000/support/pick

Тело запроса:
```
{"ticket":"c2fekjcobibtq7akknog"}
```
Ответ: null

/delegate - передача тикета другому сотруднику

пример запроса
POST http://localhost:8000/support/delegate

Тело запроса:
```
{
  "ticket":"c2fekjcobibtq7akknog",
  "answerer":"c2fekjcobibtq7akknog"
}
```
Ответ: null

/vote - метод для оценки полезности ответа

пример запроса
POST http://localhost:8000/support/delegate

Тело запроса:
```
{
  "ticket":"c2fekjcobibtq7akknog",
  "rate":5
}
```
Ответ: null

/close - метод для закрытия тикета

пример запроса
POST http://localhost:8000/support/close

Тело запроса:
```
{
  "ticket":"c2fekjcobibtq7akknog"
}
```

Ответ: null

/support/sendFiles - метод для отправки файлов

