update naming of functions, add option to get count of unread messages of user

This commit is contained in:
2026-04-21 19:50:14 +02:00
parent a554c870ef
commit 422c4eb419
13 changed files with 178 additions and 484 deletions
+63 -15
View File
@@ -21,7 +21,7 @@ import (
)
func HandleDm(response http.ResponseWriter, request *http.Request) {
if !validCheckWithResponseOnFail(&response, request, postNormal) {
if !validCheckWithResponseOnFail(&response, request, normal) {
return
}
@@ -74,10 +74,14 @@ func HandleDm(response http.ResponseWriter, request *http.Request) {
Receiver: conn.Id,
}
wsServer.WsSendMessageCloseIfTimeout(target, types.WsEventMessage{
Type: WsEventType.DirectMessage,
Event: message,
})
if user.WsConn != nil {
wsServer.WsSendMessageCloseIfTimeout(target, types.WsEventMessage{
Type: WsEventType.DirectMessage,
Event: message,
})
} else {
cache.IncrementConnectionsUnreadMessages(user.Id, conn.Id)
}
err = postgresql.ConnectionMessageSave(ctx, message)
if err != nil {
@@ -88,8 +92,52 @@ func HandleDm(response http.ResponseWriter, request *http.Request) {
response.WriteHeader(http.StatusAccepted)
}
func HandleUserGetConnectionsUnreadMessages(response http.ResponseWriter, request *http.Request) {
if !validCheckWithResponseOnFail(&response, request, normal) {
return
}
ctx := request.Context()
user, err := getUserByToken(ctx, request.Header.Get("token"))
if err != nil {
http.Error(response, "invalid token", http.StatusUnauthorized)
return
}
connectionIds, err := convertions.StringToUuidSlice(request.URL.Query().Get("connections"))
if err != nil {
http.Error(response, "invalid uuid format", http.StatusBadRequest)
return
}
result := make([]uint32, len(*connectionIds))
for _, connId := range *connectionIds {
_, ok := cache.GetConnection(user, connId)
if !ok {
http.Error(response, "no such connection: "+connId.String(), http.StatusUnauthorized)
return
}
}
for _, connId := range *connectionIds {
count, _ := cache.GetConnectionsUnreadMessages(user.Id, connId)
cache.DeallocateConnectionsUnreadMessages(user.Id, connId)
result = append(result, count)
}
json, err := json2.Marshal(result)
if err != nil {
http.Error(response, "internal server error", http.StatusInternalServerError)
return
}
response.WriteHeader(http.StatusAccepted)
response.Write(json)
}
func HandleUserGetConnectionMessages(response http.ResponseWriter, request *http.Request) {
if !validCheckWithResponseOnFail(&response, request, postNormal) {
if !validCheckWithResponseOnFail(&response, request, normal) {
return
}
ctx := request.Context()
@@ -104,7 +152,7 @@ func HandleUserGetConnectionMessages(response http.ResponseWriter, request *http
return
}
before, err := convertions.ConvertStringTimestamp(request.URL.Query().Get("before"))
before, err := convertions.StringToTimestamp(request.URL.Query().Get("before"))
if err != nil {
before = time.Now()
}
@@ -158,7 +206,7 @@ func HandleUserGetConnectionMessages(response http.ResponseWriter, request *http
}
func HandleUserNewConnection(response http.ResponseWriter, request *http.Request) {
if !validCheckWithResponseOnFail(&response, request, postNormal) {
if !validCheckWithResponseOnFail(&response, request, normal) {
return
}
ctx := request.Context()
@@ -167,7 +215,7 @@ func HandleUserNewConnection(response http.ResponseWriter, request *http.Request
http.Error(response, "invalid token", http.StatusUnauthorized)
return
}
recipientId, err := convertions.ConvertStringUuid(request.FormValue("recipient"))
recipientId, err := convertions.StringToUuid(request.FormValue("recipient"))
if err != nil {
http.Error(response, "no such user", http.StatusUnauthorized)
return
@@ -205,7 +253,7 @@ func HandleUserNewConnection(response http.ResponseWriter, request *http.Request
http.Error(response, "internal server error", http.StatusInternalServerError)
return
}
cache.CacheAddConnection(requestor, recipient, connection)
cache.AddConnection(requestor, recipient, connection)
wsServer.WsSendMessageCloseIfTimeout(recipient, types.WsEventMessage{
Type: WsEventType.ConnectionCreated,
@@ -217,7 +265,7 @@ func HandleUserNewConnection(response http.ResponseWriter, request *http.Request
}
func HandleUserDeleteConnection(response http.ResponseWriter, request *http.Request) {
if !validCheckWithResponseOnFail(&response, request, postNormal) {
if !validCheckWithResponseOnFail(&response, request, normal) {
return
}
ctx := request.Context()
@@ -259,7 +307,7 @@ func HandleUserDeleteConnection(response http.ResponseWriter, request *http.Requ
return
}
cache.CacheDeleteConnection(user, user2, conn.Id)
cache.DeleteConnection(user, user2, conn.Id)
wsServer.WsSendMessageCloseIfTimeout(user2, types.WsEventMessage{
Type: WsEventType.ConnectionDeleted,
Event: conn.Id,
@@ -270,7 +318,7 @@ func HandleUserDeleteConnection(response http.ResponseWriter, request *http.Requ
}
func HandleUserElevateConnection(response http.ResponseWriter, request *http.Request) {
if !validCheckWithResponseOnFail(&response, request, postNormal) {
if !validCheckWithResponseOnFail(&response, request, normal) {
return
}
ctx := request.Context()
@@ -330,7 +378,7 @@ func HandleUserElevateConnection(response http.ResponseWriter, request *http.Req
}
func HandleUserDeElevateConnection(response http.ResponseWriter, request *http.Request) {
if !validCheckWithResponseOnFail(&response, request, postNormal) {
if !validCheckWithResponseOnFail(&response, request, normal) {
return
}
@@ -377,7 +425,7 @@ func HandleUserDeElevateConnection(response http.ResponseWriter, request *http.R
}
func HandleUserGetConnections(response http.ResponseWriter, request *http.Request) {
if !validCheckWithResponseOnFail(&response, request, postNormal) {
if !validCheckWithResponseOnFail(&response, request, normal) {
return
}
ctx := request.Context()