Compare commits

..

No commits in common. "3995617db61af0e41ecfe21066283706892239c2" and "06a2c55da50414cb6b38d3100755e4b6edc7b78b" have entirely different histories.

6 changed files with 14 additions and 75 deletions

View File

@ -1,9 +0,0 @@
FROM golang AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o app
FROM scratch
COPY --from=build --chown=0:0 --chmod=555 /app/app /app/app
ENTRYPOINT ["/app/app"]

View File

@ -10,14 +10,14 @@
- [ ] status - [ ] status
- [ ] bio - [ ] bio
- [ ] profile picture - [ ] profile picture
- [x] provide user info - [ ] provide user info
- manage rights and roles - manage rights and roles
- [ ] edit roles - [ ] edit roles
- [ ] bind roles to users - [ ] bind roles to users
- manage messages - manage messages
- [x] send - [ ] send
- [x] alert - [ ] alert
- [x] query - [ ] query
- files - files
- [ ] upload - [ ] upload
- [ ] serve - [ ] serve

View File

@ -4,17 +4,13 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"strconv" "strconv"
"time"
"git.tek.govt.hu/dowerx/chat/server/model" "git.tek.govt.hu/dowerx/chat/server/model"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
) )
const ( const CHANNEL_ID string = "id"
CHANNEL_ID string = "id"
DEFAULT_MESSAGE_LIMIT int = 100
)
var upgrader = websocket.Upgrader{ var upgrader = websocket.Upgrader{
ReadBufferSize: 1024, ReadBufferSize: 1024,
@ -46,36 +42,7 @@ func getMessages(c *gin.Context) {
return return
} }
limitStr := c.Query("limit") messages, msgErr := chatController.GetMessages(id)
fromStr := c.Query("from")
var limit int = DEFAULT_MESSAGE_LIMIT
var from time.Time = time.Now().UTC()
var parseErr error
if limitStr != "" {
limit, parseErr = strconv.Atoi(limitStr)
if parseErr != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": "invalid limit parameter",
})
return
}
}
if fromStr != "" {
from, parseErr = time.Parse(time.RFC3339, fromStr)
if parseErr != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": "invalid from parameter",
})
return
}
}
fmt.Println(from, limit)
messages, msgErr := chatController.GetMessages(id, from, limit)
if msgErr != nil { if msgErr != nil {
sendError(c, msgErr) sendError(c, msgErr)
return return

View File

@ -26,8 +26,8 @@ func (c ChatController) ListAvailableChannels(token string) ([]model.Channel, *u
return c.channelDAO.ListAvailableChannels(userID) return c.channelDAO.ListAvailableChannels(userID)
} }
func (c ChatController) GetMessages(channel int, from time.Time, limit int) ([]model.Message, *util.ChatError) { func (c ChatController) GetMessages(channel int) ([]model.Message, *util.ChatError) {
return c.messageDAO.List(model.Channel{ID: channel}, from, limit) return c.messageDAO.List(model.Channel{ID: channel})
} }
func (c ChatController) SendMessage(token string, channel int, content string) *util.ChatError { func (c ChatController) SendMessage(token string, channel int, content string) *util.ChatError {

View File

@ -1,8 +1,6 @@
package dao package dao
import ( import (
"time"
"git.tek.govt.hu/dowerx/chat/server/model" "git.tek.govt.hu/dowerx/chat/server/model"
"git.tek.govt.hu/dowerx/chat/server/util" "git.tek.govt.hu/dowerx/chat/server/util"
) )
@ -10,7 +8,7 @@ import (
type IMessageDAO interface { type IMessageDAO interface {
Create(message model.Message) (int, *util.ChatError) Create(message model.Message) (int, *util.ChatError)
Read(id int) (model.Message, *util.ChatError) Read(id int) (model.Message, *util.ChatError)
List(channel model.Channel, from time.Time, limit int) ([]model.Message, *util.ChatError) List(channel model.Channel) ([]model.Message, *util.ChatError)
Update(message model.Message) *util.ChatError Update(message model.Message) *util.ChatError
Delete(id int) *util.ChatError Delete(id int) *util.ChatError
} }

View File

@ -1,9 +1,6 @@
package postgres package postgres
import ( import (
"slices"
"time"
"git.tek.govt.hu/dowerx/chat/server/model" "git.tek.govt.hu/dowerx/chat/server/model"
"git.tek.govt.hu/dowerx/chat/server/util" "git.tek.govt.hu/dowerx/chat/server/util"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
@ -53,18 +50,9 @@ func (d MessageDAO) Read(id int) (model.Message, *util.ChatError) {
} }
// List all messages in channel by ID or name // List all messages in channel by ID or name
func (d MessageDAO) List(channel model.Channel, from time.Time, limit int) ([]model.Message, *util.ChatError) { func (d MessageDAO) List(channel model.Channel) ([]model.Message, *util.ChatError) {
type queryInfo struct {
ID int `db:"id"`
Name string `db:"name"`
From time.Time `db:"from"`
Limit int `db:"limit"`
}
var rows *sqlx.Rows var rows *sqlx.Rows
var err error var err error
if channel.ID != 0 { if channel.ID != 0 {
rows, err = d.db.NamedQuery( rows, err = d.db.NamedQuery(
`select `select
@ -75,10 +63,8 @@ func (d MessageDAO) List(channel model.Channel, from time.Time, limit int) ([]mo
"m"."content" as "content" "m"."content" as "content"
from "message" as "m" from "message" as "m"
inner join "user" "u" on "u"."id" = "m"."sender_id" inner join "user" "u" on "u"."id" = "m"."sender_id"
where "m"."channel_id" = :id and "m"."time" < :from where "m"."channel_id" = :id order by "time"`,
order by "time" desc &channel)
limit :limit`,
&queryInfo{ID: channel.ID, From: from, Limit: limit})
} else { } else {
rows, err = d.db.NamedQuery( rows, err = d.db.NamedQuery(
`select `select
@ -90,10 +76,8 @@ func (d MessageDAO) List(channel model.Channel, from time.Time, limit int) ([]mo
from "message" as "m" from "message" as "m"
inner join "user" "u" on "u"."id" = "m"."sender_id" inner join "user" "u" on "u"."id" = "m"."sender_id"
inner join "channel" "c" on "c"."id" = "m"."channel_id" inner join "channel" "c" on "c"."id" = "m"."channel_id"
where "c"."name" = :name and "m"."time" < :from where "c"."name" = :name order by "time"`,
order by "time" desc &channel)
limit :limit`,
&queryInfo{Name: channel.Name, From: from, Limit: limit})
} }
if err != nil { if err != nil {
@ -114,7 +98,6 @@ func (d MessageDAO) List(channel model.Channel, from time.Time, limit int) ([]mo
messages = append(messages, message) messages = append(messages, message)
} }
slices.Reverse(messages)
return messages, util.MakeError(err, util.DATABASE_QUERY_FAULT) return messages, util.MakeError(err, util.DATABASE_QUERY_FAULT)
} }