-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
123 lines (97 loc) · 2.98 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package main
import (
"bufio"
"encoding/json"
"fmt"
"io"
"os" //El paquete os nos permite modificar archivos
"strings"
"strconv"// Convertir un string a un entero
task "github.com/EmilianoQuiroz/GO-CLI-TodoApp/tasks"
)
func main() {
// Este archivo json es donde se guardaran nuestras tareas
file, err := os.OpenFile("tasks.json", os.O_RDWR|os.O_CREATE, 0666)
// OpenFile nos permite modificar el archivo y os.O_RDWR le damos permisos de lectura y escritura
if err != nil { // Si se produce un error
panic(err) // se muestra el error
}
// Si no se produce ningun error cerramos la lectura del archivo
defer file.Close()
var tasks []task.Task
// Stat me da informacion acerca del archivo
// Esta informacion la guardamos dentro de info
info, err := file.Stat()
if err != nil { // Si se produce un error
panic(err) // Lansamos un panic error y mostramos el error por consola
}
if info.Size() != 0 { // Si el archivo no esta vacio
//Guardamos los datos en la variable Task
bytes, err := io.ReadAll(file)
if err != nil { // Si se produce un error
panic(err) // Se muestra el error por consola
}
// Convertimos los datos de Bytes a Json
err = json.Unmarshal(bytes, &tasks)
if err != nil { // Si se produce un error
panic(err) //mostramos el error en consola
}
} else { // Si el archivo esta vacio le cargamos tareas
tasks = []task.Task{}
}
if (len(os.Args) < 2){
// Si el usuario no me pasas el segundo elemento mostramos el contenido de la func printUsage
printUsage()
return
}
switch os.Args[1] {
// En caso de que el usuario elija la opcion Listar le mostramos la lista de tareas
case "Listar":
task.ListTasks(tasks)
// En caso de que el usuario elija la opcion Agregar
case "Agregar":
reader := bufio.NewReader(os.Stdin)
fmt.Println("Tipee la tarea a agregar:")
name, _ := reader.ReadString('\n')
name = strings.TrimSpace(name)
tasks = task.AddTask(tasks, name)
task.SaveTasks(file, tasks)
// En caso de que el usuario elija la opcion de Eliminar
case "Eliminar":
if len(os.Args) < 3 {
fmt.Println("Digite el ID de la tarea que quiere eliminar.")
return
}
id, err := strconv.Atoi(os.Args[2])
if err != nil {
fmt.Println("El ID tiene que ser un numero entero.")
return
}
tasks = task.DeleteTask(tasks, id)
task.SaveTasks(file, tasks)
// En caso de que el usuario elija la opcion Completar
case "Completar":
if len(os.Args) < 3 {
fmt.Println("Debe proporcionar el ID de la tarea completada.")
return
}
id, err := strconv.Atoi(os.Args[2])
if err != nil {
fmt.Println("El ID de la tarea debe ser un numero entero.")
return
}
tasks = task.CompleteTask(tasks, id)
task.SaveTasks(file, tasks)
default:
printUsage()
}
}
// Funcion para describir el uso de la aplicacion
func printUsage() {
// Nos incica las funciones que podemos ejecutar
// Listar las tareas
// Agregar tareas
// Completar tareas
// Borrar tareas
fmt.Println("Uso: go-cli-TodoApp [Listar|Agregar|Completar|Eliminar]")
}