package repository import ( "context" "strconv" "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 } func init() { _ = strconv.Itoa(0) _ = strings.Join(nil, "") }