diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-01-27 20:10:48 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-01-27 20:10:48 +0200 |
| commit | cb214d740a9a73b2953163d85b21a2ffcee377f0 (patch) | |
| tree | aaab8b5ca36c5bf6ea9589468e61c08c26d0c614 /internal/server/api | |
| parent | b2bd96e46b51b38a05e6cc6649058f8ad0a3b6e8 (diff) | |
Added pings to messages in frequencies
Diffstat (limited to 'internal/server/api')
| -rw-r--r-- | internal/server/api/api.go | 30 | ||||
| -rw-r--r-- | internal/server/api/migrations/20250127154005_ping.sql | 8 |
2 files changed, 32 insertions, 6 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go index d7a0ef5..3fff656 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -71,19 +71,36 @@ func SendMessage(ctx context.Context, sess *session.Session, request *packet.Sen } if frequency.Perms != packet.PermReadWrite && !member.IsAdmin { - log.Println("No perms") return &ErrPermissionDenied } + if request.Ping != nil { + if *request.Ping == packet.PingEveryone { + if !member.IsAdmin { + return &ErrPermissionDenied + } + } else if *request.Ping != packet.PingAdmins { + _, err := queries.GetUserById(ctx, *request.Ping) + if err == sql.ErrNoRows { + return &packet.Error{Error: "pinged user doesn't exist"} + } + if err != nil { + log.Println("database error 2:", err) + return &ErrInternalError + } + } + } + message, err := queries.CreateMessage(ctx, data.CreateMessageParams{ ID: sess.Manager().Node().Generate(), SenderID: sess.ID(), Content: content, FrequencyID: request.FrequencyID, ReceiverID: nil, + Ping: request.Ping, }) if err != nil { - log.Println(sess.Addr(), "database error 2:", err) + log.Println("database error 3:", err) return &ErrInternalError } @@ -105,7 +122,7 @@ func SendMessage(ctx context.Context, sess *session.Session, request *packet.Sen return &packet.Error{Error: "user doesn't exist"} } if err != nil { - log.Println(sess.Addr(), "database error 3:", err) + log.Println("database error 4:", err) return &ErrInternalError } if !user.IsPublicDM { @@ -117,7 +134,7 @@ func SendMessage(ctx context.Context, sess *session.Session, request *packet.Sen return &ErrPermissionDenied } if err != nil { - log.Println(sess.Addr(), "database error 4:", err) + log.Println("database error 5:", err) return &ErrInternalError } if !bytes.Equal(sess.PubKey, pubKey) { @@ -127,13 +144,14 @@ func SendMessage(ctx context.Context, sess *session.Session, request *packet.Sen message, err := queries.CreateMessage(ctx, data.CreateMessageParams{ ID: sess.Manager().Node().Generate(), - SenderID: sess.ID(), Content: content, + SenderID: sess.ID(), FrequencyID: nil, ReceiverID: request.ReceiverID, + Ping: nil, }) if err != nil { - log.Println(sess.Addr(), "database error 5:", err) + log.Println("database error 6:", err) return &ErrInternalError } diff --git a/internal/server/api/migrations/20250127154005_ping.sql b/internal/server/api/migrations/20250127154005_ping.sql new file mode 100644 index 0000000..54f207a --- /dev/null +++ b/internal/server/api/migrations/20250127154005_ping.sql @@ -0,0 +1,8 @@ +-- +goose Up +ALTER TABLE messages ADD ping INTEGER DEFAULT NULL; +-- Must be null if freuqencyId is null +-- 0 - @ping:everyone, 1 - @ping:admins, otherwise references userId + + +-- +goose Down +ALTER TABLE messages DROP ping; |
