Conversation
dirtymew
left a comment
There was a problem hiding this comment.
Привет Алекс
хорошо получилось - но нужно доработать
для начала нужно добавить документацию и в ней обязательно описать как запускать приложение и тесты
есть вопросы к нейменгу и архитектуре решения
по организации кода посмотри https://github.com/golang-standards/project-layout
мб наведет на мысли
вопрос - задание со звездочкой делать будешь?
| ) | ||
|
|
||
| func main() { | ||
| db := hub.Sqlite(con.DB_NAME_SET) |
There was a problem hiding this comment.
тут нудно получать ошибки и их логировать
There was a problem hiding this comment.
Добавлена обработка ошибок в ДБ
| **/.project | ||
| **/.settings | ||
| **/.toolstarget | ||
| **/.vs |
| @@ -0,0 +1,4 @@ | |||
| package config | |||
There was a problem hiding this comment.
это все лучше в константах и по месту использования обьявлять
There was a problem hiding this comment.
Буду иметь введу, но в данном случае казалось аккуратнее и уместно
There was a problem hiding this comment.
это странно - если это конфиг приложение то эти параметры нужны в коменде запуска - зачем они еще?
почему это переменные - а не константы?
если хочется как-то их изменять то надо смотреть или в сторону переменных окружения или аргументов см https://github.com/spf13/viper
| TaskDelete(id string) error | ||
| } | ||
|
|
||
| type Api struct { |
| Task | ||
| } | ||
|
|
||
| func NewApi(hub hub.Task) *Api { |
There was a problem hiding this comment.
мб назвать service, tasks/service - API это про другое скорее про handlers
There was a problem hiding this comment.
Изменил название папки и структуры.
|
|
||
| r.GET("/api/nextdate", h.ND) | ||
|
|
||
| api := r.Group("/api") |
There was a problem hiding this comment.
а вот это api и скорее в пакете api я бы ожидал описание эндпоинтов
| "log" | ||
| ) | ||
|
|
||
| func (h *Handler) ND(c *gin.Context) { |
| c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) | ||
| return | ||
| } | ||
| c.JSON(200, gin.H{"id": id}) |
There was a problem hiding this comment.
нужно иcпользовать константы а не 200
| "bytes" | ||
| "encoding/json" | ||
| "fmt" | ||
| "github.com/stretchr/testify/assert" |
There was a problem hiding this comment.
сломал порядок в импорте - нужно починить
|
Антон, добрый день. Задания со звёздочкой делать не буду. Сейчас не дома, вечером погляжу. Спасибо за информацию30.04.2024, 10:27, "Anton Sattarov" ***@***.***>:
@dirtymew requested changes on this pull request.
Привет Алекс
хорошо получилось - но нужно доработать
для начала нужно добавить документацию и в ней обязательно описать как запускать приложение и тесты
есть вопросы к нейменгу и архитектуре решения
по организации кода посмотри https://github.com/golang-standards/project-layout
мб наведет на мысли
вопрос - задание со звездочкой делать будешь?
In cmd/main.go:
@@ -0,0 +1,24 @@
+package main
+
+import (
+ _ "github.com/mattn/go-sqlite3"
+ app "github/Rarik88/go_final_project"
+ "github/Rarik88/go_final_project/pkg/api"
+ con "github/Rarik88/go_final_project/pkg/const"
+ hl "github/Rarik88/go_final_project/pkg/handler"
+ "github/Rarik88/go_final_project/pkg/hub"
+ "log"
+)
+
+func main() {
+ db := hub.Sqlite(con.DB_NAME_SET)
тут нудно получать ошибки и их логировать
In .dockerignore:
+# Include any files or directories that you don't want to be copied to your
+# container here (e.g., local build artifacts, temporary files, etc.).
+#
+# For more help, visit the .dockerignore file reference guide at
+# https://docs.docker.com/go/build-context-dockerignore/
+
+**/.DS_Store
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
нужно добавить файлы .idea
In config/config.go:
@@ -0,0 +1,4 @@
+package config
это все лучше в константах и по месту использования обьявлять
In pkg/api/api.go:
+
+import (
+ "github/Rarik88/go_final_project/pkg/hub"
+ "github/Rarik88/go_final_project/pkg/model"
+)
+
+type Task interface {
+ AddTask(task model.Task) (int64, error)
+ TaskByID(id string) (model.Task, error)
+ Tasks() (model.ListTasks, error)
+ UpdateTask(task model.Task) error
+ TaskDone(id string) error
+ TaskDelete(id string) error
+}
+
+type Api struct {
плохое название - ниочем не говорит
In pkg/api/api.go:
+)
+
+type Task interface {
+ AddTask(task model.Task) (int64, error)
+ TaskByID(id string) (model.Task, error)
+ Tasks() (model.ListTasks, error)
+ UpdateTask(task model.Task) error
+ TaskDone(id string) error
+ TaskDelete(id string) error
+}
+
+type Api struct {
+ Task
+}
+
+func NewApi(hub hub.Task) *Api {
мб назвать service, tasks/service - API это про другое скорее про handlers
In pkg/api/task.go:
+import (
+ "github/Rarik88/go_final_project/pkg/hub"
+ "github/Rarik88/go_final_project/pkg/model"
+)
+
+type ApiTask struct {
+ hub hub.Task
+}
+
+func NewApiTask(hub hub.Task) *ApiTask {
+ return &ApiTask{
+ hub: hub,
+ }
+}
+
+func (a *ApiTask) AddTask(task model.Task) (int64, error) {
зачем тут интерфейс от реализации разнес по разным файлам?
In pkg/const/const.go:
@@ -0,0 +1,50 @@
+package con
+
+import (
+ "github/Rarik88/go_final_project/config"
+ "log"
+ "os"
+)
+
+// Объявление констант, используемых для настройки веб-сервера и базы данных
+const (
+ // WebDir = "web" // Директория с веб-ресурсами
+ WebDir = "D:/World/go_final_project/web"
так в go не принято - переменные и константы обьявляются по месту использования
In pkg/data/data.go:
@@ -0,0 +1,96 @@
+package nextDate
+
+import (
+ "errors"
+ "fmt"
+ "github/Rarik88/go_final_project/pkg/model"
+ "log"
+ "strconv"
+ "strings"
+ "time"
+)
+
+const Format_yyyymmdd = "20060102"
+
+func NextDate(nd model.NextDate) (string, error) {
все что с датами в отдельном пакете - это хорошо
In pkg/handler/handler.go:
@@ -0,0 +1,49 @@
+package handler
+
+import (
+ "github.com/gin-gonic/gin"
+ "github/Rarik88/go_final_project/pkg/api"
+ "net/http"
+)
+
+type Handler struct {
вот это скорее server - и в зависимостях иметь сервис
In pkg/handler/handler.go:
+)
+
+type Handler struct {
+ api *api.Api
+}
+
+func NewHandler(api *api.Api) *Handler {
+ return &Handler{api: api}
+}
+
+func (h *Handler) Init() *gin.Engine {
+ r := gin.Default()
+
+ r.GET("/api/nextdate", h.ND)
+
+ api := r.Group("/api")
а вот это api и скорее в пакете api я бы ожидал описание эндпоинтов
In pkg/handler/handler.go:
+
+ r.GET("/api/nextdate", h.ND)
+
+ api := r.Group("/api")
+ {
+ api.POST("/task", h.AddTask)
+ api.GET("/task", h.Task)
+ api.GET("/tasks", h.Tasks)
+ api.PUT("/task", h.UpdateTask)
+ api.POST("/task/done", h.TaskDone)
+ api.DELETE("/task", h.TaskDelete)
+ }
+
+ static := r.Group("/")
+ {
+ static.StaticFS("./css", http.Dir("./web/css"))
очень странно - почему не на всю папку сразу? при каждом новом файле фронта мы бэк будет исправилять? так не делается
In pkg/handler/nd.go:
@@ -0,0 +1,26 @@
+package handler
+
+import (
+ "github.com/gin-gonic/gin"
+ nextDate "github/Rarik88/go_final_project/pkg/data"
+ "github/Rarik88/go_final_project/pkg/model"
+ "log"
+)
+
+func (h *Handler) ND(c *gin.Context) {
что такое ND - очень плохое название
In pkg/handler/task.go:
+ var task model.Task
+ err := c.ShouldBindJSON(&task)
+ if err != nil {
+ logrus.Error(err)
+ c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
+ return
+ }
+ logrus.Printf("in %v %v %v %v", task.Date, task.Title, task.Comment, task.Repeat)
+
+ id, err := h.api.AddTask(task)
+ if err != nil {
+ logrus.Error(err)
+ c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
+ return
+ }
+ c.JSON(200, gin.H{"id": id})
нужно иcпользовать константы а не 200
In tests/addtask_4_test.go:
@@ -4,14 +4,13 @@ import (
"bytes"
"encoding/json"
"fmt"
+ "github.com/stretchr/testify/assert"
сломал порядок в импорте - нужно починить
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: ***@***.***>
|
dirtymew
left a comment
There was a problem hiding this comment.
Привет Алекс
не увидел изменений по предыдущим комментариям
нет документации, сломаны импорты - это основное что нужно исправить
| **/.project | ||
| **/.settings | ||
| **/.toolstarget | ||
| **/.vs |
| // добавлена обработка ощибок в Дб | ||
| func main() { | ||
| db := hub.Sqlite(con.DB_NAME_SET) | ||
| if db == nil { |
There was a problem hiding this comment.
ну вот не добавил - тут бы не на db == nil проверять а на err != nil
| @@ -0,0 +1,4 @@ | |||
| package config | |||
There was a problem hiding this comment.
это странно - если это конфиг приложение то эти параметры нужны в коменде запуска - зачем они еще?
почему это переменные - а не константы?
если хочется как-то их изменять то надо смотреть или в сторону переменных окружения или аргументов см https://github.com/spf13/viper
| import ( | ||
| "errors" | ||
| "fmt" | ||
| "github/Rarik88/go_final_project/pkg/model" |
There was a problem hiding this comment.
с таким форматирование импортов работу не приму
см go imports
There was a problem hiding this comment.
нужно чтобы импорты были верно сгруппированы
см go imports
|
Добрый день. Прошу прощения, в первую версию исправления добавлял, но git ругался и не хотел пушить, пришлось переделать и часть исправлений потерялись. Хотел уточнить, что не так с импортами в моём проекте? Немного не понимаю. Когда запускал в последний раз, компилятор корректно собрал проект и запустил. 01.05.2024, 14:30, "Anton Sattarov" ***@***.***>:
@dirtymew requested changes on this pull request.
Привет Алекс
не увидел изменений по предыдущим комментариям
нет документации, сломаны импорты - это основное что нужно исправить
In cmd/main.go:
+
+import (
+ app "github/Rarik88/go_final_project"
+ api "github/Rarik88/go_final_project/pkg/api"
+ con "github/Rarik88/go_final_project/pkg/const"
+ hl "github/Rarik88/go_final_project/pkg/handler"
+ "github/Rarik88/go_final_project/pkg/hub"
+ "log"
+
+ _ "github.com/mattn/go-sqlite3"
+)
+
+// добавлена обработка ощибок в Дб
+func main() {
+ db := hub.Sqlite(con.DB_NAME_SET)
+ if db == nil {
ну вот не добавил - тут бы не на db == nil проверять а на err != nil
In pkg/data/data.go:
@@ -0,0 +1,96 @@
+package nextDate
+
+import (
+ "errors"
+ "fmt"
+ "github/Rarik88/go_final_project/pkg/model"
с таким форматирование импортов работу не приму
см go imports
In .dockerignore:
+# Include any files or directories that you don't want to be copied to your
+# container here (e.g., local build artifacts, temporary files, etc.).
+#
+# For more help, visit the .dockerignore file reference guide at
+# https://docs.docker.com/go/build-context-dockerignore/
+
+**/.DS_Store
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
@Rarik88 а в ветке еще остались
image.png (view on web)
In config/config.go:
@@ -0,0 +1,4 @@
+package config
это странно - если это конфиг приложение то эти параметры нужны в коменде запуска - зачем они еще?
почему это переменные - а не константы?
если хочется как-то их изменять то надо смотреть или в сторону переменных окружения или аргументов см https://github.com/spf13/viper
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: ***@***.***>
|
| "bytes" | ||
| "encoding/json" | ||
| "fmt" | ||
| "github.com/stretchr/testify/assert" |
| import ( | ||
| "errors" | ||
| "fmt" | ||
| "github/Rarik88/go_final_project/pkg/model" |
There was a problem hiding this comment.
нужно чтобы импорты были верно сгруппированы
см go imports
| **/.project | ||
| **/.settings | ||
| **/.toolstarget | ||
| **/.vs |
| serv := new(app.Server) | ||
|
|
||
| err = serv.Run("7540", handler.Init()) | ||
| if err != nil { |
There was a problem hiding this comment.
вот тут было лог что приложение запустилось на таком-то порту @Rarik88
| return &TaskSQLite{db: db} | ||
| } | ||
|
|
||
| func Sqlite(dbname string) *sqlx.DB { |
There was a problem hiding this comment.
тут ошибку похоже забыл вернуть - main ругается @Rarik88
| ENV_PORT = "TODO_PORT" // Переменная окружения для порта | ||
| API_NEXTDATE = "/api/nextdate" // URL-путь для API | ||
| API_TASK = "/api/task" // URL-путь для API | ||
| NOW = "now" // Константа для текущего времени |
There was a problem hiding this comment.
что такое NOW?
и еще куча констант которые не используются - не используешь удаляй
в go не принято не используемые обьекты хранить
dirtymew
left a comment
There was a problem hiding this comment.
Привет Алекс
Поздравляю - задание выполнено
Удачи в дальшейшем обучении
|
Спасибо, с праздником и хорошего дня!05.05.2024, 16:02, "Anton Sattarov" ***@***.***>:
@dirtymew approved this pull request.
Привет Алекс
Поздравляю - задание выполнено
Удачи в дальшейшем обучении
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: ***@***.***>
|

No description provided.