This commit is contained in:
Vicode92 2024-03-29 15:54:43 +00:00
commit c0e345d169
2 changed files with 172 additions and 0 deletions

View File

@ -0,0 +1,47 @@
package services
import "fmt"
type taskService struct {
tasks map[int]string
}
func NewTaskService() *taskService {
return &taskService{
tasks: make(map[int]string, 0),
}
}
func (r *taskService) Insert(key int, v string) error {
if _, found := r.tasks[key]; found {
return fmt.Errorf("already exist %d", key)
}
r.tasks[key] = v
return nil
}
func (r *taskService) List() map[int]string {
return r.tasks
}
func (r *taskService) Show(key int) string {
if task, found := r.tasks[key]; found {
return task
}
return ""
}
func (r *taskService) Delete(key int) error {
if _, found := r.tasks[key]; !found {
return fmt.Errorf("task with key %d not found", key)
}
delete(r.tasks, key)
return nil
}
func (r *taskService) Update(key int, newTask string) error {
if _, found := r.tasks[key]; !found {
return fmt.Errorf("task with key %d not found", key)
}
r.tasks[key] = newTask
return nil
}

125
main.go Normal file
View File

@ -0,0 +1,125 @@
package main
import (
"fmt"
"strconv"
"strings"
"znga/Desktop/go/todo/internal/services"
)
func main() {
ts := services.NewTaskService()
options := map[string]string{
"i": "insert",
"u": "update",
"l": "list",
"s": "show",
"d": "delete",
}
for {
fmt.Println("Options: ")
for k, v := range options {
fmt.Printf("%s to %s\t", k, v)
}
fmt.Println("")
fmt.Print("Select an option: ")
var scan string
_, err := fmt.Scanln(&scan)
if err != nil {
panic(err)
}
//value, bool
if _, found := options[strings.ToLower(scan)]; !found {
fmt.Printf("option %s is not allowed\n", scan)
continue
}
switch scan {
case "i":
fmt.Print("type key, task(only integers allowed): ")
_, err := fmt.Scanln(&scan)
if err != nil {
panic(err)
}
taskID, err := strconv.Atoi(scan)
if err != nil {
fmt.Println("invalid ID")
continue
}
fmt.Print("write your task: ")
_, err = fmt.Scanln(&scan)
if err != nil {
panic(err)
}
if err := ts.Insert(taskID, scan); err != nil {
fmt.Println(err)
continue
}
break
case "l":
fmt.Println(strings.Repeat("*", 20))
for k, v := range ts.List() {
fmt.Printf("ID: %d - %s\n", k, v)
}
fmt.Println(strings.Repeat("*", 20))
break
case "s":
fmt.Print("type key you want to retrieve (only integers allowed): ")
var key int
_, err := fmt.Scanln(&key)
if err != nil {
panic(err)
}
fmt.Scanln()
fmt.Println(strings.Repeat("*", 20))
task := ts.Show(key)
if task != "" {
fmt.Println("Task:", task)
} else {
fmt.Println("Task not found.")
}
fmt.Println(strings.Repeat("*", 20))
break
case "d":
fmt.Print("type key you want to delete (only integers allowed): ")
var key int
_, err := fmt.Scanln(&key)
if err != nil {
panic(err)
}
fmt.Scanln()
if err := ts.Delete(key); err != nil {
fmt.Println(err)
} else {
fmt.Println("Task deleted successfully.")
}
break
case "u":
fmt.Print("type key you want to update (only integers allowed): ")
var key int
_, err := fmt.Scanln(&key)
if err != nil {
panic(err)
}
fmt.Scanln()
fmt.Print("Write the new task description: ")
var newTask string
_, err = fmt.Scanln(&newTask)
if err != nil {
panic(err)
}
if err := ts.Update(key, newTask); err != nil {
fmt.Println(err)
} else {
fmt.Println("Task updated successfully")
}
break
}
}
}