UI update

This commit is contained in:
Arnas Udovic 2024-08-29 16:47:24 +03:00
parent 1b2edc1679
commit a830fb4e8a
3 changed files with 100 additions and 25 deletions

2
.gitignore vendored
View file

@ -21,3 +21,5 @@
# Go workspace file # Go workspace file
go.work go.work
zordfsdb

View file

@ -1,3 +1,12 @@
# zordfsdb-client # zordfsdb-client
Client for zordfsdb database. Client for zordfsdb database.
## TODO
- colors
- SAVE - refresh
- _ - before PATH. Ex, after create object and add value: `NOW _.last_build`
- $ - last id. Ex, to add node to list and set value after ADD: `SAVE _.$.v1 abc`
-defalt-command_notfond
-et_on_list_oj

114
main.go
View file

@ -32,18 +32,50 @@ func main() {
reader := bufio.NewReader(os.Stdin) reader := bufio.NewReader(os.Stdin)
fmt.Println("ZordFsDB Shell") fmt.Println("ZordFsDB Shell")
fmt.Println("---------------------") fmt.Println("---------------------")
fmt.Println("DB initialized at ", rootDir)
fmt.Println("")
fmt.Println("Copyright (c) 2024 zordsdavini@arns.lt under MIT license")
fmt.Println("")
fmt.Println("Type HELP to get list of commands or QUIT to get out")
fmt.Println("")
for { for {
fmt.Print("> ") fmt.Print("zordfsdb> ")
text, _ := reader.ReadString('\n') text, _ := reader.ReadString('\n')
// convert CRLF to LF // convert CRLF to LF
text = strings.Replace(text, "\n", "", -1) text = strings.Replace(text, "\n", "", -1)
fmt.Println(text)
if strings.Compare("exit", strings.ToLower(text)) == 0 { if strings.Compare("QUIT", strings.ToUpper(text)) == 0 || strings.Compare("\\Q", strings.ToUpper(text)) == 0 {
fmt.Println("BYE :)") fmt.Println("\nBye o/")
break break
} }
if strings.Compare("HELP", strings.ToUpper(text)) == 0 || strings.Compare("\\H", strings.ToUpper(text)) == 0 {
fmt.Println(`
ZordFsDB shell supported commands:
KEYS [path] - get list of existing properties/objects/lists
GET [path] - get value of property
INC [path] - increase abcex value in property
DEC [path] - decrease abcex value in property
NOW [path] - set value to datetime string in property
DEL [path] - remove property/object/list (no confirmation)
SAVE [path] [value] - set value to property
CREATE [path] - create list/object in path (parent path should exist)
ADD [path] - add abcex indexed object to list. Will return index
HELP - will print this help
QUIT - exit the shell
Last used path can be accessed by _
Last returned index (after ADD command) can be accessed by $
Short commands can be as:
KEYS(\K), GET(\G), INC(\I), DEC(\D), NOW(\N), DEL(\R), SAVE(\S), CREATE(\C), ADD(\A), HELP(\H), QUIT(\Q)
`)
continue
}
ExecuteCommand(db, text) ExecuteCommand(db, text)
} }
} }
@ -54,85 +86,104 @@ func ExecuteCommand(db zordfsdb.DB, commands string) error {
command = strings.Trim(command, " ") command = strings.Trim(command, " ")
parts := strings.Split(command, " ") parts := strings.Split(command, " ")
switch strings.ToLower(parts[0]) { switch strings.ToUpper(parts[0]) {
case "keys": case "KEYS":
if len(parts) == 1 || len(parts[1]) == 0 { case "\\K":
return fmt.Errorf("err format: KEYS [path]") kpath := "."
if !(len(parts) == 1 || len(parts[1]) == 0) {
kpath = parts[1]
} }
fmt.Printf("{%s} KEYS: ", parts[1]) fmt.Printf("{%s} KEYS: ", kpath)
fmt.Println(db.Keys(parts[1])) fmt.Println(db.Keys(kpath))
fmt.Println("")
break break
case "get": case "GET":
case "\\G":
if len(parts) == 1 || len(parts[1]) == 0 { if len(parts) == 1 || len(parts[1]) == 0 {
return fmt.Errorf("err format: GET [path]") return fmt.Errorf("err format: GET [path]\n")
} }
value, ok := db.Get(parts[1]) value, ok := db.Get(parts[1])
if !ok { if !ok {
fmt.Println("No value found.") fmt.Println("No value found.")
fmt.Println("")
} else { } else {
fmt.Printf("{%s} VALUE: ", parts[1]) fmt.Printf("{%s} VALUE: ", parts[1])
fmt.Println(value) fmt.Println(value)
fmt.Println("")
} }
break break
case "inc": case "INC":
case "\\I":
if len(parts) == 1 || len(parts[1]) == 0 { if len(parts) == 1 || len(parts[1]) == 0 {
return fmt.Errorf("err format: INC [path]") return fmt.Errorf("err format: INC [path]\n")
} }
ok := db.Inc(parts[1]) ok := db.Inc(parts[1])
if !ok { if !ok {
fmt.Println("No value found.") fmt.Println("No value found.")
fmt.Println("")
} else { } else {
fmt.Printf("{%s} INC OK\n", parts[1]) fmt.Printf("{%s} INC OK\n", parts[1])
fmt.Println("")
} }
break break
case "dec": case "DEC":
case "\\D":
if len(parts) == 1 || len(parts[1]) == 0 { if len(parts) == 1 || len(parts[1]) == 0 {
return fmt.Errorf("err format: DEC [path]") return fmt.Errorf("err format: DEC [path]\n")
} }
ok := db.Dec(parts[1]) ok := db.Dec(parts[1])
if !ok { if !ok {
fmt.Println("No value found.") fmt.Println("No value found.")
fmt.Println("")
} else { } else {
fmt.Printf("{%s} DEC OK\n", parts[1]) fmt.Printf("{%s} DEC OK\n", parts[1])
fmt.Println("")
} }
break break
case "now": case "NOW":
case "\\N":
if len(parts) == 1 || len(parts[1]) == 0 { if len(parts) == 1 || len(parts[1]) == 0 {
return fmt.Errorf("err format: NOW [path]") return fmt.Errorf("err format: NOW [path]\n")
} }
ok := db.Now(parts[1]) ok := db.Now(parts[1])
if !ok { if !ok {
fmt.Println("No value found.") fmt.Println("No value found.")
fmt.Println("")
} else { } else {
fmt.Printf("{%s} NOW OK\n", parts[1]) fmt.Printf("{%s} NOW OK\n", parts[1])
fmt.Println("")
} }
break break
case "del": case "DEL":
case "\\R":
if len(parts) == 1 || len(parts[1]) == 0 { if len(parts) == 1 || len(parts[1]) == 0 {
return fmt.Errorf("err format: DEL [path]") return fmt.Errorf("err format: DEL [path]\n")
} }
ok := db.Del(parts[1]) ok := db.Del(parts[1])
if !ok { if !ok {
fmt.Println("No value/object found.") fmt.Println("No value/object found.")
fmt.Println("")
} else { } else {
fmt.Printf("{%s} DELETED\n", parts[1]) fmt.Printf("{%s} DELETED\n", parts[1])
fmt.Println("")
} }
break break
case "save": case "SAVE":
case "\\S":
if len(parts) < 3 || len(parts[1]) == 0 { if len(parts) < 3 || len(parts[1]) == 0 {
return fmt.Errorf("err format: SAVE [path] [value|long value]") return fmt.Errorf("err format: SAVE [path] [value|long value]\n")
} }
value := strings.Trim(strings.Join(parts[2:], " "), "\"") value := strings.Trim(strings.Join(parts[2:], " "), "\"")
@ -140,36 +191,49 @@ func ExecuteCommand(db zordfsdb.DB, commands string) error {
ok := db.Save(parts[1], value) ok := db.Save(parts[1], value)
if !ok { if !ok {
fmt.Println("No value found.") fmt.Println("No value found.")
fmt.Println("")
} else { } else {
fmt.Printf("{%s} SAVED\n", parts[1]) fmt.Printf("{%s} SAVED\n", parts[1])
fmt.Println("")
} }
db.Refresh()
break break
case "create": case "CREATE":
case "\\C":
if len(parts) == 1 || len(parts[1]) == 0 { if len(parts) == 1 || len(parts[1]) == 0 {
return fmt.Errorf("err format: CREATE [path]") return fmt.Errorf("err format: CREATE [path]\n")
} }
ok := db.CreateNode(parts[1]) ok := db.CreateNode(parts[1])
if !ok { if !ok {
fmt.Println("No path found.") fmt.Println("No path found.")
fmt.Println("")
} else { } else {
fmt.Printf("{%s} CREATED\n", parts[1]) fmt.Printf("{%s} CREATED\n", parts[1])
fmt.Println("")
} }
break break
case "add": case "ADD":
case "\\A":
if len(parts) == 1 || len(parts[1]) == 0 { if len(parts) == 1 || len(parts[1]) == 0 {
return fmt.Errorf("err format: ADD [path]") return fmt.Errorf("err format: ADD [path]\n")
} }
id, err := db.AddObject(parts[1]) id, err := db.AddObject(parts[1])
if err != nil { if err != nil {
fmt.Println("No path found.") fmt.Println("No path found.")
fmt.Println("")
} else { } else {
fmt.Printf("{%s} ADDED with ID: %s\n", parts[1], id) fmt.Printf("{%s} ADDED with ID: %s\n", parts[1], id)
fmt.Println("")
} }
break break
default:
fmt.Println("err[00] unknown command, try HELP")
} }
} }