package main import ( "github.com/labstack/echo/v4" echoSwagger "github.com/swaggo/echo-swagger" "net/http" "strconv" "time" "zadanie7API/main/models" "zadanie7API/main/repository" ) const connectionURL = "postgres://tgbot:pass@localhost:5432/vyatsu" //INPUT DATA IN FORM-DATA FORMAT func main() { e := echo.New() e.GET("/request/:id", getRequest) e.GET("/swagger/*", echoSwagger.WrapHandler) e.PUT("/request", createRequest) e.DELETE("/request/:id", deleteRequest) e.POST("/request/:id", updateRequest) // Start server e.Logger.Fatal(e.Start(":8080")) } func getRequest(e echo.Context) error { db, err := repository.New(connectionURL) id, err := strconv.Atoi(e.Param("id")) request, err := db.GetRequest(id) if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) } return e.JSON(http.StatusOK, request) } const layout = "2006-01-02" func stringToTime(dateString string) (time.Time, error) { t, err := time.Parse(layout, dateString) if err != nil { return time.Time{}, err } return t, nil } func createRequest(e echo.Context) error { db, err := repository.New(connectionURL) var Request models.Request name := e.FormValue("Name") description := e.FormValue("Description") Status := e.FormValue("Status") CreationDate, err := stringToTime(e.FormValue("CreationDate")) LastUpdateDate, err := stringToTime(e.FormValue("LastUpdateDate")) Request = models.Request{ Name: name, Description: description, Status: Status, CreationDate: CreationDate, LastUpdateDate: LastUpdateDate, } db.CreateRequest(Request) if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) } return e.JSON(http.StatusOK, Request) } func deleteRequest(c echo.Context) error { db, err := repository.New(connectionURL) if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Ошибка подключения к базе данных") } id, err := strconv.Atoi(c.Param("id")) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, "Неверный формат ID") } err = db.DeleteRequest(id) if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) } return c.NoContent(http.StatusOK) } func updateRequest(e echo.Context) error { db, err := repository.New(connectionURL) if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) } id, err := strconv.Atoi(e.FormValue("ID")) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, "Invalid ID") } var request models.Request request.ID = id request.Name = e.FormValue("Name") request.Description = e.FormValue("Description") request.Status = e.FormValue("Status") request.CreationDate, err = stringToTime(e.FormValue("CreationDate")) request.LastUpdateDate, err = stringToTime(e.FormValue("LastUpdateDate")) err = db.UpdateRequest(request) if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) } return e.JSON(http.StatusOK, request) }