add merch method
This commit is contained in:
parent
480e168b76
commit
03e114db0b
6 changed files with 158 additions and 31 deletions
|
|
@ -1,11 +1,77 @@
|
||||||
package merch
|
package merch
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
"merch-parser-api/internal/interfaces"
|
||||||
|
"merch-parser-api/pkg/responses"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
type controller struct {
|
type controller struct {
|
||||||
service *service
|
service *service
|
||||||
|
utils interfaces.Utils
|
||||||
}
|
}
|
||||||
|
|
||||||
func newController(service *service) *controller {
|
func newController(service *service, utils interfaces.Utils) *controller {
|
||||||
return &controller{
|
return &controller{
|
||||||
service: service,
|
service: service,
|
||||||
|
utils: utils,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Handler) RegisterRoutes(r *gin.RouterGroup, authMW gin.HandlerFunc, refreshMW gin.HandlerFunc) {
|
||||||
|
merchGroup := r.Group("/merch", authMW)
|
||||||
|
|
||||||
|
merchGroup.POST("/", h.controller.addMerch)
|
||||||
|
merchGroup.GET("/", h.controller.getMerch)
|
||||||
|
merchGroup.PUT("/", h.controller.updateMerch)
|
||||||
|
merchGroup.DELETE("/", h.controller.deleteMerch)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Summary Добавить новый мерч
|
||||||
|
// @Description Добавить новый мерч
|
||||||
|
// @Tags Merch
|
||||||
|
// @Security BearerAuth
|
||||||
|
// @Accept json
|
||||||
|
// @Param body body MerchDTO true "новый мерч"
|
||||||
|
// @Success 200
|
||||||
|
// @Failure 400 {object} responses.ErrorResponse400
|
||||||
|
// @Failure 500 {object} responses.ErrorResponse500
|
||||||
|
// @Router /merch [post]
|
||||||
|
func (co *controller) addMerch(c *gin.Context) {
|
||||||
|
var payload MerchDTO
|
||||||
|
if err := c.ShouldBind(&payload); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, responses.ErrorResponse400{Error: err.Error()})
|
||||||
|
log.WithError(err).Error("Merch | Failed to bind JSON on add merch")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
userUuid, err := co.utils.GetUserUuidFromContext(c)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, responses.ErrorResponse500{Error: err.Error()})
|
||||||
|
log.WithError(err).Error("Merch | Failed to get user uuid from context")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = co.service.addMerch(payload, userUuid)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, responses.ErrorResponse500{Error: err.Error()})
|
||||||
|
log.WithError(err).Error("Merch | Failed to add merch")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Status(http.StatusOK)
|
||||||
|
}
|
||||||
|
func (co *controller) getMerch(c *gin.Context) {
|
||||||
|
c.JSON(200, gin.H{"msg": "placeholder"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (co *controller) updateMerch(c *gin.Context) {
|
||||||
|
c.JSON(200, gin.H{"msg": "placeholder"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (co *controller) deleteMerch(c *gin.Context) {
|
||||||
|
c.JSON(200, gin.H{"msg": "placeholder"})
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
package merch
|
package merch
|
||||||
|
|
||||||
type MerchDTO struct {
|
type MerchDTO struct {
|
||||||
MerchUuid string `json:"merch_uuid"`
|
MerchUuid string `json:"merch_uuid"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
OriginSurugaya OriginSurugaya `json:"origin_surugaya"`
|
OriginSurugaya SurugayaDTO `json:"origin_surugaya"`
|
||||||
OriginMandarake OriginMandarake `json:"origin_mandarake"`
|
OriginMandarake MandarakeDTO `json:"origin_mandarake"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type OriginSurugaya struct {
|
type SurugayaDTO struct {
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
CookieValues string `json:"cookie_values"`
|
CookieValues string `json:"cookie_values"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type OriginMandarake struct {
|
type MandarakeDTO struct {
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package merch
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
"merch-parser-api/internal/interfaces"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Handler struct {
|
type Handler struct {
|
||||||
|
|
@ -11,13 +12,14 @@ type Handler struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Deps struct {
|
type Deps struct {
|
||||||
DB *gorm.DB
|
DB *gorm.DB
|
||||||
|
Utils interfaces.Utils
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHandler(deps Deps) *Handler {
|
func NewHandler(deps Deps) *Handler {
|
||||||
r := NewRepo(deps.DB)
|
r := NewRepo(deps.DB)
|
||||||
s := newService(r)
|
s := newService(r)
|
||||||
c := newController(s)
|
c := newController(s, deps.Utils)
|
||||||
|
|
||||||
return &Handler{
|
return &Handler{
|
||||||
repo: r,
|
repo: r,
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,18 @@
|
||||||
package merch
|
package merch
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/google/uuid"
|
"database/sql"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Merch struct {
|
type Merch struct {
|
||||||
Id uint `json:"id" gorm:"primary_key"`
|
Id uint `json:"id" gorm:"primary_key"`
|
||||||
CreatedAt time.Time `json:"created_at" gorm:"created_at"`
|
CreatedAt time.Time `json:"created_at" gorm:"created_at"`
|
||||||
UpdatedAt time.Time `json:"updated_at" gorm:"updated_at"`
|
UpdatedAt sql.NullTime `json:"updated_at" gorm:"updated_at"`
|
||||||
DeletedAt time.Time `json:"deleted_at" gorm:"deleted_at"`
|
DeletedAt sql.NullTime `json:"deleted_at" gorm:"deleted_at"`
|
||||||
MerchUuid string `json:"merch_uuid" gorm:"type:varchar(36);unique_index"`
|
MerchUuid string `json:"merch_uuid" gorm:"type:varchar(36);unique_index"`
|
||||||
UserUuid string `json:"user_uuid" gorm:"type:varchar(36)"`
|
UserUuid string `json:"user_uuid" gorm:"type:varchar(36)"`
|
||||||
Name string `json:"name" gorm:"column:name"`
|
Name string `json:"name" gorm:"column:name"`
|
||||||
Origin string `json:"origin" gorm:"column:origin"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Merch) TableName() string {
|
func (Merch) TableName() string {
|
||||||
|
|
@ -21,14 +20,11 @@ func (Merch) TableName() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Surugaya struct {
|
type Surugaya struct {
|
||||||
Id uint `gorm:"primary_key" json:"-"`
|
Id uint `gorm:"primary_key" json:"-"`
|
||||||
DeletedAt time.Time `gorm:"index" json:"-"`
|
DeletedAt sql.NullTime `gorm:"index" json:"-"`
|
||||||
MerchUuid uuid.UUID `gorm:"index" json:"-"`
|
MerchUuid string `gorm:"index" json:"-"`
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
ParseTag string `json:"parse_tag"`
|
CookieValues string `json:"cookie_values"`
|
||||||
ParseSubstring string `json:"parse_substring"`
|
|
||||||
CookieValues string `json:"cookie_values"`
|
|
||||||
Separator string `json:"separator"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Surugaya) TableName() string {
|
func (Surugaya) TableName() string {
|
||||||
|
|
@ -36,10 +32,10 @@ func (Surugaya) TableName() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Mandarake struct {
|
type Mandarake struct {
|
||||||
Id uint `gorm:"primary_key" json:"-"`
|
Id uint `gorm:"primary_key" json:"-"`
|
||||||
DeletedAt time.Time `gorm:"index" json:"-"`
|
DeletedAt sql.NullTime `gorm:"index" json:"-"`
|
||||||
MerchUuid uuid.UUID `gorm:"index" json:"-"`
|
MerchUuid string `gorm:"index" json:"-"`
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Mandarake) TableName() string {
|
func (Mandarake) TableName() string {
|
||||||
|
|
|
||||||
|
|
@ -12,4 +12,22 @@ func NewRepo(db *gorm.DB) *Repo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type repository interface{}
|
type repository interface {
|
||||||
|
addMerch(merch Merch, surugaya Surugaya, mandarake Mandarake) error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Repo) addMerch(merch Merch, surugaya Surugaya, mandarake Mandarake) error {
|
||||||
|
if err := r.db.Create(merch).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := r.db.Create(surugaya).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := r.db.Create(mandarake).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,11 @@
|
||||||
package merch
|
package merch
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
type service struct {
|
type service struct {
|
||||||
repo repository
|
repo repository
|
||||||
}
|
}
|
||||||
|
|
@ -9,3 +15,42 @@ func newService(repo repository) *service {
|
||||||
repo: repo,
|
repo: repo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *service) addMerch(payload MerchDTO, userUuid string) error {
|
||||||
|
merchUuid := uuid.NewString()
|
||||||
|
|
||||||
|
merch := Merch{
|
||||||
|
CreatedAt: time.Time{},
|
||||||
|
UpdatedAt: sql.NullTime{Valid: false},
|
||||||
|
DeletedAt: sql.NullTime{Valid: false},
|
||||||
|
MerchUuid: merchUuid,
|
||||||
|
UserUuid: userUuid,
|
||||||
|
Name: payload.Name,
|
||||||
|
}
|
||||||
|
|
||||||
|
surugaya := Surugaya{
|
||||||
|
DeletedAt: sql.NullTime{},
|
||||||
|
MerchUuid: merchUuid,
|
||||||
|
Link: payload.OriginSurugaya.Link,
|
||||||
|
CookieValues: payload.OriginSurugaya.CookieValues,
|
||||||
|
}
|
||||||
|
|
||||||
|
mandarake := Mandarake{
|
||||||
|
DeletedAt: sql.NullTime{},
|
||||||
|
MerchUuid: merchUuid,
|
||||||
|
Link: payload.OriginMandarake.Link,
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.repo.addMerch(merch, surugaya, mandarake)
|
||||||
|
}
|
||||||
|
func (s *service) getMerch() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) updateMerch() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) deleteMerch() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue