chore: refactor project structure

This commit is contained in:
2026-03-28 14:44:07 -05:00
parent 89f692ac6d
commit a9ca077edd
3 changed files with 28 additions and 32 deletions

View File

@@ -5,8 +5,8 @@ import (
"fmt" "fmt"
"log" "log"
"os" "os"
"time"
"git.ksdemosapps.com/kylesoda/pgx-learning/internal/models"
"github.com/jackc/pgx/v5/pgxpool" "github.com/jackc/pgx/v5/pgxpool"
"github.com/joho/godotenv" "github.com/joho/godotenv"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
@@ -15,14 +15,6 @@ import (
var pool *pgxpool.Pool var pool *pgxpool.Pool
var ctx = context.Background() var ctx = context.Background()
type Task struct {
Id int `json:"id"`
Text string `json:"text"`
Completed bool `json:"completed"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
func init() { func init() {
if err := godotenv.Load(); err != nil { if err := godotenv.Load(); err != nil {
log.Fatal("Error al cargar el archivo .env", err) log.Fatal("Error al cargar el archivo .env", err)
@@ -78,7 +70,7 @@ func main() {
&cli.BoolFlag{Name: "pending", Aliases: []string{"p"}, Usage: "List only pending tasks"}, &cli.BoolFlag{Name: "pending", Aliases: []string{"p"}, Usage: "List only pending tasks"},
}, },
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
var tasks []Task var tasks []models.Task
var err error var err error
title := "Pending Tasks:" title := "Pending Tasks:"
@@ -176,7 +168,7 @@ func createTask(text string) error {
return nil return nil
} }
func getAllTasks() ([]Task, error) { func getAllTasks() ([]models.Task, error) {
sql := ` sql := `
SELECT id, text, completed, created_at, updated_at SELECT id, text, completed, created_at, updated_at
FROM tasks FROM tasks
@@ -189,9 +181,9 @@ func getAllTasks() ([]Task, error) {
} }
defer rows.Close() defer rows.Close()
var tasks []Task var tasks []models.Task
for rows.Next() { for rows.Next() {
var task Task var task models.Task
err := rows.Scan( err := rows.Scan(
&task.Id, &task.Id,
&task.Text, &task.Text,
@@ -265,7 +257,7 @@ func deleteTask(id int) error {
return nil return nil
} }
func getPendingTasks() ([]Task, error) { func getPendingTasks() ([]models.Task, error) {
sql := ` sql := `
SELECT id, text, completed, created_at, updated_at SELECT id, text, completed, created_at, updated_at
FROM tasks FROM tasks
@@ -279,9 +271,9 @@ func getPendingTasks() ([]Task, error) {
} }
defer rows.Close() defer rows.Close()
var tasks []Task var tasks []models.Task
for rows.Next() { for rows.Next() {
var task Task var task models.Task
err := rows.Scan( err := rows.Scan(
&task.Id, &task.Id,
&task.Text, &task.Text,
@@ -302,7 +294,7 @@ func getPendingTasks() ([]Task, error) {
return tasks, nil return tasks, nil
} }
func getCompletedTasks() ([]Task, error) { func getCompletedTasks() ([]models.Task, error) {
sql := ` sql := `
SELECT id, text, completed, created_at, updated_at SELECT id, text, completed, created_at, updated_at
FROM tasks FROM tasks
@@ -316,9 +308,9 @@ func getCompletedTasks() ([]Task, error) {
} }
defer rows.Close() defer rows.Close()
var tasks []Task var tasks []models.Task
for rows.Next() { for rows.Next() {
var task Task var task models.Task
err := rows.Scan( err := rows.Scan(
&task.Id, &task.Id,
&task.Text, &task.Text,
@@ -339,7 +331,7 @@ func getCompletedTasks() ([]Task, error) {
return tasks, nil return tasks, nil
} }
func printTasks(tasks []Task) { func printTasks(tasks []models.Task) {
if len(tasks) == 0 { if len(tasks) == 0 {
fmt.Println("No tasks found") fmt.Println("No tasks found")
return return

View File

@@ -9,6 +9,7 @@ import (
"strings" "strings"
"time" "time"
"git.ksdemosapps.com/kylesoda/pgx-learning/internal/models"
"github.com/jackc/pgx/v5/pgxpool" "github.com/jackc/pgx/v5/pgxpool"
"github.com/joho/godotenv" "github.com/joho/godotenv"
) )
@@ -40,19 +41,11 @@ func truncateTasksTable(db *pgxpool.Pool, ctx context.Context) error {
return nil return nil
} }
type Task struct { func generateTasks(count int) []models.Task {
Id int64 tasks := make([]models.Task, count)
Text string
Completed bool
Created_at time.Time
Updated_at time.Time
}
func generateTasks(count int) []Task {
tasks := make([]Task, count)
for i := 1; i <= count; i++ { for i := 1; i <= count; i++ {
tasks[i-1] = Task{ tasks[i-1] = models.Task{
Text: fmt.Sprintf("random task Nº %v", i), Text: fmt.Sprintf("random task Nº %v", i),
Completed: rand.Float64() > 0.5, Completed: rand.Float64() > 0.5,
} }
@@ -61,7 +54,7 @@ func generateTasks(count int) []Task {
return tasks return tasks
} }
func bulkInsertTasks(db *pgxpool.Pool, ctx context.Context, tasks []Task) error { func bulkInsertTasks(db *pgxpool.Pool, ctx context.Context, tasks []models.Task) error {
if len(tasks) == 0 { if len(tasks) == 0 {
return nil return nil
} }

11
internal/models/task.go Normal file
View File

@@ -0,0 +1,11 @@
package models
import "time"
type Task struct {
Id int `json:"id"`
Text string `json:"text"`
Completed bool `json:"completed"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}