Init: lab4 done
This commit is contained in:
33
handlers/deleteUrl.go
Normal file
33
handlers/deleteUrl.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"golang-lab4/middlewares"
|
||||
"golang-lab4/utils"
|
||||
"net/http"
|
||||
|
||||
"github.com/uptrace/bunrouter"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// DeleteUrl
|
||||
//
|
||||
// @param url query string true "url"
|
||||
// @success 200
|
||||
// @router /url [delete]
|
||||
func (self *Handlers) DeleteUrl(
|
||||
w http.ResponseWriter,
|
||||
req bunrouter.Request,
|
||||
) error {
|
||||
url := req.URL.Query().Get("url")
|
||||
if url == "" {
|
||||
zap.L().Warn("url not exist")
|
||||
return middlewares.HTTPError{
|
||||
StatusCode: http.StatusBadRequest,
|
||||
Message: "url not provided",
|
||||
}
|
||||
}
|
||||
|
||||
self.fetcher.Remove(url)
|
||||
|
||||
return utils.Success(w)
|
||||
}
|
||||
46
handlers/getUrl.go
Normal file
46
handlers/getUrl.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"golang-lab4/middlewares"
|
||||
"golang-lab4/models"
|
||||
"net/http"
|
||||
|
||||
"github.com/uptrace/bunrouter"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// GetUrl
|
||||
//
|
||||
// @param url query string true "url"
|
||||
// @success 200 {object} models.UrlState
|
||||
// @router /url [get]
|
||||
func (self *Handlers) GetUrl(
|
||||
w http.ResponseWriter,
|
||||
req bunrouter.Request,
|
||||
) error {
|
||||
ctx := req.Context()
|
||||
|
||||
url := req.URL.Query().Get("url")
|
||||
if url == "" {
|
||||
zap.L().Warn("url not exist")
|
||||
return middlewares.HTTPError{
|
||||
StatusCode: http.StatusBadRequest,
|
||||
Message: "url not provided",
|
||||
}
|
||||
}
|
||||
|
||||
var ret models.UrlState
|
||||
err := self.db.NewSelect().
|
||||
Model(&ret).
|
||||
Where("url = ?", url).
|
||||
Scan(ctx)
|
||||
if err != nil {
|
||||
return middlewares.HTTPError{
|
||||
StatusCode: http.StatusInternalServerError,
|
||||
Message: "failed to query db",
|
||||
OriginError: err,
|
||||
}
|
||||
}
|
||||
|
||||
return bunrouter.JSON(w, ret)
|
||||
}
|
||||
22
handlers/handlers.go
Normal file
22
handlers/handlers.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"golang-lab4/workflows"
|
||||
|
||||
"github.com/uptrace/bun"
|
||||
)
|
||||
|
||||
type Handlers struct {
|
||||
db *bun.DB
|
||||
fetcher *workflows.Fetcher
|
||||
}
|
||||
|
||||
func NewHandlers(
|
||||
db *bun.DB,
|
||||
fetcher *workflows.Fetcher,
|
||||
) *Handlers {
|
||||
return &Handlers{
|
||||
db: db,
|
||||
fetcher: fetcher,
|
||||
}
|
||||
}
|
||||
52
handlers/postUrl.go
Normal file
52
handlers/postUrl.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"golang-lab4/middlewares"
|
||||
"golang-lab4/utils"
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
"github.com/uptrace/bunrouter"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type PostUrlInput struct {
|
||||
Url string `json:"url"`
|
||||
}
|
||||
|
||||
// PostUrl
|
||||
//
|
||||
// @param request body PostUrlInput true "query params"
|
||||
// @accept json
|
||||
// @success 200
|
||||
// @router /url [post]
|
||||
func (self *Handlers) PostUrl(
|
||||
w http.ResponseWriter,
|
||||
req bunrouter.Request,
|
||||
) error {
|
||||
b, err := io.ReadAll(req.Body)
|
||||
if err != nil {
|
||||
return middlewares.HTTPError{
|
||||
StatusCode: http.StatusBadRequest,
|
||||
Message: "read payload failed",
|
||||
OriginError: err,
|
||||
}
|
||||
}
|
||||
|
||||
var input PostUrlInput
|
||||
if err := json.Unmarshal(b, &input); err != nil {
|
||||
return middlewares.HTTPError{
|
||||
StatusCode: http.StatusBadRequest,
|
||||
Message: "failed to unmarshal input into json",
|
||||
OriginError: err,
|
||||
}
|
||||
}
|
||||
|
||||
zap.L().Info("add url",
|
||||
zap.String("url", input.Url))
|
||||
|
||||
self.fetcher.Add(input.Url)
|
||||
|
||||
return utils.Success(w)
|
||||
}
|
||||
Reference in New Issue
Block a user