71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package repository
|
|
|
|
import (
|
|
"narasi-ahli-be/app/database"
|
|
"narasi-ahli-be/app/database/entity"
|
|
"narasi-ahli-be/app/module/agent/request"
|
|
)
|
|
|
|
type agentRepository struct {
|
|
DB *database.Database
|
|
}
|
|
|
|
type AgentRepository interface {
|
|
GetAll(req request.AgentQueryRequest) ([]*entity.Agent, error)
|
|
FindById(id uint) (*entity.Agent, error)
|
|
Create(agent *entity.Agent) (*entity.Agent, error)
|
|
Update(id uint, data map[string]interface{}) error
|
|
Delete(id uint) error
|
|
}
|
|
|
|
func NewAgentRepository(db *database.Database) AgentRepository {
|
|
return &agentRepository{DB: db}
|
|
}
|
|
|
|
func (_i *agentRepository) GetAll(req request.AgentQueryRequest) (agents []*entity.Agent, err error) {
|
|
query := _i.DB.DB.Model(&entity.Agent{}).
|
|
Where("is_active = ?", true)
|
|
|
|
if req.Name != "" {
|
|
query = query.Where("name ILIKE ?", "%"+req.Name+"%")
|
|
}
|
|
if req.Type != "" {
|
|
query = query.Where("type = ?", req.Type)
|
|
}
|
|
if req.Status != nil {
|
|
query = query.Where("status = ?", *req.Status)
|
|
}
|
|
|
|
err = query.Order("created_at DESC").Find(&agents).Error
|
|
return
|
|
}
|
|
|
|
func (_i *agentRepository) FindById(id uint) (*entity.Agent, error) {
|
|
var agent entity.Agent
|
|
err := _i.DB.DB.Where("id = ? AND is_active = ?", id, true).
|
|
First(&agent).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &agent, nil
|
|
}
|
|
|
|
func (_i *agentRepository) Create(agent *entity.Agent) (*entity.Agent, error) {
|
|
if err := _i.DB.DB.Create(agent).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return agent, nil
|
|
}
|
|
|
|
func (_i *agentRepository) Update(id uint, data map[string]interface{}) error {
|
|
return _i.DB.DB.Model(&entity.Agent{}).
|
|
Where("id = ?", id).
|
|
Updates(data).Error
|
|
}
|
|
|
|
func (_i *agentRepository) Delete(id uint) error {
|
|
return _i.DB.DB.Model(&entity.Agent{}).
|
|
Where("id = ?", id).
|
|
Update("is_active", false).Error
|
|
}
|