This commit is contained in:
@@ -22,12 +22,12 @@ type medias struct {
|
|||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param pagination query requests.Pagination false "分页参数"
|
// @Param pagination query requests.Pagination false "分页参数"
|
||||||
// @Param query query ListQuery false "筛选条件"
|
// @Param query query ListQuery false "筛选条件"
|
||||||
// @Success 200 {object} requests.Pager{items=models.Media} "成功"
|
// @Success 200 {object} requests.Pager{items=models.Medium} "成功"
|
||||||
// @Router /admin/medias [get]
|
// @Router /admin/medias [get]
|
||||||
// @Bind pagination query
|
// @Bind pagination query
|
||||||
// @Bind query query
|
// @Bind query query
|
||||||
func (ctl *medias) List(ctx fiber.Ctx, pagination *requests.Pagination, query *ListQuery) (*requests.Pager, error) {
|
func (ctl *medias) List(ctx fiber.Ctx, pagination *requests.Pagination, query *ListQuery) (*requests.Pager, error) {
|
||||||
return services.Media.List(ctx, pagination, models.MediaQuery.Name.Like(database.WrapLike(*query.Keyword)))
|
return services.Media.List(ctx, pagination, models.MediumQuery.Name.Like(database.WrapLike(*query.Keyword)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show media
|
// Show media
|
||||||
@@ -38,7 +38,7 @@ func (ctl *medias) List(ctx fiber.Ctx, pagination *requests.Pagination, query *L
|
|||||||
// @Success 302 {string} string "跳转"
|
// @Success 302 {string} string "跳转"
|
||||||
// @Router /admin/medias/:id [get]
|
// @Router /admin/medias/:id [get]
|
||||||
// @Bind media path key(id) model(id)
|
// @Bind media path key(id) model(id)
|
||||||
func (ctl *medias) Show(ctx fiber.Ctx, media *models.Media) error {
|
func (ctl *medias) Show(ctx fiber.Ctx, media *models.Medium) error {
|
||||||
url, err := ctl.oss.GetSignedUrl(ctx, media.Path)
|
url, err := ctl.oss.GetSignedUrl(ctx, media.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -56,7 +56,7 @@ func (ctl *medias) Show(ctx fiber.Ctx, media *models.Media) error {
|
|||||||
// @Success 204 {object} any "成功"
|
// @Success 204 {object} any "成功"
|
||||||
// @Router /admin/medias/:id [delete]
|
// @Router /admin/medias/:id [delete]
|
||||||
// @Bind media path key(id) model(id)
|
// @Bind media path key(id) model(id)
|
||||||
func (ctl *medias) Delete(ctx fiber.Ctx, media *models.Media) error {
|
func (ctl *medias) Delete(ctx fiber.Ctx, media *models.Medium) error {
|
||||||
if err := ctl.oss.Delete(ctx, media.Path); err != nil {
|
if err := ctl.oss.Delete(ctx, media.Path); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ func (ctl *posts) Create(ctx fiber.Ctx, form *PostForm) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
assets := lo.Map(medias, func(media *models.Media, _ int) fields.MediaAsset {
|
assets := lo.Map(medias, func(media *models.Medium, _ int) fields.MediaAsset {
|
||||||
return fields.MediaAsset{
|
return fields.MediaAsset{
|
||||||
Type: media.MimeType,
|
Type: media.MimeType,
|
||||||
Media: media.ID,
|
Media: media.ID,
|
||||||
@@ -144,7 +144,7 @@ func (ctl *posts) Update(ctx fiber.Ctx, post *models.Post, form *PostForm) error
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
assets := lo.Map(medias, func(media *models.Media, _ int) fields.MediaAsset {
|
assets := lo.Map(medias, func(media *models.Medium, _ int) fields.MediaAsset {
|
||||||
return fields.MediaAsset{
|
return fields.MediaAsset{
|
||||||
Type: media.MimeType,
|
Type: media.MimeType,
|
||||||
Media: media.ID,
|
Media: media.ID,
|
||||||
@@ -178,7 +178,7 @@ func (ctl *posts) Delete(ctx fiber.Ctx, post *models.Post) error {
|
|||||||
|
|
||||||
type PostItem struct {
|
type PostItem struct {
|
||||||
*models.Post
|
*models.Post
|
||||||
Medias []*models.Media `json:"medias"`
|
Medias []*models.Medium `json:"medias"`
|
||||||
BoughtCount int64 `json:"bought_count"`
|
BoughtCount int64 `json:"bought_count"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,12 @@
|
|||||||
package admin
|
package admin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go.ipao.vip/gen/field"
|
|
||||||
"quyun/v2/app/middlewares"
|
"quyun/v2/app/middlewares"
|
||||||
"quyun/v2/app/requests"
|
"quyun/v2/app/requests"
|
||||||
"quyun/v2/database/models"
|
"quyun/v2/database/models"
|
||||||
|
|
||||||
|
"go.ipao.vip/gen/field"
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v3"
|
"github.com/gofiber/fiber/v3"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
_ "go.ipao.vip/atom"
|
_ "go.ipao.vip/atom"
|
||||||
@@ -59,9 +60,9 @@ func (r *Routes) Register(router fiber.Router) {
|
|||||||
r.log.Debugf("Registering route: Delete /admin/medias/:id -> medias.Delete")
|
r.log.Debugf("Registering route: Delete /admin/medias/:id -> medias.Delete")
|
||||||
router.Delete("/admin/medias/:id"[len(r.Path()):], Func1(
|
router.Delete("/admin/medias/:id"[len(r.Path()):], Func1(
|
||||||
r.medias.Delete,
|
r.medias.Delete,
|
||||||
func(ctx fiber.Ctx) (*models.Media, error) {
|
func(ctx fiber.Ctx) (*models.Medium, error) {
|
||||||
v := fiber.Params[int](ctx, "id")
|
v := fiber.Params[int](ctx, "id")
|
||||||
return models.MediaQuery.WithContext(ctx).Where(field.NewUnsafeFieldRaw("id = ?", v)).First()
|
return models.MediumQuery.WithContext(ctx).Where(field.NewUnsafeFieldRaw("id = ?", v)).First()
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
r.log.Debugf("Registering route: Get /admin/medias -> medias.List")
|
r.log.Debugf("Registering route: Get /admin/medias -> medias.List")
|
||||||
@@ -73,9 +74,9 @@ func (r *Routes) Register(router fiber.Router) {
|
|||||||
r.log.Debugf("Registering route: Get /admin/medias/:id -> medias.Show")
|
r.log.Debugf("Registering route: Get /admin/medias/:id -> medias.Show")
|
||||||
router.Get("/admin/medias/:id"[len(r.Path()):], Func1(
|
router.Get("/admin/medias/:id"[len(r.Path()):], Func1(
|
||||||
r.medias.Show,
|
r.medias.Show,
|
||||||
func(ctx fiber.Ctx) (*models.Media, error) {
|
func(ctx fiber.Ctx) (*models.Medium, error) {
|
||||||
v := fiber.Params[int](ctx, "id")
|
v := fiber.Params[int](ctx, "id")
|
||||||
return models.MediaQuery.WithContext(ctx).Where(field.NewUnsafeFieldRaw("id = ?", v)).First()
|
return models.MediumQuery.WithContext(ctx).Where(field.NewUnsafeFieldRaw("id = ?", v)).First()
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
// Register routes for controller: orders
|
// Register routes for controller: orders
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ func (up *uploads) PostUploadedAction(ctx fiber.Ctx, body *PostUploadedForm) err
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
m = &models.Media{
|
m = &models.Medium{
|
||||||
Name: body.OriginalName,
|
Name: body.OriginalName,
|
||||||
MimeType: body.MimeType,
|
MimeType: body.MimeType,
|
||||||
Size: body.Size,
|
Size: body.Size,
|
||||||
|
|||||||
34
backend_v1/app/http/auth.go
Normal file
34
backend_v1/app/http/auth.go
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package http
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "embed"
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"quyun/v2/app/services"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v3"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
// @provider
|
||||||
|
type auth struct{}
|
||||||
|
|
||||||
|
// Phone
|
||||||
|
//
|
||||||
|
// @Summary 手机验证
|
||||||
|
// @Tags Auth
|
||||||
|
// @Produce json
|
||||||
|
// @Success 200 {object} requests.Pager{items=PostItem} "成功"
|
||||||
|
// @Router /v1/auth/:phone [post]
|
||||||
|
// @Bind phone path
|
||||||
|
func (ctl *posts) Phone(ctx fiber.Ctx, phone string) error {
|
||||||
|
_, err := services.Users.FindByPhone(ctx, phone)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
return errors.New("手机号未注册,请联系管理员开通")
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// TODO: send sms
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -81,7 +81,7 @@ func (ctl *posts) List(
|
|||||||
log.Errorf("GetMediaByIds err: %v", err)
|
log.Errorf("GetMediaByIds err: %v", err)
|
||||||
return PostItem{}, false
|
return PostItem{}, false
|
||||||
}
|
}
|
||||||
mediaUrls := lo.FilterMap(medias, func(item *models.Media, _ int) (string, bool) {
|
mediaUrls := lo.FilterMap(medias, func(item *models.Medium, _ int) (string, bool) {
|
||||||
url, err := ctl.oss.GetSignedUrl(ctx, item.Path)
|
url, err := ctl.oss.GetSignedUrl(ctx, item.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithError(err).Errorf("head image GetSignedUrl err: %v", err)
|
log.WithError(err).Errorf("head image GetSignedUrl err: %v", err)
|
||||||
@@ -155,7 +155,7 @@ func (ctl *posts) Show(ctx fiber.Ctx, post *models.Post, user *models.User) (*Po
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
mediaUrls := lo.FilterMap(medias, func(item *models.Media, _ int) (string, bool) {
|
mediaUrls := lo.FilterMap(medias, func(item *models.Medium, _ int) (string, bool) {
|
||||||
url, err := ctl.oss.GetSignedUrl(ctx, item.Path)
|
url, err := ctl.oss.GetSignedUrl(ctx, item.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", false
|
return "", false
|
||||||
@@ -278,7 +278,7 @@ func (ctl *posts) Mine(
|
|||||||
log.Errorf("GetMediaByIds err: %v", err)
|
log.Errorf("GetMediaByIds err: %v", err)
|
||||||
return PostItem{}, false
|
return PostItem{}, false
|
||||||
}
|
}
|
||||||
mediaUrls := lo.FilterMap(medias, func(item *models.Media, _ int) (string, bool) {
|
mediaUrls := lo.FilterMap(medias, func(item *models.Medium, _ int) (string, bool) {
|
||||||
url, err := ctl.oss.GetSignedUrl(ctx, item.Path)
|
url, err := ctl.oss.GetSignedUrl(ctx, item.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithError(err).Errorf("head image GetSignedUrl err: %v", err)
|
log.WithError(err).Errorf("head image GetSignedUrl err: %v", err)
|
||||||
|
|||||||
@@ -5,11 +5,12 @@
|
|||||||
package http
|
package http
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go.ipao.vip/gen/field"
|
|
||||||
"quyun/v2/app/middlewares"
|
"quyun/v2/app/middlewares"
|
||||||
"quyun/v2/app/requests"
|
"quyun/v2/app/requests"
|
||||||
"quyun/v2/database/models"
|
"quyun/v2/database/models"
|
||||||
|
|
||||||
|
"go.ipao.vip/gen/field"
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v3"
|
"github.com/gofiber/fiber/v3"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
_ "go.ipao.vip/atom"
|
_ "go.ipao.vip/atom"
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ func (w *PublishDraftPostsWorker) Work(ctx context.Context, job *Job[PublishDraf
|
|||||||
return JobCancel(err)
|
return JobCancel(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
assets := lo.FilterMap(relationMedias, func(media *models.Media, _ int) (fields.MediaAsset, bool) {
|
assets := lo.FilterMap(relationMedias, func(media *models.Medium, _ int) (fields.MediaAsset, bool) {
|
||||||
return fields.MediaAsset{
|
return fields.MediaAsset{
|
||||||
Type: media.MimeType,
|
Type: media.MimeType,
|
||||||
Media: media.ID,
|
Media: media.ID,
|
||||||
@@ -95,7 +95,7 @@ func (w *PublishDraftPostsWorker) Work(ctx context.Context, job *Job[PublishDraf
|
|||||||
Likes: 0,
|
Likes: 0,
|
||||||
Tags: types.NewJSONType([]string{}),
|
Tags: types.NewJSONType([]string{}),
|
||||||
Assets: types.NewJSONType(assets),
|
Assets: types.NewJSONType(assets),
|
||||||
HeadImages: types.NewJSONType(lo.FilterMap(relationMedias, func(media *models.Media, _ int) (int64, bool) {
|
HeadImages: types.NewJSONType(lo.FilterMap(relationMedias, func(media *models.Medium, _ int) (int64, bool) {
|
||||||
return media.ID, media.MimeType == "image/jpeg"
|
return media.ID, media.MimeType == "image/jpeg"
|
||||||
})),
|
})),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ func (w *VideoExtractHeadImageWorker) Work(ctx context.Context, job *Job[VideoEx
|
|||||||
name := "[展示图]" + media.Name + ".jpg"
|
name := "[展示图]" + media.Name + ".jpg"
|
||||||
|
|
||||||
// create a new media record for the image
|
// create a new media record for the image
|
||||||
imageMedia := &models.Media{
|
imageMedia := &models.Medium{
|
||||||
Name: name,
|
Name: name,
|
||||||
MimeType: "image/jpeg",
|
MimeType: "image/jpeg",
|
||||||
Size: fileSize,
|
Size: fileSize,
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ func (w *VideoStoreShortWorker) Work(ctx context.Context, job *Job[VideoStoreSho
|
|||||||
log.Infof("got file size %s %d", job.Args.FilePath, fileSize)
|
log.Infof("got file size %s %d", job.Args.FilePath, fileSize)
|
||||||
|
|
||||||
// save to db and relate to master
|
// save to db and relate to master
|
||||||
mediaModel := &models.Media{
|
mediaModel := &models.Medium{
|
||||||
Name: "[试听] " + media.Name,
|
Name: "[试听] " + media.Name,
|
||||||
MimeType: media.MimeType,
|
MimeType: media.MimeType,
|
||||||
Size: fileSize,
|
Size: fileSize,
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ func (f *Middlewares) AuthFrontend(ctx fiber.Ctx) error {
|
|||||||
return ctx.Next()
|
return ctx.Next()
|
||||||
}
|
}
|
||||||
|
|
||||||
if f.app.IsDevMode() && true {
|
if f.app.IsDevMode() && false {
|
||||||
user, err := services.Users.FindByID(ctx.Context(), 1001)
|
user, err := services.Users.FindByID(ctx.Context(), 1001)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ctx.Send([]byte("User not found"))
|
return ctx.Send([]byte("User not found"))
|
||||||
@@ -33,7 +33,7 @@ func (f *Middlewares) AuthFrontend(ctx fiber.Ctx) error {
|
|||||||
query := u.Query()
|
query := u.Query()
|
||||||
query.Set("redirect", fullUrl)
|
query.Set("redirect", fullUrl)
|
||||||
u.RawQuery = query.Encode()
|
u.RawQuery = query.Encode()
|
||||||
u.Path = "/v1/auth/wechat" // TODO: use phone validation
|
u.Path = "/v1/auth/phone"
|
||||||
fullUrl = u.String()
|
fullUrl = u.String()
|
||||||
|
|
||||||
// check cookie exists
|
// check cookie exists
|
||||||
@@ -21,7 +21,7 @@ func (m *media) List(
|
|||||||
) (*requests.Pager, error) {
|
) (*requests.Pager, error) {
|
||||||
pagination.Format()
|
pagination.Format()
|
||||||
|
|
||||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
tbl, query := models.MediumQuery.QueryContext(ctx)
|
||||||
|
|
||||||
items, cnt, err := query.
|
items, cnt, err := query.
|
||||||
Where(conds...).
|
Where(conds...).
|
||||||
@@ -39,12 +39,12 @@ func (m *media) List(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetByIds
|
// GetByIds
|
||||||
func (m *media) GetByIds(ctx context.Context, ids []int64) ([]*models.Media, error) {
|
func (m *media) GetByIds(ctx context.Context, ids []int64) ([]*models.Medium, error) {
|
||||||
if len(ids) == 0 {
|
if len(ids) == 0 {
|
||||||
return []*models.Media{}, nil
|
return []*models.Medium{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
tbl, query := models.MediumQuery.QueryContext(ctx)
|
||||||
|
|
||||||
items, err := query.
|
items, err := query.
|
||||||
Where(tbl.ID.In(ids...)).
|
Where(tbl.ID.In(ids...)).
|
||||||
@@ -57,8 +57,8 @@ func (m *media) GetByIds(ctx context.Context, ids []int64) ([]*models.Media, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetByHash
|
// GetByHash
|
||||||
func (m *media) GetByHash(ctx context.Context, hash string) (*models.Media, error) {
|
func (m *media) GetByHash(ctx context.Context, hash string) (*models.Medium, error) {
|
||||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
tbl, query := models.MediumQuery.QueryContext(ctx)
|
||||||
item, err := query.
|
item, err := query.
|
||||||
Where(tbl.Hash.Eq(hash)).
|
Where(tbl.Hash.Eq(hash)).
|
||||||
First()
|
First()
|
||||||
@@ -70,7 +70,7 @@ func (m *media) GetByHash(ctx context.Context, hash string) (*models.Media, erro
|
|||||||
|
|
||||||
// UpdateMetas
|
// UpdateMetas
|
||||||
func (m *media) UpdateMetas(ctx context.Context, id int64, metas fields.MediaMetas) error {
|
func (m *media) UpdateMetas(ctx context.Context, id int64, metas fields.MediaMetas) error {
|
||||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
tbl, query := models.MediumQuery.QueryContext(ctx)
|
||||||
_, err := query.
|
_, err := query.
|
||||||
Where(tbl.ID.Eq(id)).
|
Where(tbl.ID.Eq(id)).
|
||||||
Update(tbl.Metas, metas)
|
Update(tbl.Metas, metas)
|
||||||
@@ -82,14 +82,14 @@ func (m *media) UpdateMetas(ctx context.Context, id int64, metas fields.MediaMet
|
|||||||
|
|
||||||
// GetRelationMedias
|
// GetRelationMedias
|
||||||
|
|
||||||
func (m *media) GetRelations(ctx context.Context, hash string) ([]*models.Media, error) {
|
func (m *media) GetRelations(ctx context.Context, hash string) ([]*models.Medium, error) {
|
||||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
tbl, query := models.MediumQuery.QueryContext(ctx)
|
||||||
return query.Where(tbl.Metas.KeyEq("parent_hash", hash)).Find()
|
return query.Where(tbl.Metas.KeyEq("parent_hash", hash)).Find()
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindByID
|
// FindByID
|
||||||
func (m *media) FindByID(ctx context.Context, id int64) (*models.Media, error) {
|
func (m *media) FindByID(ctx context.Context, id int64) (*models.Medium, error) {
|
||||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
tbl, query := models.MediumQuery.QueryContext(ctx)
|
||||||
item, err := query.Where(tbl.ID.Eq(id)).First()
|
item, err := query.Where(tbl.ID.Eq(id)).First()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed to find media by id: %d", id)
|
return nil, errors.Wrapf(err, "failed to find media by id: %d", id)
|
||||||
@@ -99,7 +99,7 @@ func (m *media) FindByID(ctx context.Context, id int64) (*models.Media, error) {
|
|||||||
|
|
||||||
// Count
|
// Count
|
||||||
func (m *media) Count(ctx context.Context, conds ...gen.Condition) (int64, error) {
|
func (m *media) Count(ctx context.Context, conds ...gen.Condition) (int64, error) {
|
||||||
_, query := models.MediaQuery.QueryContext(ctx)
|
_, query := models.MediumQuery.QueryContext(ctx)
|
||||||
if len(conds) > 0 {
|
if len(conds) > 0 {
|
||||||
query = query.Where(conds...)
|
query = query.Where(conds...)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,11 +142,11 @@ func (m *posts) GetPostsMapByIDs(ctx context.Context, ids []int64) (map[int64]*m
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetMediaByIds
|
// GetMediaByIds
|
||||||
func (m *posts) GetMediasByIds(ctx context.Context, ids []int64) ([]*models.Media, error) {
|
func (m *posts) GetMediasByIds(ctx context.Context, ids []int64) ([]*models.Medium, error) {
|
||||||
if len(ids) == 0 {
|
if len(ids) == 0 {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
tbl, query := models.MediumQuery.QueryContext(ctx)
|
||||||
return query.Where(tbl.ID.In(ids...)).Find()
|
return query.Where(tbl.ID.In(ids...)).Find()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ func (m *users) PostList(
|
|||||||
pagePosts, cnt, err := query.Select(tbl.PostID).
|
pagePosts, cnt, err := query.Select(tbl.PostID).
|
||||||
Where(tbl.UserID.Eq(userId)).
|
Where(tbl.UserID.Eq(userId)).
|
||||||
FindByPage(int(pagination.Offset()), int(pagination.Limit))
|
FindByPage(int(pagination.Offset()), int(pagination.Limit))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -211,3 +210,9 @@ func (m *users) Count(ctx context.Context, conds ...gen.Condition) (int64, error
|
|||||||
}
|
}
|
||||||
return query.Count()
|
return query.Count()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FindByPhone
|
||||||
|
func (m *users) FindByPhone(ctx context.Context, phone string) (*models.User, error) {
|
||||||
|
tbl, query := models.UserQuery.QueryContext(ctx)
|
||||||
|
return query.Where(tbl.Phone.Eq(phone)).First()
|
||||||
|
}
|
||||||
|
|||||||
@@ -26,6 +26,6 @@ field_type:
|
|||||||
status: fields.OrderStatus
|
status: fields.OrderStatus
|
||||||
meta: types.JSONType[fields.OrderMeta]
|
meta: types.JSONType[fields.OrderMeta]
|
||||||
|
|
||||||
medias:
|
media:
|
||||||
metas: types.JSONType[fields.MediaMetas]
|
metas: types.JSONType[fields.MediaMetas]
|
||||||
field_relate:
|
field_relate:
|
||||||
|
|||||||
13
backend_v1/database/migrations/20251220033752_alter_user.sql
Normal file
13
backend_v1/database/migrations/20251220033752_alter_user.sql
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
-- add phone field to users table
|
||||||
|
ALTER TABLE public.users
|
||||||
|
ADD phone varchar(15) DEFAULT '' NOT NULL;
|
||||||
|
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
ALTER TABLE public.users
|
||||||
|
DROP COLUMN phone;
|
||||||
|
|
||||||
|
-- +goose StatementEnd
|
||||||
@@ -14,10 +14,10 @@ import (
|
|||||||
"go.ipao.vip/gen/types"
|
"go.ipao.vip/gen/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
const TableNameMedia = "medias"
|
const TableNameMedium = "media"
|
||||||
|
|
||||||
// Media mapped from table <medias>
|
// Medium mapped from table <media>
|
||||||
type Media struct {
|
type Medium struct {
|
||||||
ID int64 `gorm:"column:id;type:bigint;primaryKey;autoIncrement:true" json:"id"`
|
ID int64 `gorm:"column:id;type:bigint;primaryKey;autoIncrement:true" json:"id"`
|
||||||
CreatedAt time.Time `gorm:"column:created_at;type:timestamp without time zone;not null;default:now()" json:"created_at"`
|
CreatedAt time.Time `gorm:"column:created_at;type:timestamp without time zone;not null;default:now()" json:"created_at"`
|
||||||
Name string `gorm:"column:name;type:character varying(255);not null" json:"name"`
|
Name string `gorm:"column:name;type:character varying(255);not null" json:"name"`
|
||||||
@@ -30,29 +30,29 @@ type Media struct {
|
|||||||
|
|
||||||
// Quick operations without importing query package
|
// Quick operations without importing query package
|
||||||
// Update applies changed fields to the database using the default DB.
|
// Update applies changed fields to the database using the default DB.
|
||||||
func (m *Media) Update(ctx context.Context) (gen.ResultInfo, error) {
|
func (m *Medium) Update(ctx context.Context) (gen.ResultInfo, error) {
|
||||||
return Q.Media.WithContext(ctx).Updates(m)
|
return Q.Medium.WithContext(ctx).Updates(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save upserts the model using the default DB.
|
// Save upserts the model using the default DB.
|
||||||
func (m *Media) Save(ctx context.Context) error { return Q.Media.WithContext(ctx).Save(m) }
|
func (m *Medium) Save(ctx context.Context) error { return Q.Medium.WithContext(ctx).Save(m) }
|
||||||
|
|
||||||
// Create inserts the model using the default DB.
|
// Create inserts the model using the default DB.
|
||||||
func (m *Media) Create(ctx context.Context) error { return Q.Media.WithContext(ctx).Create(m) }
|
func (m *Medium) Create(ctx context.Context) error { return Q.Medium.WithContext(ctx).Create(m) }
|
||||||
|
|
||||||
// Delete removes the row represented by the model using the default DB.
|
// Delete removes the row represented by the model using the default DB.
|
||||||
func (m *Media) Delete(ctx context.Context) (gen.ResultInfo, error) {
|
func (m *Medium) Delete(ctx context.Context) (gen.ResultInfo, error) {
|
||||||
return Q.Media.WithContext(ctx).Delete(m)
|
return Q.Medium.WithContext(ctx).Delete(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ForceDelete permanently deletes the row (ignores soft delete) using the default DB.
|
// ForceDelete permanently deletes the row (ignores soft delete) using the default DB.
|
||||||
func (m *Media) ForceDelete(ctx context.Context) (gen.ResultInfo, error) {
|
func (m *Medium) ForceDelete(ctx context.Context) (gen.ResultInfo, error) {
|
||||||
return Q.Media.WithContext(ctx).Unscoped().Delete(m)
|
return Q.Medium.WithContext(ctx).Unscoped().Delete(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reload reloads the model from database by its primary key and overwrites current fields.
|
// Reload reloads the model from database by its primary key and overwrites current fields.
|
||||||
func (m *Media) Reload(ctx context.Context) error {
|
func (m *Medium) Reload(ctx context.Context) error {
|
||||||
fresh, err := Q.Media.WithContext(ctx).GetByID(m.ID)
|
fresh, err := Q.Medium.WithContext(ctx).GetByID(m.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -17,30 +17,30 @@ import (
|
|||||||
"gorm.io/plugin/dbresolver"
|
"gorm.io/plugin/dbresolver"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newMedia(db *gorm.DB, opts ...gen.DOOption) mediaQuery {
|
func newMedium(db *gorm.DB, opts ...gen.DOOption) mediumQuery {
|
||||||
_mediaQuery := mediaQuery{}
|
_mediumQuery := mediumQuery{}
|
||||||
|
|
||||||
_mediaQuery.mediaQueryDo.UseDB(db, opts...)
|
_mediumQuery.mediumQueryDo.UseDB(db, opts...)
|
||||||
_mediaQuery.mediaQueryDo.UseModel(&Media{})
|
_mediumQuery.mediumQueryDo.UseModel(&Medium{})
|
||||||
|
|
||||||
tableName := _mediaQuery.mediaQueryDo.TableName()
|
tableName := _mediumQuery.mediumQueryDo.TableName()
|
||||||
_mediaQuery.ALL = field.NewAsterisk(tableName)
|
_mediumQuery.ALL = field.NewAsterisk(tableName)
|
||||||
_mediaQuery.ID = field.NewInt64(tableName, "id")
|
_mediumQuery.ID = field.NewInt64(tableName, "id")
|
||||||
_mediaQuery.CreatedAt = field.NewTime(tableName, "created_at")
|
_mediumQuery.CreatedAt = field.NewTime(tableName, "created_at")
|
||||||
_mediaQuery.Name = field.NewString(tableName, "name")
|
_mediumQuery.Name = field.NewString(tableName, "name")
|
||||||
_mediaQuery.MimeType = field.NewString(tableName, "mime_type")
|
_mediumQuery.MimeType = field.NewString(tableName, "mime_type")
|
||||||
_mediaQuery.Size = field.NewInt64(tableName, "size")
|
_mediumQuery.Size = field.NewInt64(tableName, "size")
|
||||||
_mediaQuery.Path = field.NewString(tableName, "path")
|
_mediumQuery.Path = field.NewString(tableName, "path")
|
||||||
_mediaQuery.Metas = field.NewJSONB(tableName, "metas")
|
_mediumQuery.Metas = field.NewJSONB(tableName, "metas")
|
||||||
_mediaQuery.Hash = field.NewString(tableName, "hash")
|
_mediumQuery.Hash = field.NewString(tableName, "hash")
|
||||||
|
|
||||||
_mediaQuery.fillFieldMap()
|
_mediumQuery.fillFieldMap()
|
||||||
|
|
||||||
return _mediaQuery
|
return _mediumQuery
|
||||||
}
|
}
|
||||||
|
|
||||||
type mediaQuery struct {
|
type mediumQuery struct {
|
||||||
mediaQueryDo mediaQueryDo
|
mediumQueryDo mediumQueryDo
|
||||||
|
|
||||||
ALL field.Asterisk
|
ALL field.Asterisk
|
||||||
ID field.Int64
|
ID field.Int64
|
||||||
@@ -55,17 +55,17 @@ type mediaQuery struct {
|
|||||||
fieldMap map[string]field.Expr
|
fieldMap map[string]field.Expr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQuery) Table(newTableName string) *mediaQuery {
|
func (m mediumQuery) Table(newTableName string) *mediumQuery {
|
||||||
m.mediaQueryDo.UseTable(newTableName)
|
m.mediumQueryDo.UseTable(newTableName)
|
||||||
return m.updateTableName(newTableName)
|
return m.updateTableName(newTableName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQuery) As(alias string) *mediaQuery {
|
func (m mediumQuery) As(alias string) *mediumQuery {
|
||||||
m.mediaQueryDo.DO = *(m.mediaQueryDo.As(alias).(*gen.DO))
|
m.mediumQueryDo.DO = *(m.mediumQueryDo.As(alias).(*gen.DO))
|
||||||
return m.updateTableName(alias)
|
return m.updateTableName(alias)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mediaQuery) updateTableName(table string) *mediaQuery {
|
func (m *mediumQuery) updateTableName(table string) *mediumQuery {
|
||||||
m.ALL = field.NewAsterisk(table)
|
m.ALL = field.NewAsterisk(table)
|
||||||
m.ID = field.NewInt64(table, "id")
|
m.ID = field.NewInt64(table, "id")
|
||||||
m.CreatedAt = field.NewTime(table, "created_at")
|
m.CreatedAt = field.NewTime(table, "created_at")
|
||||||
@@ -81,21 +81,21 @@ func (m *mediaQuery) updateTableName(table string) *mediaQuery {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mediaQuery) QueryContext(ctx context.Context) (*mediaQuery, *mediaQueryDo) {
|
func (m *mediumQuery) QueryContext(ctx context.Context) (*mediumQuery, *mediumQueryDo) {
|
||||||
return m, m.mediaQueryDo.WithContext(ctx)
|
return m, m.mediumQueryDo.WithContext(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mediaQuery) WithContext(ctx context.Context) *mediaQueryDo {
|
func (m *mediumQuery) WithContext(ctx context.Context) *mediumQueryDo {
|
||||||
return m.mediaQueryDo.WithContext(ctx)
|
return m.mediumQueryDo.WithContext(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQuery) TableName() string { return m.mediaQueryDo.TableName() }
|
func (m mediumQuery) TableName() string { return m.mediumQueryDo.TableName() }
|
||||||
|
|
||||||
func (m mediaQuery) Alias() string { return m.mediaQueryDo.Alias() }
|
func (m mediumQuery) Alias() string { return m.mediumQueryDo.Alias() }
|
||||||
|
|
||||||
func (m mediaQuery) Columns(cols ...field.Expr) gen.Columns { return m.mediaQueryDo.Columns(cols...) }
|
func (m mediumQuery) Columns(cols ...field.Expr) gen.Columns { return m.mediumQueryDo.Columns(cols...) }
|
||||||
|
|
||||||
func (m *mediaQuery) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
func (m *mediumQuery) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||||
_f, ok := m.fieldMap[fieldName]
|
_f, ok := m.fieldMap[fieldName]
|
||||||
if !ok || _f == nil {
|
if !ok || _f == nil {
|
||||||
return nil, false
|
return nil, false
|
||||||
@@ -104,7 +104,7 @@ func (m *mediaQuery) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
|||||||
return _oe, ok
|
return _oe, ok
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mediaQuery) fillFieldMap() {
|
func (m *mediumQuery) fillFieldMap() {
|
||||||
m.fieldMap = make(map[string]field.Expr, 8)
|
m.fieldMap = make(map[string]field.Expr, 8)
|
||||||
m.fieldMap["id"] = m.ID
|
m.fieldMap["id"] = m.ID
|
||||||
m.fieldMap["created_at"] = m.CreatedAt
|
m.fieldMap["created_at"] = m.CreatedAt
|
||||||
@@ -116,161 +116,161 @@ func (m *mediaQuery) fillFieldMap() {
|
|||||||
m.fieldMap["hash"] = m.Hash
|
m.fieldMap["hash"] = m.Hash
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQuery) clone(db *gorm.DB) mediaQuery {
|
func (m mediumQuery) clone(db *gorm.DB) mediumQuery {
|
||||||
m.mediaQueryDo.ReplaceConnPool(db.Statement.ConnPool)
|
m.mediumQueryDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQuery) replaceDB(db *gorm.DB) mediaQuery {
|
func (m mediumQuery) replaceDB(db *gorm.DB) mediumQuery {
|
||||||
m.mediaQueryDo.ReplaceDB(db)
|
m.mediumQueryDo.ReplaceDB(db)
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
type mediaQueryDo struct{ gen.DO }
|
type mediumQueryDo struct{ gen.DO }
|
||||||
|
|
||||||
func (m mediaQueryDo) Debug() *mediaQueryDo {
|
func (m mediumQueryDo) Debug() *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Debug())
|
return m.withDO(m.DO.Debug())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) WithContext(ctx context.Context) *mediaQueryDo {
|
func (m mediumQueryDo) WithContext(ctx context.Context) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.WithContext(ctx))
|
return m.withDO(m.DO.WithContext(ctx))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) ReadDB() *mediaQueryDo {
|
func (m mediumQueryDo) ReadDB() *mediumQueryDo {
|
||||||
return m.Clauses(dbresolver.Read)
|
return m.Clauses(dbresolver.Read)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) WriteDB() *mediaQueryDo {
|
func (m mediumQueryDo) WriteDB() *mediumQueryDo {
|
||||||
return m.Clauses(dbresolver.Write)
|
return m.Clauses(dbresolver.Write)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Session(config *gorm.Session) *mediaQueryDo {
|
func (m mediumQueryDo) Session(config *gorm.Session) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Session(config))
|
return m.withDO(m.DO.Session(config))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Clauses(conds ...clause.Expression) *mediaQueryDo {
|
func (m mediumQueryDo) Clauses(conds ...clause.Expression) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Clauses(conds...))
|
return m.withDO(m.DO.Clauses(conds...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Returning(value interface{}, columns ...string) *mediaQueryDo {
|
func (m mediumQueryDo) Returning(value interface{}, columns ...string) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Returning(value, columns...))
|
return m.withDO(m.DO.Returning(value, columns...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Not(conds ...gen.Condition) *mediaQueryDo {
|
func (m mediumQueryDo) Not(conds ...gen.Condition) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Not(conds...))
|
return m.withDO(m.DO.Not(conds...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Or(conds ...gen.Condition) *mediaQueryDo {
|
func (m mediumQueryDo) Or(conds ...gen.Condition) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Or(conds...))
|
return m.withDO(m.DO.Or(conds...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Select(conds ...field.Expr) *mediaQueryDo {
|
func (m mediumQueryDo) Select(conds ...field.Expr) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Select(conds...))
|
return m.withDO(m.DO.Select(conds...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Where(conds ...gen.Condition) *mediaQueryDo {
|
func (m mediumQueryDo) Where(conds ...gen.Condition) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Where(conds...))
|
return m.withDO(m.DO.Where(conds...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Order(conds ...field.Expr) *mediaQueryDo {
|
func (m mediumQueryDo) Order(conds ...field.Expr) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Order(conds...))
|
return m.withDO(m.DO.Order(conds...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Distinct(cols ...field.Expr) *mediaQueryDo {
|
func (m mediumQueryDo) Distinct(cols ...field.Expr) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Distinct(cols...))
|
return m.withDO(m.DO.Distinct(cols...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Omit(cols ...field.Expr) *mediaQueryDo {
|
func (m mediumQueryDo) Omit(cols ...field.Expr) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Omit(cols...))
|
return m.withDO(m.DO.Omit(cols...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Join(table schema.Tabler, on ...field.Expr) *mediaQueryDo {
|
func (m mediumQueryDo) Join(table schema.Tabler, on ...field.Expr) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Join(table, on...))
|
return m.withDO(m.DO.Join(table, on...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) LeftJoin(table schema.Tabler, on ...field.Expr) *mediaQueryDo {
|
func (m mediumQueryDo) LeftJoin(table schema.Tabler, on ...field.Expr) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.LeftJoin(table, on...))
|
return m.withDO(m.DO.LeftJoin(table, on...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) RightJoin(table schema.Tabler, on ...field.Expr) *mediaQueryDo {
|
func (m mediumQueryDo) RightJoin(table schema.Tabler, on ...field.Expr) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.RightJoin(table, on...))
|
return m.withDO(m.DO.RightJoin(table, on...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Group(cols ...field.Expr) *mediaQueryDo {
|
func (m mediumQueryDo) Group(cols ...field.Expr) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Group(cols...))
|
return m.withDO(m.DO.Group(cols...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Having(conds ...gen.Condition) *mediaQueryDo {
|
func (m mediumQueryDo) Having(conds ...gen.Condition) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Having(conds...))
|
return m.withDO(m.DO.Having(conds...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Limit(limit int) *mediaQueryDo {
|
func (m mediumQueryDo) Limit(limit int) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Limit(limit))
|
return m.withDO(m.DO.Limit(limit))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Offset(offset int) *mediaQueryDo {
|
func (m mediumQueryDo) Offset(offset int) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Offset(offset))
|
return m.withDO(m.DO.Offset(offset))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Scopes(funcs ...func(gen.Dao) gen.Dao) *mediaQueryDo {
|
func (m mediumQueryDo) Scopes(funcs ...func(gen.Dao) gen.Dao) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Scopes(funcs...))
|
return m.withDO(m.DO.Scopes(funcs...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Unscoped() *mediaQueryDo {
|
func (m mediumQueryDo) Unscoped() *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Unscoped())
|
return m.withDO(m.DO.Unscoped())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Create(values ...*Media) error {
|
func (m mediumQueryDo) Create(values ...*Medium) error {
|
||||||
if len(values) == 0 {
|
if len(values) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return m.DO.Create(values)
|
return m.DO.Create(values)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) CreateInBatches(values []*Media, batchSize int) error {
|
func (m mediumQueryDo) CreateInBatches(values []*Medium, batchSize int) error {
|
||||||
return m.DO.CreateInBatches(values, batchSize)
|
return m.DO.CreateInBatches(values, batchSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save : !!! underlying implementation is different with GORM
|
// Save : !!! underlying implementation is different with GORM
|
||||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||||
func (m mediaQueryDo) Save(values ...*Media) error {
|
func (m mediumQueryDo) Save(values ...*Medium) error {
|
||||||
if len(values) == 0 {
|
if len(values) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return m.DO.Save(values)
|
return m.DO.Save(values)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) First() (*Media, error) {
|
func (m mediumQueryDo) First() (*Medium, error) {
|
||||||
if result, err := m.DO.First(); err != nil {
|
if result, err := m.DO.First(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
return result.(*Media), nil
|
return result.(*Medium), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Take() (*Media, error) {
|
func (m mediumQueryDo) Take() (*Medium, error) {
|
||||||
if result, err := m.DO.Take(); err != nil {
|
if result, err := m.DO.Take(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
return result.(*Media), nil
|
return result.(*Medium), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Last() (*Media, error) {
|
func (m mediumQueryDo) Last() (*Medium, error) {
|
||||||
if result, err := m.DO.Last(); err != nil {
|
if result, err := m.DO.Last(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
return result.(*Media), nil
|
return result.(*Medium), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Find() ([]*Media, error) {
|
func (m mediumQueryDo) Find() ([]*Medium, error) {
|
||||||
result, err := m.DO.Find()
|
result, err := m.DO.Find()
|
||||||
return result.([]*Media), err
|
return result.([]*Medium), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*Media, err error) {
|
func (m mediumQueryDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*Medium, err error) {
|
||||||
buf := make([]*Media, 0, batchSize)
|
buf := make([]*Medium, 0, batchSize)
|
||||||
err = m.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
err = m.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||||
defer func() { results = append(results, buf...) }()
|
defer func() { results = append(results, buf...) }()
|
||||||
return fc(tx, batch)
|
return fc(tx, batch)
|
||||||
@@ -278,49 +278,49 @@ func (m mediaQueryDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int)
|
|||||||
return results, err
|
return results, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) FindInBatches(result *[]*Media, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
func (m mediumQueryDo) FindInBatches(result *[]*Medium, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||||
return m.DO.FindInBatches(result, batchSize, fc)
|
return m.DO.FindInBatches(result, batchSize, fc)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Attrs(attrs ...field.AssignExpr) *mediaQueryDo {
|
func (m mediumQueryDo) Attrs(attrs ...field.AssignExpr) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Attrs(attrs...))
|
return m.withDO(m.DO.Attrs(attrs...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Assign(attrs ...field.AssignExpr) *mediaQueryDo {
|
func (m mediumQueryDo) Assign(attrs ...field.AssignExpr) *mediumQueryDo {
|
||||||
return m.withDO(m.DO.Assign(attrs...))
|
return m.withDO(m.DO.Assign(attrs...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Joins(fields ...field.RelationField) *mediaQueryDo {
|
func (m mediumQueryDo) Joins(fields ...field.RelationField) *mediumQueryDo {
|
||||||
for _, _f := range fields {
|
for _, _f := range fields {
|
||||||
m = *m.withDO(m.DO.Joins(_f))
|
m = *m.withDO(m.DO.Joins(_f))
|
||||||
}
|
}
|
||||||
return &m
|
return &m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Preload(fields ...field.RelationField) *mediaQueryDo {
|
func (m mediumQueryDo) Preload(fields ...field.RelationField) *mediumQueryDo {
|
||||||
for _, _f := range fields {
|
for _, _f := range fields {
|
||||||
m = *m.withDO(m.DO.Preload(_f))
|
m = *m.withDO(m.DO.Preload(_f))
|
||||||
}
|
}
|
||||||
return &m
|
return &m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) FirstOrInit() (*Media, error) {
|
func (m mediumQueryDo) FirstOrInit() (*Medium, error) {
|
||||||
if result, err := m.DO.FirstOrInit(); err != nil {
|
if result, err := m.DO.FirstOrInit(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
return result.(*Media), nil
|
return result.(*Medium), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) FirstOrCreate() (*Media, error) {
|
func (m mediumQueryDo) FirstOrCreate() (*Medium, error) {
|
||||||
if result, err := m.DO.FirstOrCreate(); err != nil {
|
if result, err := m.DO.FirstOrCreate(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
return result.(*Media), nil
|
return result.(*Medium), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) FindByPage(offset int, limit int) (result []*Media, count int64, err error) {
|
func (m mediumQueryDo) FindByPage(offset int, limit int) (result []*Medium, count int64, err error) {
|
||||||
result, err = m.Offset(offset).Limit(limit).Find()
|
result, err = m.Offset(offset).Limit(limit).Find()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@@ -335,7 +335,7 @@ func (m mediaQueryDo) FindByPage(offset int, limit int) (result []*Media, count
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
func (m mediumQueryDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||||
count, err = m.Count()
|
count, err = m.Count()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@@ -345,35 +345,35 @@ func (m mediaQueryDo) ScanByPage(result interface{}, offset int, limit int) (cou
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Scan(result interface{}) (err error) {
|
func (m mediumQueryDo) Scan(result interface{}) (err error) {
|
||||||
return m.DO.Scan(result)
|
return m.DO.Scan(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mediaQueryDo) Delete(models ...*Media) (result gen.ResultInfo, err error) {
|
func (m mediumQueryDo) Delete(models ...*Medium) (result gen.ResultInfo, err error) {
|
||||||
return m.DO.Delete(models)
|
return m.DO.Delete(models)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ForceDelete performs a permanent delete (ignores soft-delete) for current scope.
|
// ForceDelete performs a permanent delete (ignores soft-delete) for current scope.
|
||||||
func (m mediaQueryDo) ForceDelete() (gen.ResultInfo, error) {
|
func (m mediumQueryDo) ForceDelete() (gen.ResultInfo, error) {
|
||||||
return m.Unscoped().Delete()
|
return m.Unscoped().Delete()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc increases the given column by step for current scope.
|
// Inc increases the given column by step for current scope.
|
||||||
func (m mediaQueryDo) Inc(column field.Expr, step int64) (gen.ResultInfo, error) {
|
func (m mediumQueryDo) Inc(column field.Expr, step int64) (gen.ResultInfo, error) {
|
||||||
// column = column + step
|
// column = column + step
|
||||||
e := field.NewUnsafeFieldRaw("?+?", column.RawExpr(), step)
|
e := field.NewUnsafeFieldRaw("?+?", column.RawExpr(), step)
|
||||||
return m.DO.UpdateColumn(column, e)
|
return m.DO.UpdateColumn(column, e)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dec decreases the given column by step for current scope.
|
// Dec decreases the given column by step for current scope.
|
||||||
func (m mediaQueryDo) Dec(column field.Expr, step int64) (gen.ResultInfo, error) {
|
func (m mediumQueryDo) Dec(column field.Expr, step int64) (gen.ResultInfo, error) {
|
||||||
// column = column - step
|
// column = column - step
|
||||||
e := field.NewUnsafeFieldRaw("?-?", column.RawExpr(), step)
|
e := field.NewUnsafeFieldRaw("?-?", column.RawExpr(), step)
|
||||||
return m.DO.UpdateColumn(column, e)
|
return m.DO.UpdateColumn(column, e)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sum returns SUM(column) for current scope.
|
// Sum returns SUM(column) for current scope.
|
||||||
func (m mediaQueryDo) Sum(column field.Expr) (float64, error) {
|
func (m mediumQueryDo) Sum(column field.Expr) (float64, error) {
|
||||||
var _v float64
|
var _v float64
|
||||||
agg := field.NewUnsafeFieldRaw("SUM(?)", column.RawExpr())
|
agg := field.NewUnsafeFieldRaw("SUM(?)", column.RawExpr())
|
||||||
if err := m.Select(agg).Scan(&_v); err != nil {
|
if err := m.Select(agg).Scan(&_v); err != nil {
|
||||||
@@ -383,7 +383,7 @@ func (m mediaQueryDo) Sum(column field.Expr) (float64, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Avg returns AVG(column) for current scope.
|
// Avg returns AVG(column) for current scope.
|
||||||
func (m mediaQueryDo) Avg(column field.Expr) (float64, error) {
|
func (m mediumQueryDo) Avg(column field.Expr) (float64, error) {
|
||||||
var _v float64
|
var _v float64
|
||||||
agg := field.NewUnsafeFieldRaw("AVG(?)", column.RawExpr())
|
agg := field.NewUnsafeFieldRaw("AVG(?)", column.RawExpr())
|
||||||
if err := m.Select(agg).Scan(&_v); err != nil {
|
if err := m.Select(agg).Scan(&_v); err != nil {
|
||||||
@@ -393,7 +393,7 @@ func (m mediaQueryDo) Avg(column field.Expr) (float64, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Min returns MIN(column) for current scope.
|
// Min returns MIN(column) for current scope.
|
||||||
func (m mediaQueryDo) Min(column field.Expr) (float64, error) {
|
func (m mediumQueryDo) Min(column field.Expr) (float64, error) {
|
||||||
var _v float64
|
var _v float64
|
||||||
agg := field.NewUnsafeFieldRaw("MIN(?)", column.RawExpr())
|
agg := field.NewUnsafeFieldRaw("MIN(?)", column.RawExpr())
|
||||||
if err := m.Select(agg).Scan(&_v); err != nil {
|
if err := m.Select(agg).Scan(&_v); err != nil {
|
||||||
@@ -403,7 +403,7 @@ func (m mediaQueryDo) Min(column field.Expr) (float64, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Max returns MAX(column) for current scope.
|
// Max returns MAX(column) for current scope.
|
||||||
func (m mediaQueryDo) Max(column field.Expr) (float64, error) {
|
func (m mediumQueryDo) Max(column field.Expr) (float64, error) {
|
||||||
var _v float64
|
var _v float64
|
||||||
agg := field.NewUnsafeFieldRaw("MAX(?)", column.RawExpr())
|
agg := field.NewUnsafeFieldRaw("MAX(?)", column.RawExpr())
|
||||||
if err := m.Select(agg).Scan(&_v); err != nil {
|
if err := m.Select(agg).Scan(&_v); err != nil {
|
||||||
@@ -413,7 +413,7 @@ func (m mediaQueryDo) Max(column field.Expr) (float64, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PluckMap returns a map[key]value for selected key/value expressions within current scope.
|
// PluckMap returns a map[key]value for selected key/value expressions within current scope.
|
||||||
func (m mediaQueryDo) PluckMap(key, val field.Expr) (map[interface{}]interface{}, error) {
|
func (m mediumQueryDo) PluckMap(key, val field.Expr) (map[interface{}]interface{}, error) {
|
||||||
do := m.Select(key, val)
|
do := m.Select(key, val)
|
||||||
rows, err := do.DO.Rows()
|
rows, err := do.DO.Rows()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -433,7 +433,7 @@ func (m mediaQueryDo) PluckMap(key, val field.Expr) (map[interface{}]interface{}
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Exists returns true if any record matches the given conditions.
|
// Exists returns true if any record matches the given conditions.
|
||||||
func (m mediaQueryDo) Exists(conds ...gen.Condition) (bool, error) {
|
func (m mediumQueryDo) Exists(conds ...gen.Condition) (bool, error) {
|
||||||
cnt, err := m.Where(conds...).Count()
|
cnt, err := m.Where(conds...).Count()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
@@ -442,7 +442,7 @@ func (m mediaQueryDo) Exists(conds ...gen.Condition) (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PluckIDs returns all primary key values under current scope.
|
// PluckIDs returns all primary key values under current scope.
|
||||||
func (m mediaQueryDo) PluckIDs() ([]int64, error) {
|
func (m mediumQueryDo) PluckIDs() ([]int64, error) {
|
||||||
ids := make([]int64, 0, 16)
|
ids := make([]int64, 0, 16)
|
||||||
pk := field.NewInt64(m.TableName(), "id")
|
pk := field.NewInt64(m.TableName(), "id")
|
||||||
if err := m.DO.Pluck(pk, &ids); err != nil {
|
if err := m.DO.Pluck(pk, &ids); err != nil {
|
||||||
@@ -452,28 +452,28 @@ func (m mediaQueryDo) PluckIDs() ([]int64, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetByID finds a single record by primary key.
|
// GetByID finds a single record by primary key.
|
||||||
func (m mediaQueryDo) GetByID(id int64) (*Media, error) {
|
func (m mediumQueryDo) GetByID(id int64) (*Medium, error) {
|
||||||
pk := field.NewInt64(m.TableName(), "id")
|
pk := field.NewInt64(m.TableName(), "id")
|
||||||
return m.Where(pk.Eq(id)).First()
|
return m.Where(pk.Eq(id)).First()
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetByIDs finds records by primary key list.
|
// GetByIDs finds records by primary key list.
|
||||||
func (m mediaQueryDo) GetByIDs(ids ...int64) ([]*Media, error) {
|
func (m mediumQueryDo) GetByIDs(ids ...int64) ([]*Medium, error) {
|
||||||
if len(ids) == 0 {
|
if len(ids) == 0 {
|
||||||
return []*Media{}, nil
|
return []*Medium{}, nil
|
||||||
}
|
}
|
||||||
pk := field.NewInt64(m.TableName(), "id")
|
pk := field.NewInt64(m.TableName(), "id")
|
||||||
return m.Where(pk.In(ids...)).Find()
|
return m.Where(pk.In(ids...)).Find()
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteByID deletes records by primary key.
|
// DeleteByID deletes records by primary key.
|
||||||
func (m mediaQueryDo) DeleteByID(id int64) (gen.ResultInfo, error) {
|
func (m mediumQueryDo) DeleteByID(id int64) (gen.ResultInfo, error) {
|
||||||
pk := field.NewInt64(m.TableName(), "id")
|
pk := field.NewInt64(m.TableName(), "id")
|
||||||
return m.Where(pk.Eq(id)).Delete()
|
return m.Where(pk.Eq(id)).Delete()
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteByIDs deletes records by a list of primary keys.
|
// DeleteByIDs deletes records by a list of primary keys.
|
||||||
func (m mediaQueryDo) DeleteByIDs(ids ...int64) (gen.ResultInfo, error) {
|
func (m mediumQueryDo) DeleteByIDs(ids ...int64) (gen.ResultInfo, error) {
|
||||||
if len(ids) == 0 {
|
if len(ids) == 0 {
|
||||||
return gen.ResultInfo{RowsAffected: 0, Error: nil}, nil
|
return gen.ResultInfo{RowsAffected: 0, Error: nil}, nil
|
||||||
}
|
}
|
||||||
@@ -481,7 +481,7 @@ func (m mediaQueryDo) DeleteByIDs(ids ...int64) (gen.ResultInfo, error) {
|
|||||||
return m.Where(pk.In(ids...)).Delete()
|
return m.Where(pk.In(ids...)).Delete()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mediaQueryDo) withDO(do gen.Dao) *mediaQueryDo {
|
func (m *mediumQueryDo) withDO(do gen.Dao) *mediumQueryDo {
|
||||||
m.DO = *do.(*gen.DO)
|
m.DO = *do.(*gen.DO)
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
@@ -17,7 +17,7 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
Q = new(Query)
|
Q = new(Query)
|
||||||
MediaQuery *mediaQuery
|
MediumQuery *mediumQuery
|
||||||
OrderQuery *orderQuery
|
OrderQuery *orderQuery
|
||||||
PostQuery *postQuery
|
PostQuery *postQuery
|
||||||
UserQuery *userQuery
|
UserQuery *userQuery
|
||||||
@@ -26,7 +26,7 @@ var (
|
|||||||
|
|
||||||
func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
||||||
*Q = *Use(db, opts...)
|
*Q = *Use(db, opts...)
|
||||||
MediaQuery = &Q.Media
|
MediumQuery = &Q.Medium
|
||||||
OrderQuery = &Q.Order
|
OrderQuery = &Q.Order
|
||||||
PostQuery = &Q.Post
|
PostQuery = &Q.Post
|
||||||
UserQuery = &Q.User
|
UserQuery = &Q.User
|
||||||
@@ -36,7 +36,7 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
|||||||
func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
||||||
return &Query{
|
return &Query{
|
||||||
db: db,
|
db: db,
|
||||||
Media: newMedia(db, opts...),
|
Medium: newMedium(db, opts...),
|
||||||
Order: newOrder(db, opts...),
|
Order: newOrder(db, opts...),
|
||||||
Post: newPost(db, opts...),
|
Post: newPost(db, opts...),
|
||||||
User: newUser(db, opts...),
|
User: newUser(db, opts...),
|
||||||
@@ -47,7 +47,7 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
|||||||
type Query struct {
|
type Query struct {
|
||||||
db *gorm.DB
|
db *gorm.DB
|
||||||
|
|
||||||
Media mediaQuery
|
Medium mediumQuery
|
||||||
Order orderQuery
|
Order orderQuery
|
||||||
Post postQuery
|
Post postQuery
|
||||||
User userQuery
|
User userQuery
|
||||||
@@ -59,7 +59,7 @@ func (q *Query) Available() bool { return q.db != nil }
|
|||||||
func (q *Query) clone(db *gorm.DB) *Query {
|
func (q *Query) clone(db *gorm.DB) *Query {
|
||||||
return &Query{
|
return &Query{
|
||||||
db: db,
|
db: db,
|
||||||
Media: q.Media.clone(db),
|
Medium: q.Medium.clone(db),
|
||||||
Order: q.Order.clone(db),
|
Order: q.Order.clone(db),
|
||||||
Post: q.Post.clone(db),
|
Post: q.Post.clone(db),
|
||||||
User: q.User.clone(db),
|
User: q.User.clone(db),
|
||||||
@@ -78,7 +78,7 @@ func (q *Query) WriteDB() *Query {
|
|||||||
func (q *Query) ReplaceDB(db *gorm.DB) *Query {
|
func (q *Query) ReplaceDB(db *gorm.DB) *Query {
|
||||||
return &Query{
|
return &Query{
|
||||||
db: db,
|
db: db,
|
||||||
Media: q.Media.replaceDB(db),
|
Medium: q.Medium.replaceDB(db),
|
||||||
Order: q.Order.replaceDB(db),
|
Order: q.Order.replaceDB(db),
|
||||||
Post: q.Post.replaceDB(db),
|
Post: q.Post.replaceDB(db),
|
||||||
User: q.User.replaceDB(db),
|
User: q.User.replaceDB(db),
|
||||||
@@ -87,7 +87,7 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type queryCtx struct {
|
type queryCtx struct {
|
||||||
Media *mediaQueryDo
|
Medium *mediumQueryDo
|
||||||
Order *orderQueryDo
|
Order *orderQueryDo
|
||||||
Post *postQueryDo
|
Post *postQueryDo
|
||||||
User *userQueryDo
|
User *userQueryDo
|
||||||
@@ -96,7 +96,7 @@ type queryCtx struct {
|
|||||||
|
|
||||||
func (q *Query) WithContext(ctx context.Context) *queryCtx {
|
func (q *Query) WithContext(ctx context.Context) *queryCtx {
|
||||||
return &queryCtx{
|
return &queryCtx{
|
||||||
Media: q.Media.WithContext(ctx),
|
Medium: q.Medium.WithContext(ctx),
|
||||||
Order: q.Order.WithContext(ctx),
|
Order: q.Order.WithContext(ctx),
|
||||||
Post: q.Post.WithContext(ctx),
|
Post: q.Post.WithContext(ctx),
|
||||||
User: q.User.WithContext(ctx),
|
User: q.User.WithContext(ctx),
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ type User struct {
|
|||||||
Metas types.JSONType[fields.UserMetas] `gorm:"column:metas;type:jsonb;not null;default:{}" json:"metas"`
|
Metas types.JSONType[fields.UserMetas] `gorm:"column:metas;type:jsonb;not null;default:{}" json:"metas"`
|
||||||
AuthToken types.JSONType[fields.UserAuthToken] `gorm:"column:auth_token;type:jsonb;not null;default:{}" json:"auth_token"`
|
AuthToken types.JSONType[fields.UserAuthToken] `gorm:"column:auth_token;type:jsonb;not null;default:{}" json:"auth_token"`
|
||||||
Balance int64 `gorm:"column:balance;type:bigint;not null" json:"balance"`
|
Balance int64 `gorm:"column:balance;type:bigint;not null" json:"balance"`
|
||||||
|
Phone string `gorm:"column:phone;type:character varying(15);not null" json:"phone"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quick operations without importing query package
|
// Quick operations without importing query package
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ func newUser(db *gorm.DB, opts ...gen.DOOption) userQuery {
|
|||||||
_userQuery.Metas = field.NewJSONB(tableName, "metas")
|
_userQuery.Metas = field.NewJSONB(tableName, "metas")
|
||||||
_userQuery.AuthToken = field.NewJSONB(tableName, "auth_token")
|
_userQuery.AuthToken = field.NewJSONB(tableName, "auth_token")
|
||||||
_userQuery.Balance = field.NewInt64(tableName, "balance")
|
_userQuery.Balance = field.NewInt64(tableName, "balance")
|
||||||
|
_userQuery.Phone = field.NewString(tableName, "phone")
|
||||||
|
|
||||||
_userQuery.fillFieldMap()
|
_userQuery.fillFieldMap()
|
||||||
|
|
||||||
@@ -57,6 +58,7 @@ type userQuery struct {
|
|||||||
Metas field.JSONB
|
Metas field.JSONB
|
||||||
AuthToken field.JSONB
|
AuthToken field.JSONB
|
||||||
Balance field.Int64
|
Balance field.Int64
|
||||||
|
Phone field.String
|
||||||
|
|
||||||
fieldMap map[string]field.Expr
|
fieldMap map[string]field.Expr
|
||||||
}
|
}
|
||||||
@@ -84,6 +86,7 @@ func (u *userQuery) updateTableName(table string) *userQuery {
|
|||||||
u.Metas = field.NewJSONB(table, "metas")
|
u.Metas = field.NewJSONB(table, "metas")
|
||||||
u.AuthToken = field.NewJSONB(table, "auth_token")
|
u.AuthToken = field.NewJSONB(table, "auth_token")
|
||||||
u.Balance = field.NewInt64(table, "balance")
|
u.Balance = field.NewInt64(table, "balance")
|
||||||
|
u.Phone = field.NewString(table, "phone")
|
||||||
|
|
||||||
u.fillFieldMap()
|
u.fillFieldMap()
|
||||||
|
|
||||||
@@ -114,7 +117,7 @@ func (u *userQuery) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (u *userQuery) fillFieldMap() {
|
func (u *userQuery) fillFieldMap() {
|
||||||
u.fieldMap = make(map[string]field.Expr, 11)
|
u.fieldMap = make(map[string]field.Expr, 12)
|
||||||
u.fieldMap["id"] = u.ID
|
u.fieldMap["id"] = u.ID
|
||||||
u.fieldMap["created_at"] = u.CreatedAt
|
u.fieldMap["created_at"] = u.CreatedAt
|
||||||
u.fieldMap["updated_at"] = u.UpdatedAt
|
u.fieldMap["updated_at"] = u.UpdatedAt
|
||||||
@@ -126,6 +129,7 @@ func (u *userQuery) fillFieldMap() {
|
|||||||
u.fieldMap["metas"] = u.Metas
|
u.fieldMap["metas"] = u.Metas
|
||||||
u.fieldMap["auth_token"] = u.AuthToken
|
u.fieldMap["auth_token"] = u.AuthToken
|
||||||
u.fieldMap["balance"] = u.Balance
|
u.fieldMap["balance"] = u.Balance
|
||||||
|
u.fieldMap["phone"] = u.Phone
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u userQuery) clone(db *gorm.DB) userQuery {
|
func (u userQuery) clone(db *gorm.DB) userQuery {
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ const docTemplate = `{
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"items": {
|
"items": {
|
||||||
"$ref": "#/definitions/models.Media"
|
"$ref": "#/definitions/models.Medium"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -698,235 +698,33 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/posts": {
|
"/v1/auth/{phone}": {
|
||||||
"get": {
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Posts"
|
|
||||||
],
|
|
||||||
"summary": "作品列表",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"name": "limit",
|
|
||||||
"in": "query"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"name": "page",
|
|
||||||
"in": "query"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"name": "keyword",
|
|
||||||
"in": "query"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功",
|
|
||||||
"schema": {
|
|
||||||
"allOf": [
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/requests.Pager"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/http.PostItem"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/posts/mine": {
|
|
||||||
"get": {
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Posts"
|
|
||||||
],
|
|
||||||
"summary": "我的已购作品",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"name": "limit",
|
|
||||||
"in": "query"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"name": "page",
|
|
||||||
"in": "query"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"name": "keyword",
|
|
||||||
"in": "query"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功",
|
|
||||||
"schema": {
|
|
||||||
"allOf": [
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/requests.Pager"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/http.PostItem"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/posts/{id}/buy": {
|
|
||||||
"post": {
|
"post": {
|
||||||
"produces": [
|
"produces": [
|
||||||
"application/json"
|
"application/json"
|
||||||
],
|
],
|
||||||
"tags": [
|
"tags": [
|
||||||
"Posts"
|
"Auth"
|
||||||
],
|
|
||||||
"summary": "购买作品",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"format": "int64",
|
|
||||||
"description": "作品 ID",
|
|
||||||
"name": "id",
|
|
||||||
"in": "path",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功(余额支付返回 AppId=balance)",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/wechat.JSAPIPayParams"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/posts/{id}/play": {
|
|
||||||
"get": {
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Posts"
|
|
||||||
],
|
|
||||||
"summary": "获取播放地址",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"format": "int64",
|
|
||||||
"description": "作品 ID",
|
|
||||||
"name": "id",
|
|
||||||
"in": "path",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
|
"summary": "手机验证",
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "成功",
|
"description": "成功",
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/http.PlayUrl"
|
"allOf": [
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/posts/{id}/show": {
|
|
||||||
"get": {
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Posts"
|
|
||||||
],
|
|
||||||
"summary": "作品详情",
|
|
||||||
"parameters": [
|
|
||||||
{
|
{
|
||||||
"type": "integer",
|
"$ref": "#/definitions/requests.Pager"
|
||||||
"format": "int64",
|
},
|
||||||
"description": "作品 ID",
|
{
|
||||||
"name": "id",
|
"type": "object",
|
||||||
"in": "path",
|
"properties": {
|
||||||
"required": true
|
"items": {
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/http.PostItem"
|
"$ref": "#/definitions/http.PostItem"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"/users/profile": {
|
|
||||||
"get": {
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Users"
|
|
||||||
],
|
|
||||||
"summary": "获取个人信息",
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/http.UserInfo"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/users/username": {
|
|
||||||
"put": {
|
|
||||||
"consumes": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Users"
|
|
||||||
],
|
|
||||||
"summary": "修改用户名",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"description": "请求体",
|
|
||||||
"name": "form",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/http.ProfileForm"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功",
|
|
||||||
"schema": {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1008,6 +806,239 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"/v1/posts": {
|
||||||
|
"get": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Posts"
|
||||||
|
],
|
||||||
|
"summary": "作品列表",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "limit",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "page",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"name": "keyword",
|
||||||
|
"in": "query"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {
|
||||||
|
"allOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/requests.Pager"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/http.PostItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/posts/mine": {
|
||||||
|
"get": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Posts"
|
||||||
|
],
|
||||||
|
"summary": "我的已购作品",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "limit",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "page",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"name": "keyword",
|
||||||
|
"in": "query"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {
|
||||||
|
"allOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/requests.Pager"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/http.PostItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/posts/{id}/buy": {
|
||||||
|
"post": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Posts"
|
||||||
|
],
|
||||||
|
"summary": "购买作品",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"description": "作品 ID",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功(余额支付返回 AppId=balance)",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/wechat.JSAPIPayParams"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/posts/{id}/play": {
|
||||||
|
"get": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Posts"
|
||||||
|
],
|
||||||
|
"summary": "获取播放地址",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"description": "作品 ID",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/http.PlayUrl"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/posts/{id}/show": {
|
||||||
|
"get": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Posts"
|
||||||
|
],
|
||||||
|
"summary": "作品详情",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"description": "作品 ID",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/http.PostItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/users/profile": {
|
||||||
|
"get": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Users"
|
||||||
|
],
|
||||||
|
"summary": "获取个人信息",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/http.UserInfo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/users/username": {
|
||||||
|
"put": {
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Users"
|
||||||
|
],
|
||||||
|
"summary": "修改用户名",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "请求体",
|
||||||
|
"name": "form",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/http.ProfileForm"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"definitions": {
|
"definitions": {
|
||||||
@@ -1097,7 +1128,7 @@ const docTemplate = `{
|
|||||||
"medias": {
|
"medias": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
"$ref": "#/definitions/models.Media"
|
"$ref": "#/definitions/models.Medium"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"price": {
|
"price": {
|
||||||
@@ -1335,7 +1366,7 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"models.Media": {
|
"models.Medium": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"created_at": {
|
"created_at": {
|
||||||
@@ -1348,7 +1379,10 @@ const docTemplate = `{
|
|||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"metas": {
|
"metas": {
|
||||||
"$ref": "#/definitions/types.JSONType-fields_MediaMetas"
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"mime_type": {
|
"mime_type": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
@@ -1441,6 +1475,9 @@ const docTemplate = `{
|
|||||||
"open_id": {
|
"open_id": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"phone": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"$ref": "#/definitions/fields.UserStatus"
|
"$ref": "#/definitions/fields.UserStatus"
|
||||||
},
|
},
|
||||||
@@ -1552,9 +1589,6 @@ const docTemplate = `{
|
|||||||
"types.JSONType-array_string": {
|
"types.JSONType-array_string": {
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
"types.JSONType-fields_MediaMetas": {
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"types.JSONType-fields_OrderMeta": {
|
"types.JSONType-fields_OrderMeta": {
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -89,7 +89,7 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"items": {
|
"items": {
|
||||||
"$ref": "#/definitions/models.Media"
|
"$ref": "#/definitions/models.Medium"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -692,235 +692,33 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/posts": {
|
"/v1/auth/{phone}": {
|
||||||
"get": {
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Posts"
|
|
||||||
],
|
|
||||||
"summary": "作品列表",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"name": "limit",
|
|
||||||
"in": "query"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"name": "page",
|
|
||||||
"in": "query"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"name": "keyword",
|
|
||||||
"in": "query"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功",
|
|
||||||
"schema": {
|
|
||||||
"allOf": [
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/requests.Pager"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/http.PostItem"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/posts/mine": {
|
|
||||||
"get": {
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Posts"
|
|
||||||
],
|
|
||||||
"summary": "我的已购作品",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"name": "limit",
|
|
||||||
"in": "query"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"name": "page",
|
|
||||||
"in": "query"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"name": "keyword",
|
|
||||||
"in": "query"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功",
|
|
||||||
"schema": {
|
|
||||||
"allOf": [
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/requests.Pager"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/http.PostItem"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/posts/{id}/buy": {
|
|
||||||
"post": {
|
"post": {
|
||||||
"produces": [
|
"produces": [
|
||||||
"application/json"
|
"application/json"
|
||||||
],
|
],
|
||||||
"tags": [
|
"tags": [
|
||||||
"Posts"
|
"Auth"
|
||||||
],
|
|
||||||
"summary": "购买作品",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"format": "int64",
|
|
||||||
"description": "作品 ID",
|
|
||||||
"name": "id",
|
|
||||||
"in": "path",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功(余额支付返回 AppId=balance)",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/wechat.JSAPIPayParams"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/posts/{id}/play": {
|
|
||||||
"get": {
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Posts"
|
|
||||||
],
|
|
||||||
"summary": "获取播放地址",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "integer",
|
|
||||||
"format": "int64",
|
|
||||||
"description": "作品 ID",
|
|
||||||
"name": "id",
|
|
||||||
"in": "path",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
|
"summary": "手机验证",
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "成功",
|
"description": "成功",
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/http.PlayUrl"
|
"allOf": [
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/posts/{id}/show": {
|
|
||||||
"get": {
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Posts"
|
|
||||||
],
|
|
||||||
"summary": "作品详情",
|
|
||||||
"parameters": [
|
|
||||||
{
|
{
|
||||||
"type": "integer",
|
"$ref": "#/definitions/requests.Pager"
|
||||||
"format": "int64",
|
},
|
||||||
"description": "作品 ID",
|
{
|
||||||
"name": "id",
|
"type": "object",
|
||||||
"in": "path",
|
"properties": {
|
||||||
"required": true
|
"items": {
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/http.PostItem"
|
"$ref": "#/definitions/http.PostItem"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"/users/profile": {
|
|
||||||
"get": {
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Users"
|
|
||||||
],
|
|
||||||
"summary": "获取个人信息",
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/http.UserInfo"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/users/username": {
|
|
||||||
"put": {
|
|
||||||
"consumes": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"Users"
|
|
||||||
],
|
|
||||||
"summary": "修改用户名",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"description": "请求体",
|
|
||||||
"name": "form",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/http.ProfileForm"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "成功",
|
|
||||||
"schema": {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1002,6 +800,239 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"/v1/posts": {
|
||||||
|
"get": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Posts"
|
||||||
|
],
|
||||||
|
"summary": "作品列表",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "limit",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "page",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"name": "keyword",
|
||||||
|
"in": "query"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {
|
||||||
|
"allOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/requests.Pager"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/http.PostItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/posts/mine": {
|
||||||
|
"get": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Posts"
|
||||||
|
],
|
||||||
|
"summary": "我的已购作品",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "limit",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"name": "page",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"name": "keyword",
|
||||||
|
"in": "query"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {
|
||||||
|
"allOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/requests.Pager"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/http.PostItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/posts/{id}/buy": {
|
||||||
|
"post": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Posts"
|
||||||
|
],
|
||||||
|
"summary": "购买作品",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"description": "作品 ID",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功(余额支付返回 AppId=balance)",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/wechat.JSAPIPayParams"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/posts/{id}/play": {
|
||||||
|
"get": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Posts"
|
||||||
|
],
|
||||||
|
"summary": "获取播放地址",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"description": "作品 ID",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/http.PlayUrl"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/posts/{id}/show": {
|
||||||
|
"get": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Posts"
|
||||||
|
],
|
||||||
|
"summary": "作品详情",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"description": "作品 ID",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/http.PostItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/users/profile": {
|
||||||
|
"get": {
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Users"
|
||||||
|
],
|
||||||
|
"summary": "获取个人信息",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/http.UserInfo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/v1/users/username": {
|
||||||
|
"put": {
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Users"
|
||||||
|
],
|
||||||
|
"summary": "修改用户名",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "请求体",
|
||||||
|
"name": "form",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/http.ProfileForm"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "成功",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"definitions": {
|
"definitions": {
|
||||||
@@ -1091,7 +1122,7 @@
|
|||||||
"medias": {
|
"medias": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
"$ref": "#/definitions/models.Media"
|
"$ref": "#/definitions/models.Medium"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"price": {
|
"price": {
|
||||||
@@ -1329,7 +1360,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"models.Media": {
|
"models.Medium": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"created_at": {
|
"created_at": {
|
||||||
@@ -1342,7 +1373,10 @@
|
|||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"metas": {
|
"metas": {
|
||||||
"$ref": "#/definitions/types.JSONType-fields_MediaMetas"
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"mime_type": {
|
"mime_type": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
@@ -1435,6 +1469,9 @@
|
|||||||
"open_id": {
|
"open_id": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"phone": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"$ref": "#/definitions/fields.UserStatus"
|
"$ref": "#/definitions/fields.UserStatus"
|
||||||
},
|
},
|
||||||
@@ -1546,9 +1583,6 @@
|
|||||||
"types.JSONType-array_string": {
|
"types.JSONType-array_string": {
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
"types.JSONType-fields_MediaMetas": {
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"types.JSONType-fields_OrderMeta": {
|
"types.JSONType-fields_OrderMeta": {
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ definitions:
|
|||||||
type: integer
|
type: integer
|
||||||
medias:
|
medias:
|
||||||
items:
|
items:
|
||||||
$ref: '#/definitions/models.Media'
|
$ref: '#/definitions/models.Medium'
|
||||||
type: array
|
type: array
|
||||||
price:
|
price:
|
||||||
type: integer
|
type: integer
|
||||||
@@ -220,7 +220,7 @@ definitions:
|
|||||||
username:
|
username:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
models.Media:
|
models.Medium:
|
||||||
properties:
|
properties:
|
||||||
created_at:
|
created_at:
|
||||||
type: string
|
type: string
|
||||||
@@ -229,7 +229,9 @@ definitions:
|
|||||||
id:
|
id:
|
||||||
type: integer
|
type: integer
|
||||||
metas:
|
metas:
|
||||||
$ref: '#/definitions/types.JSONType-fields_MediaMetas'
|
items:
|
||||||
|
type: integer
|
||||||
|
type: array
|
||||||
mime_type:
|
mime_type:
|
||||||
type: string
|
type: string
|
||||||
name:
|
name:
|
||||||
@@ -290,6 +292,8 @@ definitions:
|
|||||||
$ref: '#/definitions/types.JSONType-fields_UserMetas'
|
$ref: '#/definitions/types.JSONType-fields_UserMetas'
|
||||||
open_id:
|
open_id:
|
||||||
type: string
|
type: string
|
||||||
|
phone:
|
||||||
|
type: string
|
||||||
status:
|
status:
|
||||||
$ref: '#/definitions/fields.UserStatus'
|
$ref: '#/definitions/fields.UserStatus'
|
||||||
updated_at:
|
updated_at:
|
||||||
@@ -363,8 +367,6 @@ definitions:
|
|||||||
type: object
|
type: object
|
||||||
types.JSONType-array_string:
|
types.JSONType-array_string:
|
||||||
type: object
|
type: object
|
||||||
types.JSONType-fields_MediaMetas:
|
|
||||||
type: object
|
|
||||||
types.JSONType-fields_OrderMeta:
|
types.JSONType-fields_OrderMeta:
|
||||||
type: object
|
type: object
|
||||||
types.JSONType-fields_UserAuthToken:
|
types.JSONType-fields_UserAuthToken:
|
||||||
@@ -448,7 +450,7 @@ paths:
|
|||||||
- $ref: '#/definitions/requests.Pager'
|
- $ref: '#/definitions/requests.Pager'
|
||||||
- properties:
|
- properties:
|
||||||
items:
|
items:
|
||||||
$ref: '#/definitions/models.Media'
|
$ref: '#/definitions/models.Medium'
|
||||||
type: object
|
type: object
|
||||||
summary: 媒体列表
|
summary: 媒体列表
|
||||||
tags:
|
tags:
|
||||||
@@ -828,102 +830,8 @@ paths:
|
|||||||
summary: 调整用户余额
|
summary: 调整用户余额
|
||||||
tags:
|
tags:
|
||||||
- Admin Users
|
- Admin Users
|
||||||
/posts:
|
/v1/auth/{phone}:
|
||||||
get:
|
|
||||||
parameters:
|
|
||||||
- in: query
|
|
||||||
name: limit
|
|
||||||
type: integer
|
|
||||||
- in: query
|
|
||||||
name: page
|
|
||||||
type: integer
|
|
||||||
- in: query
|
|
||||||
name: keyword
|
|
||||||
type: string
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: 成功
|
|
||||||
schema:
|
|
||||||
allOf:
|
|
||||||
- $ref: '#/definitions/requests.Pager'
|
|
||||||
- properties:
|
|
||||||
items:
|
|
||||||
$ref: '#/definitions/http.PostItem'
|
|
||||||
type: object
|
|
||||||
summary: 作品列表
|
|
||||||
tags:
|
|
||||||
- Posts
|
|
||||||
/posts/{id}/buy:
|
|
||||||
post:
|
post:
|
||||||
parameters:
|
|
||||||
- description: 作品 ID
|
|
||||||
format: int64
|
|
||||||
in: path
|
|
||||||
name: id
|
|
||||||
required: true
|
|
||||||
type: integer
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: 成功(余额支付返回 AppId=balance)
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/wechat.JSAPIPayParams'
|
|
||||||
summary: 购买作品
|
|
||||||
tags:
|
|
||||||
- Posts
|
|
||||||
/posts/{id}/play:
|
|
||||||
get:
|
|
||||||
parameters:
|
|
||||||
- description: 作品 ID
|
|
||||||
format: int64
|
|
||||||
in: path
|
|
||||||
name: id
|
|
||||||
required: true
|
|
||||||
type: integer
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: 成功
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/http.PlayUrl'
|
|
||||||
summary: 获取播放地址
|
|
||||||
tags:
|
|
||||||
- Posts
|
|
||||||
/posts/{id}/show:
|
|
||||||
get:
|
|
||||||
parameters:
|
|
||||||
- description: 作品 ID
|
|
||||||
format: int64
|
|
||||||
in: path
|
|
||||||
name: id
|
|
||||||
required: true
|
|
||||||
type: integer
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: 成功
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/http.PostItem'
|
|
||||||
summary: 作品详情
|
|
||||||
tags:
|
|
||||||
- Posts
|
|
||||||
/posts/mine:
|
|
||||||
get:
|
|
||||||
parameters:
|
|
||||||
- in: query
|
|
||||||
name: limit
|
|
||||||
type: integer
|
|
||||||
- in: query
|
|
||||||
name: page
|
|
||||||
type: integer
|
|
||||||
- in: query
|
|
||||||
name: keyword
|
|
||||||
type: string
|
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@@ -936,41 +844,9 @@ paths:
|
|||||||
items:
|
items:
|
||||||
$ref: '#/definitions/http.PostItem'
|
$ref: '#/definitions/http.PostItem'
|
||||||
type: object
|
type: object
|
||||||
summary: 我的已购作品
|
summary: 手机验证
|
||||||
tags:
|
tags:
|
||||||
- Posts
|
- Auth
|
||||||
/users/profile:
|
|
||||||
get:
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: 成功
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/http.UserInfo'
|
|
||||||
summary: 获取个人信息
|
|
||||||
tags:
|
|
||||||
- Users
|
|
||||||
/users/username:
|
|
||||||
put:
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
parameters:
|
|
||||||
- description: 请求体
|
|
||||||
in: body
|
|
||||||
name: form
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/http.ProfileForm'
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: 成功
|
|
||||||
schema: {}
|
|
||||||
summary: 修改用户名
|
|
||||||
tags:
|
|
||||||
- Users
|
|
||||||
/v1/medias/{id}:
|
/v1/medias/{id}:
|
||||||
post:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
@@ -1019,6 +895,149 @@ paths:
|
|||||||
summary: 演示接口
|
summary: 演示接口
|
||||||
tags:
|
tags:
|
||||||
- Demo
|
- Demo
|
||||||
|
/v1/posts:
|
||||||
|
get:
|
||||||
|
parameters:
|
||||||
|
- in: query
|
||||||
|
name: limit
|
||||||
|
type: integer
|
||||||
|
- in: query
|
||||||
|
name: page
|
||||||
|
type: integer
|
||||||
|
- in: query
|
||||||
|
name: keyword
|
||||||
|
type: string
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: 成功
|
||||||
|
schema:
|
||||||
|
allOf:
|
||||||
|
- $ref: '#/definitions/requests.Pager'
|
||||||
|
- properties:
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/http.PostItem'
|
||||||
|
type: object
|
||||||
|
summary: 作品列表
|
||||||
|
tags:
|
||||||
|
- Posts
|
||||||
|
/v1/posts/{id}/buy:
|
||||||
|
post:
|
||||||
|
parameters:
|
||||||
|
- description: 作品 ID
|
||||||
|
format: int64
|
||||||
|
in: path
|
||||||
|
name: id
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: 成功(余额支付返回 AppId=balance)
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/wechat.JSAPIPayParams'
|
||||||
|
summary: 购买作品
|
||||||
|
tags:
|
||||||
|
- Posts
|
||||||
|
/v1/posts/{id}/play:
|
||||||
|
get:
|
||||||
|
parameters:
|
||||||
|
- description: 作品 ID
|
||||||
|
format: int64
|
||||||
|
in: path
|
||||||
|
name: id
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: 成功
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/http.PlayUrl'
|
||||||
|
summary: 获取播放地址
|
||||||
|
tags:
|
||||||
|
- Posts
|
||||||
|
/v1/posts/{id}/show:
|
||||||
|
get:
|
||||||
|
parameters:
|
||||||
|
- description: 作品 ID
|
||||||
|
format: int64
|
||||||
|
in: path
|
||||||
|
name: id
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: 成功
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/http.PostItem'
|
||||||
|
summary: 作品详情
|
||||||
|
tags:
|
||||||
|
- Posts
|
||||||
|
/v1/posts/mine:
|
||||||
|
get:
|
||||||
|
parameters:
|
||||||
|
- in: query
|
||||||
|
name: limit
|
||||||
|
type: integer
|
||||||
|
- in: query
|
||||||
|
name: page
|
||||||
|
type: integer
|
||||||
|
- in: query
|
||||||
|
name: keyword
|
||||||
|
type: string
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: 成功
|
||||||
|
schema:
|
||||||
|
allOf:
|
||||||
|
- $ref: '#/definitions/requests.Pager'
|
||||||
|
- properties:
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/http.PostItem'
|
||||||
|
type: object
|
||||||
|
summary: 我的已购作品
|
||||||
|
tags:
|
||||||
|
- Posts
|
||||||
|
/v1/users/profile:
|
||||||
|
get:
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: 成功
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/http.UserInfo'
|
||||||
|
summary: 获取个人信息
|
||||||
|
tags:
|
||||||
|
- Users
|
||||||
|
/v1/users/username:
|
||||||
|
put:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- description: 请求体
|
||||||
|
in: body
|
||||||
|
name: form
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/http.ProfileForm'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: 成功
|
||||||
|
schema: {}
|
||||||
|
summary: 修改用户名
|
||||||
|
tags:
|
||||||
|
- Users
|
||||||
securityDefinitions:
|
securityDefinitions:
|
||||||
BasicAuth:
|
BasicAuth:
|
||||||
type: basic
|
type: basic
|
||||||
|
|||||||
Reference in New Issue
Block a user