1Panel/agent/app/repo/website.go
2024-08-21 10:04:51 +00:00

153 lines
4.4 KiB
Go

package repo
import (
"context"
"github.com/1Panel-dev/1Panel/agent/app/model"
"github.com/1Panel-dev/1Panel/agent/global"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type IWebsiteRepo interface {
WithAppInstallId(appInstallId uint) DBOption
WithDomain(domain string) DBOption
WithAlias(alias string) DBOption
WithWebsiteSSLID(sslId uint) DBOption
WithGroupID(groupId uint) DBOption
WithDefaultServer() DBOption
WithDomainLike(domain string) DBOption
WithRuntimeID(runtimeID uint) DBOption
WithParentID(websiteID uint) DBOption
Page(page, size int, opts ...DBOption) (int64, []model.Website, error)
List(opts ...DBOption) ([]model.Website, error)
GetFirst(opts ...DBOption) (model.Website, error)
GetBy(opts ...DBOption) ([]model.Website, error)
Save(ctx context.Context, app *model.Website) error
SaveWithoutCtx(app *model.Website) error
DeleteBy(ctx context.Context, opts ...DBOption) error
Create(ctx context.Context, app *model.Website) error
DeleteAll(ctx context.Context) error
UpdateGroup(group, newGroup uint) error
}
func NewIWebsiteRepo() IWebsiteRepo {
return &WebsiteRepo{}
}
type WebsiteRepo struct {
}
func (w *WebsiteRepo) WithAppInstallId(appInstallID uint) DBOption {
return func(db *gorm.DB) *gorm.DB {
return db.Where("app_install_id = ?", appInstallID)
}
}
func (w *WebsiteRepo) WithRuntimeID(runtimeID uint) DBOption {
return func(db *gorm.DB) *gorm.DB {
return db.Where("runtime_id = ?", runtimeID)
}
}
func (w *WebsiteRepo) WithDomain(domain string) DBOption {
return func(db *gorm.DB) *gorm.DB {
return db.Where("primary_domain = ?", domain)
}
}
func (w *WebsiteRepo) WithDomainLike(domain string) DBOption {
return func(db *gorm.DB) *gorm.DB {
return db.Where("primary_domain like ?", "%"+domain+"%")
}
}
func (w *WebsiteRepo) WithAlias(alias string) DBOption {
return func(db *gorm.DB) *gorm.DB {
return db.Where("alias = ?", alias)
}
}
func (w *WebsiteRepo) WithWebsiteSSLID(sslId uint) DBOption {
return func(db *gorm.DB) *gorm.DB {
return db.Where("website_ssl_id = ?", sslId)
}
}
func (w *WebsiteRepo) WithParentID(websiteID uint) DBOption {
return func(db *gorm.DB) *gorm.DB {
return db.Where("parent_website_id = ?", websiteID)
}
}
func (w *WebsiteRepo) WithGroupID(groupId uint) DBOption {
return func(db *gorm.DB) *gorm.DB {
return db.Where("website_group_id = ?", groupId)
}
}
func (w *WebsiteRepo) WithDefaultServer() DBOption {
return func(db *gorm.DB) *gorm.DB {
return db.Where("default_server = 1")
}
}
func (w *WebsiteRepo) Page(page, size int, opts ...DBOption) (int64, []model.Website, error) {
var websites []model.Website
db := getDb(opts...).Model(&model.Website{})
count := int64(0)
db = db.Count(&count)
err := db.Debug().Limit(size).Offset(size * (page - 1)).Preload("WebsiteSSL").Find(&websites).Error
return count, websites, err
}
func (w *WebsiteRepo) List(opts ...DBOption) ([]model.Website, error) {
var websites []model.Website
err := getDb(opts...).Model(&model.Website{}).Preload("Domains").Preload("WebsiteSSL").Find(&websites).Error
return websites, err
}
func (w *WebsiteRepo) GetFirst(opts ...DBOption) (model.Website, error) {
var website model.Website
db := getDb(opts...).Model(&model.Website{})
if err := db.Preload("Domains").First(&website).Error; err != nil {
return website, err
}
return website, nil
}
func (w *WebsiteRepo) GetBy(opts ...DBOption) ([]model.Website, error) {
var websites []model.Website
db := getDb(opts...).Model(&model.Website{})
if err := db.Find(&websites).Error; err != nil {
return websites, err
}
return websites, nil
}
func (w *WebsiteRepo) Create(ctx context.Context, app *model.Website) error {
return getTx(ctx).Omit(clause.Associations).Create(app).Error
}
func (w *WebsiteRepo) Save(ctx context.Context, app *model.Website) error {
return getTx(ctx).Omit(clause.Associations).Save(app).Error
}
func (w *WebsiteRepo) SaveWithoutCtx(website *model.Website) error {
return global.DB.Save(website).Error
}
func (w *WebsiteRepo) DeleteBy(ctx context.Context, opts ...DBOption) error {
return getTx(ctx, opts...).Delete(&model.Website{}).Error
}
func (w *WebsiteRepo) DeleteAll(ctx context.Context) error {
return getTx(ctx).Where("1 = 1 ").Delete(&model.Website{}).Error
}
func (w *WebsiteRepo) UpdateGroup(group, newGroup uint) error {
return global.DB.Model(&model.Website{}).Where("website_group_id = ?", group).Updates(map[string]interface{}{"website_group_id": newGroup}).Error
}