From e6237f5b1265f43d25963408ab09689e38050a3e Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Sat, 21 Dec 2024 19:00:37 +0200 Subject: Prevented deletion of frequency if it's the only one in the network --- internal/client/ui/core/frequencylist/frequencylist.go | 5 +++++ internal/server/api/api.go | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/internal/client/ui/core/frequencylist/frequencylist.go b/internal/client/ui/core/frequencylist/frequencylist.go index bc4ef05..d2e7dc5 100644 --- a/internal/client/ui/core/frequencylist/frequencylist.go +++ b/internal/client/ui/core/frequencylist/frequencylist.go @@ -116,6 +116,11 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { m.index = min(m.FrequenciesLength()-1, m.index+1) case "ctrl+d": + if len(m.Network().Frequencies) == 1 { + // Don't delete the last frequency! + return m, nil + } + // TODO: consider adding a confirmation popup frequencyId := m.Network().Frequencies[m.index].ID return m, gateway.Send(&packet.DeleteFrequency{ Frequency: frequencyId, diff --git a/internal/server/api/api.go b/internal/server/api/api.go index 479da95..75d7d02 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -331,6 +331,7 @@ func SwapFrequencies(ctx context.Context, sess *session.Session, request *packet func DeleteFrequency(ctx context.Context, sess *session.Session, request *packet.DeleteFrequency) packet.Payload { queries := data.New(db) + // Existence frequency, err := queries.GetFrequencyById(ctx, request.Frequency) if err == sql.ErrNoRows { return &packet.Error{Error: "frequency doesn't exist"} @@ -340,6 +341,7 @@ func DeleteFrequency(ctx context.Context, sess *session.Session, request *packet return &ErrInternalError } + // Authentication isAdmin, err := IsNetworkAdmin(ctx, queries, sess.ID(), frequency.NetworkID) if err == sql.ErrNoRows { return &packet.Error{Error: "either user or network don't exist"} @@ -352,11 +354,21 @@ func DeleteFrequency(ctx context.Context, sess *session.Session, request *packet return &ErrPermissionDenied } - err = queries.DeleteFrequency(ctx, frequency.ID) + // At least one frequency exists + frequencies, err := queries.GetNetworkFrequencies(frequency.NetworkID) if err != nil { log.Println("database error 3:", err) return &ErrInternalError } + if len(frequencies) == 1 { + return &packet.Error{Error: "at least 1 frequency must exist at all times"} + } + + err = queries.DeleteFrequency(ctx, frequency.ID) + if err != nil { + log.Println("database error 4:", err) + return &ErrInternalError + } return &packet.FrequenciesInfo{ RemoveFrequencies: []snowflake.ID{frequency.ID}, -- cgit v1.3.1