сервис техподдержки, многократно унаследованный. Херувим - ангел, а сотрудникам ТП нужно ангельское терпение
Go to file
2024-09-25 13:18:19 +03:00
app Merge branch 'dev' into 'staging' 2024-03-05 13:01:15 +03:00
dal feat: add origin field 2024-03-07 21:58:59 +03:00
deployments fix: change redis ip for actual 2024-05-08 13:27:06 +03:00
jwt_adapter Update jwt_adapter/jwt_adapter.go 2023-03-28 14:23:32 +00:00
k8s lil commit 2022-02-27 18:27:44 +03:00
middleware rewrite midlleware to fiber 2024-09-25 13:18:19 +03:00
model feat: add origin field 2024-03-07 21:58:59 +03:00
ops deployStaging 2022-10-31 14:00:20 +03:00
router -- 2021-05-15 17:03:46 +03:00
script add clean script 2024-05-13 21:02:09 +03:00
service Update service.go 2024-05-10 11:56:51 +00:00
test add redis client 2024-02-21 21:07:40 +03:00
tools update tests 2024-02-20 21:43:12 +03:00
utils add files restrictions 2024-02-21 17:42:23 +03:00
version nutshell 2021-04-10 21:46:51 +03:00
.gitignore fix: readme 2022-12-14 21:23:27 +03:00
.gitlab-ci.yml ci: deployment for production 2024-01-27 14:46:34 +03:00
compose.test.yml fix: partially rewrite readme for api 2022-12-13 13:07:15 +03:00
compose.yml feat: compose.yml for gitlab registry 2022-12-21 14:33:01 +03:00
Dockerfile Update Dockerfile 2023-03-06 17:39:24 +00:00
DockerfileStaging Update file DockerfileStaging 2023-06-21 17:27:05 +00:00
go.mod add redis client 2024-02-21 21:07:40 +03:00
go.sum add redis client 2024-02-21 21:07:40 +03:00
main.go add file storing 2021-09-05 18:24:13 +03:00
Makefile put file tests 2022-11-02 21:52:02 +03:00
openapi.yaml изменен подход со свича на мэп дабы улучшить читаемость кода 2024-02-22 18:26:34 +03:00
prod.crt lil commit 2022-02-27 18:27:44 +03:00
prod.key lil commit 2022-02-27 18:27:44 +03:00
README.md fix: readme 2022-12-14 21:26:21 +03:00
server.crt lil commit 2022-02-27 18:27:44 +03:00
server.key lil commit 2022-02-27 18:27:44 +03:00

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 - метод для отправки файлов