Files
terminal/server/repository/database_asset.go
T

145 lines
3.2 KiB
Go

package repository
import (
"context"
"strings"
"next-terminal/server/model"
)
var DatabaseAssetRepository = new(databaseAssetRepository)
type databaseAssetRepository struct {
baseRepository
}
func (r databaseAssetRepository) FindAll(c context.Context) (o []model.DatabaseAsset, err error) {
err = r.GetDB(c).Order("name asc").Find(&o).Error
return
}
func (r databaseAssetRepository) FindByType(c context.Context, dbType string) (o []model.DatabaseAsset, err error) {
db := r.GetDB(c)
if dbType != "" {
db = db.Where("type = ?", dbType)
}
err = db.Order("name asc").Find(&o).Error
return
}
func (r databaseAssetRepository) Find(c context.Context, pageIndex, pageSize int, name, dbType, order, field string) (o []model.DatabaseAsset, total int64, err error) {
db := r.GetDB(c).Model(&model.DatabaseAsset{})
if len(name) > 0 {
db = db.Where("name like ?", "%"+name+"%")
}
if len(dbType) > 0 {
db = db.Where("type = ?", dbType)
}
err = db.Count(&total).Error
if err != nil {
return
}
if order == "" {
order = "asc"
}
if field == "" {
field = "name"
}
orderBy := field + " " + order
if field == "created" {
orderBy = "created " + order
}
err = db.Order(orderBy).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
return
}
func (r databaseAssetRepository) FindById(c context.Context, id string) (o model.DatabaseAsset, err error) {
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
return
}
func (r databaseAssetRepository) Create(c context.Context, o *model.DatabaseAsset) error {
return r.GetDB(c).Create(o).Error
}
func (r databaseAssetRepository) UpdateById(c context.Context, o *model.DatabaseAsset) error {
return r.GetDB(c).Updates(o).Error
}
func (r databaseAssetRepository) DeleteById(c context.Context, id string) error {
return r.GetDB(c).Where("id = ?", id).Delete(&model.DatabaseAsset{}).Error
}
func (r databaseAssetRepository) Count(c context.Context) (total int64, err error) {
err = r.GetDB(c).Model(&model.DatabaseAsset{}).Count(&total).Error
return
}
func (r databaseAssetRepository) FindAllTags(c context.Context) (o []string, err error) {
var assets []model.DatabaseAsset
err = r.GetDB(c).Select("tags").Find(&assets).Error
if err != nil {
return
}
tagSet := make(map[string]bool)
for _, asset := range assets {
if asset.Tags == "" {
continue
}
tags := strings.Split(asset.Tags, ",")
for _, tag := range tags {
tag = strings.TrimSpace(tag)
if tag != "" {
tagSet[tag] = true
}
}
}
for tag := range tagSet {
o = append(o, tag)
}
return
}
func (r databaseAssetRepository) ParseTags(tags string) []string {
if tags == "" {
return nil
}
return strings.Split(tags, ",")
}
func (r databaseAssetRepository) FormatTags(tags []string) string {
if len(tags) == 0 {
return ""
}
return strings.Join(tags, ",")
}
func (r databaseAssetRepository) GetDBPort(dbType string) int {
switch dbType {
case "mysql":
return 3306
case "pg":
return 5432
case "sqlserver":
return 1433
case "oracle":
return 1521
default:
return 3306
}
}
func (r databaseAssetRepository) UpdateOwner(c context.Context, ownerId string, newOwnerId string) error {
return r.GetDB(c).Model(&model.DatabaseAsset{}).Where("owner = ?", ownerId).Update("owner", newOwnerId).Error
}