projecto completo creo, me quedo bonito :3

This commit is contained in:
Daniel Cortés
2019-04-17 12:36:31 -04:00
commit 3c55ad2713
17 changed files with 1356 additions and 0 deletions

141
database.go Normal file
View File

@@ -0,0 +1,141 @@
package main
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
"todo/models"
)
type DatabaseInterface interface {
GetTodos() ([]models.Todo, error)
GetTodo(int) (models.Todo, error)
CreateTodo(models.Todo) error
DoTodo(int) error
UndoTodo(int) error
DeleteTodo(int) error
}
type DatabaseStore struct {
DB *sql.DB
}
func MustNewDB() *DatabaseStore {
db, err := sql.Open("sqlite3", "./database.sqlite")
if err != nil {
panic(err)
}
err = db.Ping()
if err != nil {
panic(err)
}
return &DatabaseStore{db}
}
func (store *DatabaseStore) GetTodos() ([]models.Todo, error) {
selectAll := `select id, todo, done from todo`
rows, err := store.DB.Query(selectAll)
if err != nil {
return []models.Todo{}, err
}
defer rows.Close()
todos := []models.Todo{}
for rows.Next() {
todo := models.Todo{}
err = rows.Scan(&todo.Id, &todo.Todo, &todo.Done)
if err != nil {
return []models.Todo{}, err
}
todos = append(todos, todo)
}
return todos, nil
}
func (store *DatabaseStore) GetTodo(id int) (models.Todo, error) {
selectOne := `select id, todo, done from todo where id = ?`
var todo models.Todo
err := store.DB.QueryRow(selectOne, id).Scan(&todo.Id, &todo.Todo, &todo.Done)
if err != nil {
return models.Todo{}, err
}
return todo, nil
}
func (store *DatabaseStore) CreateTodo(todo models.Todo) error {
createTodo := `insert into todo (todo, done) values (?, ?)`
statement, err := store.DB.Prepare(createTodo)
if err != nil {
return err
}
defer statement.Close()
_, err = statement.Exec(todo.Todo, false)
if err != nil {
return err
}
return nil
}
func (store *DatabaseStore) ToggleTodo(id int) error {
todo, err := store.GetTodo(id)
if err != nil {
return err
}
setDone := `update todo set done = ? where id = ?`
statement, err := store.DB.Prepare(setDone)
if err != nil {
return err
}
defer statement.Close()
_, err = statement.Exec(!todo.Done, id)
if err != nil {
return err
}
return nil
}
func (store *DatabaseStore) UpdateTodo(todo models.Todo) error {
updateTodo := `update todo set todo = ? where id = ?`
statement, err := store.DB.Prepare(updateTodo)
if err != nil {
return err
}
defer statement.Close()
_, err = statement.Exec(todo.Todo, todo.Id)
if err != nil {
return err
}
return nil
}
func (store *DatabaseStore) DeleteTodo(id int) error {
deleteTodo := `delete from todo where id = ?`
statement, err := store.DB.Prepare(deleteTodo)
if err != nil {
return err
}
defer statement.Close()
_, err = statement.Exec(id)
if err != nil {
return err
}
return nil
}