diff options
| author | Kyren223 <Kyren223@proton.me> | 2024-12-21 19:00:37 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2024-12-21 19:00:37 +0200 |
| commit | e6237f5b1265f43d25963408ab09689e38050a3e (patch) | |
| tree | 8b9071655d5f26cfc8170f2f1f864d6928308cae | |
| parent | e88c5f242dbb30f5fc7a9dfb581fa519d2e5ff11 (diff) | |
Prevented deletion of frequency if it's the only one in the network
| -rw-r--r-- | internal/client/ui/core/frequencylist/frequencylist.go | 5 | ||||
| -rw-r--r-- | internal/server/api/api.go | 14 |
2 files changed, 18 insertions, 1 deletions
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}, |
