summaryrefslogtreecommitdiff
path: root/internal/server/api/api.go
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-12-01 16:03:31 +0200
committerKyren223 <Kyren223@proton.me>2024-12-01 16:03:31 +0200
commite00a17a2f483fc00d5daecb3426c29a6c8598492 (patch)
treeecfb4100072db4ea043ce6e64377a6f3c4d72c43 /internal/server/api/api.go
parent3e9c0ee6a1e765d42d54acb71c10ae7e67353a17 (diff)
Added swap frequencies support on server-side
Diffstat (limited to 'internal/server/api/api.go')
-rw-r--r--internal/server/api/api.go37
1 files changed, 33 insertions, 4 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index 533a9b0..74abd94 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -232,8 +232,6 @@ func GetNetworksInfo(ctx context.Context, sess *session.Session) (packet.Payload
}, nil
}
-// FIXME: Deletion of a network is not handled!
-// it needs to be shifted like how it works with frequencies!
func SwapUserNetworks(ctx context.Context, sess *session.Session, request *packet.SwapUserNetworks) packet.Payload {
queries := data.New(db)
pos1, pos2 := int64(request.Pos1), int64(request.Pos2)
@@ -259,8 +257,7 @@ func CreateFrequency(ctx context.Context, sess *session.Session, request *packet
NetworkID: request.Network,
})
if err == sql.ErrNoRows {
- log.Println("Err", err)
- return &packet.Error{Error: "user entry in network doesn't exist"}
+ return &packet.Error{Error: "either user or network don't exist"}
}
if err != nil {
log.Println("database error 1:", err)
@@ -306,3 +303,35 @@ func CreateFrequency(ctx context.Context, sess *session.Session, request *packet
Set: false,
}
}
+
+func SwapFrequencies(ctx context.Context, sess *session.Session, request *packet.SwapFrequencies) packet.Payload {
+ queries := data.New(db)
+
+ // Check if authorized
+ userNetwork, err := queries.GetUserNetwork(ctx, data.GetUserNetworkParams{
+ UserID: sess.ID(),
+ NetworkID: request.Network,
+ })
+ if err == sql.ErrNoRows {
+ return &packet.Error{Error: "either user or network don't exist"}
+ }
+ if err != nil {
+ log.Println("database error 1:", err)
+ return &ErrInternalError
+ }
+ if !userNetwork.IsAdmin || !userNetwork.IsMember || userNetwork.IsBanned {
+ return &ErrPermissionDenied
+ }
+
+ err = queries.SwapFrequencies(ctx, data.SwapFrequenciesParams{
+ Pos1: int64(request.Pos1),
+ Pos2: int64(request.Pos2),
+ NetworkID: request.Network,
+ })
+ if err != nil {
+ log.Println("database error 2:", err)
+ return &ErrInternalError
+ }
+
+ return request
+}