summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-12-01 16:29:22 +0200
committerKyren223 <Kyren223@proton.me>2024-12-01 16:29:22 +0200
commit567d569dd649cc0b82d6f8890e2bd77b052ebed6 (patch)
tree3654ebb4a26418d5c2c0075a59cc51cf9fadddc4 /internal
parentbfc65f7f37f7badcffe36063d1a294dbb7e417ec (diff)
Added delete for frequency and network on the server and only frequency
on the client
Diffstat (limited to 'internal')
-rw-r--r--internal/client/ui/core/network/network.go7
-rw-r--r--internal/server/api/api.go68
-rw-r--r--internal/server/server.go6
3 files changed, 80 insertions, 1 deletions
diff --git a/internal/client/ui/core/network/network.go b/internal/client/ui/core/network/network.go
index 69d85c0..75ea318 100644
--- a/internal/client/ui/core/network/network.go
+++ b/internal/client/ui/core/network/network.go
@@ -109,6 +109,13 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
m.index = max(0, m.index-1)
case "j":
m.index = min(m.FrequenciesLength()-1, m.index+1)
+
+ case "ctrl+d":
+ frequencyId := m.Network().Frequencies[m.index].ID
+ return m, gateway.Send(&packet.DeleteFrequency{
+ Frequency: frequencyId,
+ })
+
}
}
return m, nil
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index b1cc58d..479da95 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -327,3 +327,71 @@ func SwapFrequencies(ctx context.Context, sess *session.Session, request *packet
return request
}
+
+func DeleteFrequency(ctx context.Context, sess *session.Session, request *packet.DeleteFrequency) packet.Payload {
+ queries := data.New(db)
+
+ frequency, err := queries.GetFrequencyById(ctx, request.Frequency)
+ if err == sql.ErrNoRows {
+ return &packet.Error{Error: "frequency doesn't exist"}
+ }
+ if err != nil {
+ log.Println("database error 1:", err)
+ return &ErrInternalError
+ }
+
+ isAdmin, err := IsNetworkAdmin(ctx, queries, sess.ID(), frequency.NetworkID)
+ if err == sql.ErrNoRows {
+ return &packet.Error{Error: "either user or network don't exist"}
+ }
+ if err != nil {
+ log.Println("database error 2:", err)
+ return &ErrInternalError
+ }
+ if !isAdmin {
+ return &ErrPermissionDenied
+ }
+
+ err = queries.DeleteFrequency(ctx, frequency.ID)
+ if err != nil {
+ log.Println("database error 3:", err)
+ return &ErrInternalError
+ }
+
+ return &packet.FrequenciesInfo{
+ RemoveFrequencies: []snowflake.ID{frequency.ID},
+ Frequencies: nil,
+ Network: frequency.NetworkID,
+ Set: false,
+ }
+}
+
+func DeleteNetwork(ctx context.Context, sess *session.Session, request *packet.DeleteNetwork) packet.Payload {
+ queries := data.New(db)
+
+ network, err := queries.GetNetworkById(ctx, request.Network)
+ if err == sql.ErrNoRows {
+ return &packet.Error{Error: "network doesn't exist"}
+ }
+ if err != nil {
+ log.Println("database error 1:", err)
+ return &ErrInternalError
+ }
+
+ // NOTE: important check, make sure they are the owner (authorized)
+ if network.OwnerID != sess.ID() {
+ return &ErrPermissionDenied
+ }
+
+ err = queries.DeleteNetwork(ctx, request.Network)
+ if err != nil {
+ log.Println("database error 2:", err)
+ return &ErrInternalError
+ }
+
+ return &packet.NetworksInfo{
+ Networks: nil,
+ RemoveNetworks: []snowflake.ID{request.Network},
+ Set: false,
+ }
+}
diff --git a/internal/server/server.go b/internal/server/server.go
index edad545..1d7397e 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -314,12 +314,16 @@ func processRequest(ctx context.Context, sess *session.Session, request packet.P
var response packet.Payload
switch request := request.(type) {
case *packet.CreateNetwork:
- response = timeout(20*time.Millisecond, api.CreateNetwork, ctx, sess, request)
+ response = timeout(10*time.Millisecond, api.CreateNetwork, ctx, sess, request)
+ case *packet.DeleteNetwork:
+ response = timeout(500*time.Millisecond, api.DeleteNetwork, ctx, sess, request)
case *packet.SwapUserNetworks:
response = timeout(5*time.Millisecond, api.SwapUserNetworks, ctx, sess, request)
case *packet.CreateFrequency:
response = timeout(5*time.Millisecond, api.CreateFrequency, ctx, sess, request)
+ case *packet.DeleteFrequency:
+ response = timeout(200*time.Millisecond, api.DeleteFrequency, ctx, sess, request)
case *packet.SwapFrequencies:
response = timeout(5*time.Millisecond, api.SwapFrequencies, ctx, sess, request)