github.com/TrueBlocks/trueblocks-core/src/apps/chifra@v0.0.0-20241022031540-b362680128f7/internal/monitors/handle_crud.go (about) 1 // Copyright 2021 The TrueBlocks Authors. All rights reserved. 2 // Use of this source code is governed by a license that can 3 // be found in the LICENSE file. 4 5 package monitorsPkg 6 7 import ( 8 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" 9 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/file" 10 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger" 11 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/monitor" 12 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" 13 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/validate" 14 ) 15 16 // HandleCrud handles the chifra monitors delete, undelete, remove and decache commands. 17 // 18 // [State] | Delete | Undelete | Remove | 19 // ------------|--------|-------------------| 20 // Not Deleted | Delete | Error | Error | 21 // Deleted | Error | Undelete | Remove | 22 // ------------|--------|-------------------| 23 func (opts *MonitorsOptions) HandleCrud(rCtx *output.RenderCtx) error { 24 chain := opts.Globals.Chain 25 for _, addr := range opts.Addrs { 26 m, _ := monitor.NewMonitor(chain, base.HexToAddress(addr), false) 27 if !file.FileExists(m.Path()) { 28 return validate.Usage("No monitor was found for address " + addr + ".") 29 30 } else { 31 if opts.Undelete && !m.IsDeleted() { 32 return validate.Usage("Monitor for {0} must be deleted before being undeleted.", addr) 33 34 } else { 35 if opts.Delete && opts.Remove { 36 // do nothing, it will be resolved below... 37 38 } else { 39 if opts.Delete && m.IsDeleted() { 40 return validate.Usage("Monitor for {0} is already deleted.", addr) 41 42 } else if opts.Remove && !m.IsDeleted() { 43 return validate.Usage("Cannot remove a file that has not previously been deleted.") 44 } 45 } 46 } 47 } 48 } 49 50 for _, addr := range opts.Addrs { 51 m, _ := monitor.NewMonitor(chain, base.HexToAddress(addr), false) 52 if opts.Undelete { 53 _ = m.ReadMonitorHeader() 54 m.UnDelete() 55 m.Close() 56 logger.Info(("Monitor " + addr + " was undeleted.")) 57 58 } else { 59 if opts.Delete { 60 _ = m.ReadMonitorHeader() 61 m.Delete() 62 m.Close() 63 logger.Info(("Monitor " + addr + " was deleted but not removed.")) 64 } 65 66 if opts.Remove { 67 wasRemoved, err := m.Remove() 68 if !wasRemoved || err != nil { 69 logger.Info(("Monitor for " + addr + " was not removed (" + err.Error() + ")")) 70 } else { 71 logger.Info(("Monitor for " + addr + " was permanently removed.")) 72 } 73 } 74 } 75 } 76 77 return nil 78 }