Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@
- [ ] search

#### Chat
- [ ] get_conversation
- [ ] delete_message
- [ ] get_list_conversation
- [ ] delete_conversation
- [x] [get_conversation](https://github.com/thanhpp/zola/issues/94)
- [ ] [delete_message](https://github.com/thanhpp/zola/issues/94)
- [x] [get_list_conversation](https://github.com/thanhpp/zola/issues/94)
- [x] [delete_conversation](https://github.com/thanhpp/zola/issues/94)

- TODO (data whatever)
- [x] Tạo connection || ws://localhost:12000/ws ||
Expand Down
8 changes: 6 additions & 2 deletions cmd/auco/ac_start.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/thanhpp/zola/config/aucoconfig"
"github.com/thanhpp/zola/internal/auco/app"
"github.com/thanhpp/zola/internal/auco/infra/adapter/gormdb"
"github.com/thanhpp/zola/internal/auco/infra/adapter/llqclient"
"github.com/thanhpp/zola/internal/auco/infra/port/websocketserver"
"github.com/thanhpp/zola/pkg/booting"
"github.com/thanhpp/zola/pkg/logger"
Expand All @@ -30,9 +31,12 @@ func start(configPath string) {
}
logger.Info("dbao OK")

wmManager := app.NewWsManager(gormdb.NewGormDB(), gormdb.NewGormDB())
gormDB := gormdb.NewGormDB()
wmManager := app.NewWsManager(gormDB, gormDB)
llqClient := llqclient.NewLLQClient(aucoconfig.Get().LacLongQuanService.Host)
app := app.NewApp(gormDB, gormDB, llqClient)

wsServer := websocketserver.NewWebsocketServer(&aucoconfig.Get().HTTPServer, wmManager)
wsServer := websocketserver.NewWebsocketServer(&aucoconfig.Get().HTTPServer, wmManager, app, llqClient)
wsServerDaemon, err := wsServer.Start()
if err != nil {
panic(errors.WithMessage(err, "start websocket server"))
Expand Down
5 changes: 4 additions & 1 deletion cmd/auco/auco.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,7 @@ Database:
User: auco_user
Pass: auco_pass
LogLevel: Info
LogColor: true
LogColor: true

LacLongQuanService:
Host: https://zola.thanhpp.ninja
11 changes: 7 additions & 4 deletions config/aucoconfig/aucoconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@ import (
)

type MainConfig struct {
Name string `mapstructure:"Name"`
Log logger.LogConfig `mapstructure:"Log"`
HTTPServer shared.HTTPServerConfig `mapstructure:"HTTPServer"`
Database shared.DatabaseConfig `mapstructure:"Database"`
Name string `mapstructure:"Name"`
Log logger.LogConfig `mapstructure:"Log"`
HTTPServer shared.HTTPServerConfig `mapstructure:"HTTPServer"`
Database shared.DatabaseConfig `mapstructure:"Database"`
LacLongQuanService struct {
Host string `mapstructure:"Host"`
} `mapstructure:"LacLongQuanService"`
}

var cfg = new(MainConfig)
Expand Down
204 changes: 204 additions & 0 deletions docs/Zola.postman_collection.json
Original file line number Diff line number Diff line change
Expand Up @@ -2781,6 +2781,210 @@
}
]
},
{
"name": "chat",
"item": [
{
"name": "get conversation list",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{token}}",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "{{auco}}/conversations",
"host": [
"{{auco}}"
],
"path": [
"conversations"
]
}
},
"response": []
},
{
"name": "get conversation by partnerid",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{token}}",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "{{auco}}/conversations/partner/ea033d22-708d-11ec-bd01-0242c0a83003?index=1&count=1",
"host": [
"{{auco}}"
],
"path": [
"conversations",
"partner",
"ea033d22-708d-11ec-bd01-0242c0a83003"
],
"query": [
{
"key": "index",
"value": "1"
},
{
"key": "count",
"value": "1"
}
]
}
},
"response": []
},
{
"name": "get conversation by roomid",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{token}}",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "{{auco}}/conversations/6476d7cf-3bfc-4bf6-a933-4f75e85fbb5d?index=1&count=1",
"host": [
"{{auco}}"
],
"path": [
"conversations",
"6476d7cf-3bfc-4bf6-a933-4f75e85fbb5d"
],
"query": [
{
"key": "index",
"value": "1"
},
{
"key": "count",
"value": "1"
}
]
}
},
"response": []
},
{
"name": "delete conversation",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{token}}",
"type": "string"
}
]
},
"method": "DELETE",
"header": [],
"url": {
"raw": "{{auco}}/conversations/e92beb1c-6faa-4f04-b805-c968916711f0",
"host": [
"{{auco}}"
],
"path": [
"conversations",
"e92beb1c-6faa-4f04-b805-c968916711f0"
]
}
},
"response": []
},
{
"name": "delete message",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{token}}",
"type": "string"
}
]
},
"method": "DELETE",
"header": [],
"url": {
"raw": "{{auco}}/conversations/message/d83bd715-2985-4530-bbd8-22c3a846c656|1642789194219",
"host": [
"{{auco}}"
],
"path": [
"conversations",
"message",
"d83bd715-2985-4530-bbd8-22c3a846c656|1642789194219"
]
}
},
"response": []
}
]
},
{
"name": "internal",
"item": [
{
"name": "validate token",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": ""
}
},
"response": []
},
{
"name": "get user info",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": ""
}
},
"response": []
},
{
"name": "is block",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": ""
}
},
"response": []
}
]
},
{
"name": "Signup",
"request": {
Expand Down
17 changes: 17 additions & 0 deletions internal/auco/app/app.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package app

import "github.com/thanhpp/zola/internal/auco/infra/adapter/llqclient"

type App struct {
ConversationHandler ConversationHandler
}

func NewApp(roomRepo RoomRepository, msgRepo MessageRepository, llqClient *llqclient.LacLongQuanClient) *App {
return &App{
ConversationHandler: ConversationHandler{
roomRepo: roomRepo,
msgRepo: msgRepo,
llqClient: llqClient,
},
}
}
10 changes: 10 additions & 0 deletions internal/auco/app/app_errors.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package app

import "errors"

var (
ErrBlocked = errors.New("blocked")
ErrInvalidUser = errors.New("invalid user")
ErrInvalidMsgID = errors.New("invalid msgID")
ErrNotSender = errors.New("not sender")
)
11 changes: 11 additions & 0 deletions internal/auco/app/cvsthandler.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package app

import (
"github.com/thanhpp/zola/internal/auco/infra/adapter/llqclient"
)

type ConversationHandler struct {
roomRepo RoomRepository
msgRepo MessageRepository
llqClient *llqclient.LacLongQuanClient
}
20 changes: 20 additions & 0 deletions internal/auco/app/cvsthandler_deleteall.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package app

import "context"

func (c ConversationHandler) DeleteByConversationID(ctx context.Context, requestorID, conversationID string) error {
room, err := c.roomRepo.GetRoomByID(ctx, conversationID)
if err != nil {
return err
}

if requestorID != room.UserA && requestorID != room.UserB {
return ErrInvalidUser
}

if err := c.msgRepo.DeleteByRoomID(ctx, room.ID); err != nil {
return err
}

return nil
}
35 changes: 35 additions & 0 deletions internal/auco/app/cvsthandler_deletemsg.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package app

import (
"context"
"strconv"
"strings"

"github.com/thanhpp/zola/pkg/logger"
)

func (c ConversationHandler) DeleteMessage(ctx context.Context, requestorID, msgID string) error {
msgIDSlice := strings.Split(msgID, "|")
if len(msgIDSlice) != 2 {
logger.Errorf("ConversationHandler - invalid msgID len: %d", len(msgIDSlice))
return ErrInvalidMsgID
}

createdAtStr := msgIDSlice[1]
createdAtInt64, err := strconv.ParseInt(createdAtStr, 10, 64)
if err != nil {
logger.Errorf("ConversationHandler - invalid msgID createdAt: %v", err)
return ErrInvalidMsgID
}

msg, err := c.msgRepo.GetMessage(ctx, msgIDSlice[0], createdAtInt64)
if err != nil {
return err
}

if msg.SenderID != requestorID {
return ErrNotSender
}

return c.msgRepo.DeleteMessage(ctx, msgIDSlice[0], createdAtInt64)
}
Loading