Skip to content

Commit 11bb022

Browse files
N1LUMSergey Lazurenko
andauthored
Add get commands
Co-authored-by: Sergey Lazurenko <s.lazurenko@trucker.group>
1 parent b9259e6 commit 11bb022

13 files changed

Lines changed: 246 additions & 7 deletions

File tree

cmd/add_task.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import "github.com/spf13/cobra"
44

55
var addTaskCmd = &cobra.Command{
66
Use: "add <name_of_task>",
7-
Short: "Create a new task",
8-
Long: `Create a new task with shared name`,
7+
Short: "Create new task",
8+
Long: `Create new task with shared name`,
99
Run: func(cmd *cobra.Command, args []string) {
1010
taskName := args[0]
1111
task, err := service.Task.Create(taskName)

cmd/delete_task.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import (
77

88
var deleteTaskCmd = &cobra.Command{
99
Use: "delete <id_of_task>",
10-
Short: "Delete the task",
11-
Long: `Delete the task by shared id`,
10+
Short: "Delete task",
11+
Long: `Delete task by shared id`,
1212
Run: func(cmd *cobra.Command, args []string) {
1313
taskID, err := uuid.Parse(args[0])
1414
if err != nil {

cmd/get_by_id_task.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package cmd
2+
3+
import (
4+
"reflect"
5+
6+
"github.com/google/uuid"
7+
"github.com/spf13/cobra"
8+
)
9+
10+
var getTaskByIdCmd = &cobra.Command{
11+
Use: "get-task-by-id <task_id>",
12+
Short: "Get task by id",
13+
Long: `Get the task by shared id`,
14+
Run: func(cmd *cobra.Command, args []string) {
15+
taskID, err := uuid.Parse(args[0])
16+
if err != nil {
17+
cmd.Printf("Failed to parse id string to uuid: %v\n", err)
18+
return
19+
}
20+
21+
task, err := service.Task.GetByID(taskID)
22+
if err != nil {
23+
cmd.Printf("Failed to get task by id: %v\n", err)
24+
return
25+
}
26+
27+
cmd.Printf("Got task by id: %v\n\n", taskID)
28+
29+
taskValue := reflect.ValueOf(task)
30+
taskType := reflect.TypeOf(task)
31+
32+
if taskType.Kind() == reflect.Ptr {
33+
taskType = taskType.Elem()
34+
taskValue = taskValue.Elem()
35+
}
36+
37+
for i := 0; i < taskType.NumField(); i++ {
38+
fieldInfo := taskType.Field(i)
39+
fieldValue := taskValue.Field(i)
40+
41+
cmd.Printf("%s: %v\n", fieldInfo.Name, fieldValue.Interface())
42+
}
43+
},
44+
}

cmd/get_list_task.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package cmd
2+
3+
import (
4+
"reflect"
5+
6+
"github.com/spf13/cobra"
7+
)
8+
9+
var getListTaskCmd = &cobra.Command{
10+
Use: "get-list",
11+
Short: "Get list of tasks",
12+
Long: `Get list of tasks in descending order by created_at`,
13+
Run: func(cmd *cobra.Command, args []string) {
14+
tasks, err := service.Task.GetList()
15+
if err != nil {
16+
cmd.Printf("Failed to get all tasks: %v\n", err)
17+
return
18+
}
19+
20+
cmd.Print("Got list of tasks: \n")
21+
22+
for index, task := range *tasks {
23+
cmd.Printf("\nTask #%d\n", index+1)
24+
25+
taskValue := reflect.ValueOf(task)
26+
taskType := reflect.TypeOf(task)
27+
28+
for i := 0; i < taskType.NumField(); i++ {
29+
fieldInfo := taskType.Field(i)
30+
fieldValue := taskValue.Field(i)
31+
32+
cmd.Printf("%s: %v\n", fieldInfo.Name, fieldValue.Interface())
33+
}
34+
}
35+
},
36+
}

cmd/root.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,7 @@ func init() {
3232
rootCmd.AddCommand(addTaskCmd)
3333
rootCmd.AddCommand(updateTaskCmd)
3434
rootCmd.AddCommand(deleteTaskCmd)
35+
rootCmd.AddCommand(getTaskByIdCmd)
36+
rootCmd.AddCommand(getListTaskCmd)
3537
rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
3638
}

cmd/update_task.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import (
77

88
var updateTaskCmd = &cobra.Command{
99
Use: "update <id_of_task> <name_of_task>",
10-
Short: "Update the task",
11-
Long: `Update the task by shared id`,
10+
Short: "Update task",
11+
Long: `Update task by shared id`,
1212
Run: func(cmd *cobra.Command, args []string) {
1313
taskID, err := uuid.Parse(args[0])
1414
if err != nil {

internal/database/postgres.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@ import (
88
"github.com/sirupsen/logrus"
99
"gorm.io/driver/postgres"
1010
"gorm.io/gorm"
11+
"gorm.io/gorm/logger"
1112
)
1213

1314
func ConnectPostgres(cfg *configs.DBConfig) (*gorm.DB, error) {
1415
dsn := fmt.Sprintf(
1516
"host=%s user=%s password=%s dbname=%s port=%s sslmode=%s",
1617
cfg.Host, cfg.Username, cfg.Password, cfg.DBName, cfg.Port, cfg.SSLMode,
1718
)
18-
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
19+
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
20+
Logger: logger.Default.LogMode(logger.Silent),
21+
})
1922
if err != nil {
2023
return nil, fmt.Errorf("failed to connect to DB: %w", err)
2124
}

internal/repositories/repository.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type Task interface {
1111
Create(task *models.Task) error
1212
Update(task *models.Task) error
1313
GetByID(id uuid.UUID) (*models.Task, error)
14+
GetList() (*[]models.Task, error)
1415
Delete(id uuid.UUID) (uuid.UUID, error)
1516
}
1617

internal/repositories/task_repository.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ func (r *TaskRepository) GetByID(id uuid.UUID) (*models.Task, error) {
3939
return &task, nil
4040
}
4141

42+
func (r *TaskRepository) GetList() (*[]models.Task, error) {
43+
var tasks []models.Task
44+
if err := r.db.Order("created_at desc").Find(&tasks).Error; err != nil {
45+
return nil, err
46+
}
47+
return &tasks, nil
48+
}
49+
4250
func (r *TaskRepository) Delete(id uuid.UUID) error {
4351
if err := r.db.Delete(&models.Task{}, "id = ?", id).Error; err != nil {
4452
return err

internal/services/service.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type Task interface {
1111
Create(name string) (*models.Task, error)
1212
Update(name string) (*models.Task, error)
1313
GetByID(id uuid.UUID) (*models.Task, error)
14+
GetList() (*[]models.Task, error)
1415
Delete(id uuid.UUID) (uuid.UUID, error)
1516
}
1617

0 commit comments

Comments
 (0)