123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- package cosy
- import (
- "github.com/0xJacky/Nginx-UI/internal/logger"
- "github.com/0xJacky/Nginx-UI/model"
- "github.com/0xJacky/Nginx-UI/settings"
- "github.com/spf13/cast"
- "gorm.io/gorm"
- "net/http"
- )
- func (c *Ctx[T]) SetFussy(keys ...string) *Ctx[T] {
- c.gormScopes = append(c.gormScopes, func(tx *gorm.DB) *gorm.DB {
- return model.QueryToFussySearch(c.ctx, tx, keys...)
- })
- return c
- }
- func (c *Ctx[T]) SetFussyKeys(value string, keys ...string) *Ctx[T] {
- c.gormScopes = append(c.gormScopes, func(tx *gorm.DB) *gorm.DB {
- return model.QueryToFussyKeysSearch(c.ctx, tx, value, keys...)
- })
- return c
- }
- func (c *Ctx[T]) SetEqual(keys ...string) *Ctx[T] {
- c.gormScopes = append(c.gormScopes, func(tx *gorm.DB) *gorm.DB {
- return model.QueryToEqualSearch(c.ctx, tx, keys...)
- })
- return c
- }
- func (c *Ctx[T]) SetIn(keys ...string) *Ctx[T] {
- c.gormScopes = append(c.gormScopes, func(tx *gorm.DB) *gorm.DB {
- return model.QueryToInSearch(c.ctx, tx, keys...)
- })
- return c
- }
- func (c *Ctx[T]) SetOrFussy(keys ...string) *Ctx[T] {
- c.gormScopes = append(c.gormScopes, func(tx *gorm.DB) *gorm.DB {
- return model.QueryToOrFussySearch(c.ctx, tx, keys...)
- })
- return c
- }
- func (c *Ctx[T]) SetOrEqual(keys ...string) *Ctx[T] {
- c.gormScopes = append(c.gormScopes, func(tx *gorm.DB) *gorm.DB {
- return model.QueryToOrEqualSearch(c.ctx, tx, keys...)
- })
- return c
- }
- func (c *Ctx[T]) SetOrIn(keys ...string) *Ctx[T] {
- c.gormScopes = append(c.gormScopes, func(tx *gorm.DB) *gorm.DB {
- return model.QueryToOrInSearch(c.ctx, tx, keys...)
- })
- return c
- }
- func (c *Ctx[T]) result() (*gorm.DB, bool) {
- for _, v := range c.preloads {
- t := v
- c.GormScope(func(tx *gorm.DB) *gorm.DB {
- tx = tx.Preload(t)
- return tx
- })
- }
- c.beforeExecuteHook()
- var dbModel T
- result := model.UseDB()
- if c.ctx.Query("trash") == "true" {
- stmt := &gorm.Statement{DB: model.UseDB()}
- err := stmt.Parse(&dbModel)
- if err != nil {
- logger.Error(err)
- return nil, false
- }
- result = result.Unscoped().Where(stmt.Schema.Table + ".deleted_at IS NOT NULL")
- }
- result = result.Model(&dbModel)
- if len(c.gormScopes) > 0 {
- result = result.Scopes(c.gormScopes...)
- }
- return result, true
- }
- func (c *Ctx[T]) ListAllData() ([]*T, bool) {
- result, ok := c.result()
- if !ok {
- return nil, false
- }
- result = result.Scopes(model.SortOrder(c.ctx))
- models := make([]*T, 0)
- result.Find(&models)
- return models, true
- }
- func (c *Ctx[T]) PagingListData() (*model.DataList, bool) {
- result, ok := c.result()
- if !ok {
- return nil, false
- }
- result = result.Scopes(model.OrderAndPaginate(c.ctx))
- data := &model.DataList{}
- if c.scan == nil {
- models := make([]*T, 0)
- result.Find(&models)
- if c.transformer != nil {
- transformed := make([]any, 0)
- for k := range models {
- transformed = append(transformed, c.transformer(models[k]))
- }
- data.Data = transformed
- } else {
- data.Data = models
- }
- } else {
- data.Data = c.scan(result)
- }
- page := cast.ToInt(c.ctx.Query("page"))
- if page == 0 {
- page = 1
- }
- pageSize := settings.AppSettings.PageSize
- if reqPageSize := c.ctx.Query("page_size"); reqPageSize != "" {
- pageSize = cast.ToInt(reqPageSize)
- }
- var totalRecords int64
- result.Session(&gorm.Session{}).Count(&totalRecords)
- data.Pagination = model.Pagination{
- Total: totalRecords,
- PerPage: pageSize,
- CurrentPage: page,
- TotalPages: model.TotalPage(totalRecords, pageSize),
- }
- return data, true
- }
- func (c *Ctx[T]) PagingList() {
- data, ok := c.PagingListData()
- if ok {
- c.ctx.JSON(http.StatusOK, data)
- }
- }
|