package repository import ( "u-desk/internal/storage" "u-desk/internal/storage/models" "gorm.io/gorm" ) type ConnectionRepository interface { Save(conn *models.DbConnection) error FindAll() ([]models.DbConnection, error) FindByID(id uint) (*models.DbConnection, error) Delete(id uint) error FindByName(name string, excludeID uint) (*models.DbConnection, error) } type connectionRepository struct { db *gorm.DB } func NewConnectionRepository() (ConnectionRepository, error) { db := storage.GetDB() if db == nil { var err error db, err = storage.Init() if err != nil { return nil, err } } return &connectionRepository{db}, nil } func (r *connectionRepository) Save(conn *models.DbConnection) error { if conn.ID > 0 { return r.db.Model(&models.DbConnection{}).Where("id = ?", conn.ID).Updates(conn).Error } return r.db.Create(conn).Error } func (r *connectionRepository) FindAll() ([]models.DbConnection, error) { var connections []models.DbConnection return connections, r.db.Order("created_at DESC").Find(&connections).Error } func (r *connectionRepository) FindByID(id uint) (*models.DbConnection, error) { var conn models.DbConnection err := r.db.First(&conn, id).Error if err == gorm.ErrRecordNotFound { return nil, nil } return &conn, err } func (r *connectionRepository) Delete(id uint) error { return r.db.Delete(&models.DbConnection{}, id).Error } func (r *connectionRepository) FindByName(name string, excludeID uint) (*models.DbConnection, error) { var conn models.DbConnection query := r.db.Where("name = ?", name) if excludeID > 0 { query = query.Where("id != ?", excludeID) } err := query.First(&conn).Error if err == gorm.ErrRecordNotFound { return nil, nil } return &conn, err }