71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
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
|
|
}
|