From 567d569dd649cc0b82d6f8890e2bd77b052ebed6 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Sun, 1 Dec 2024 16:29:22 +0200 Subject: Added delete for frequency and network on the server and only frequency on the client --- internal/client/ui/core/network/network.go | 7 +++ internal/server/api/api.go | 68 ++++++++++++++++++++++++++++++ internal/server/server.go | 6 ++- 3 files changed, 80 insertions(+), 1 deletion(-) (limited to 'internal') 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) -- cgit v1.3.1