feat: phone validation
Some checks failed
build quyun / Build (push) Failing after 1m25s

This commit is contained in:
2025-12-20 11:47:45 +08:00
parent fdbf26d751
commit 0e4af79b53
31 changed files with 1130 additions and 984 deletions

View File

@@ -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
} }

View File

@@ -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"`
} }

View File

@@ -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

View File

@@ -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,

View 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
}

View File

@@ -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)

View File

@@ -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"

View File

@@ -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"
})), })),
} }

View File

@@ -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,

View File

@@ -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,

View File

@@ -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

View File

@@ -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...)
} }

View File

@@ -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()
} }

View File

@@ -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()
}

View File

@@ -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:

View 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

View File

@@ -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
} }

View File

@@ -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
} }

View File

@@ -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),

View File

@@ -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

View File

@@ -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 {

View File

@@ -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"
}, },

View File

@@ -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"
}, },

View File

@@ -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