Files
cloud-services/pkg/db/queries/issues.go

102 lines
2.3 KiB
Go

package queries
import (
"fmt"
"fiskerinc.com/modules/common"
"fiskerinc.com/modules/validator"
"github.com/go-pg/pg/v10/orm"
"github.com/pkg/errors"
)
type IssuesInterface interface {
Insert(issue *common.Issue) (orm.Result, error)
Delete(id int) (orm.Result, error)
SelectByID(id int) (*common.Issue, error)
Search(filter *common.IssueSearch, paging *PageQueryOptions) ([]common.Issue, error)
Count() (int, error)
}
type Issues struct {
QueryBase
}
func (c *Issues) load(query *orm.Query) error {
err := query.Relation("IssueImages").Select()
return errors.WithStack(err)
}
func (c *Issues) Insert(issue *common.Issue) (orm.Result, error) {
return c.insert(issue)
}
func (c *Issues) Search(filter *common.IssueSearch, paging *PageQueryOptions) ([]common.Issue, error) {
issues := []common.Issue{}
query := c.GetDBConn().Model(&issues)
c.searchFilter(query, filter)
c.pageQuery(query, paging)
err := query.Select()
return issues, errors.WithStack(err)
}
func (c *Issues) SelectByID(id int) (*common.Issue, error) {
if id <= 0 {
return nil, &validator.FieldError{
ErrorMsg: "id cannot be less than 0",
}
}
issue := common.Issue{}
query := c.GetDBConn().Model(&issue)
query.Where("issue.id = ?", id)
err := c.load(query)
return &issue, err
}
func (c *Issues) Delete(id int) (orm.Result, error) {
if id <= 0 {
return nil, &validator.FieldError{
ErrorMsg: "id has to be a positive integer",
}
}
total := ORMResults{}
issueImage := common.IssueImage{}
issueImagesQuery := c.GetDBConn().Model(&issueImage)
res, err := issueImagesQuery.Where("issue_id = ?", id).Delete()
if err != nil {
return nil, errors.WithStack(err)
}
total.AddResult(res)
issue := common.Issue{}
query := c.GetDBConn().Model(&issue)
res, err = query.Where("issue.id = ?", id).Delete()
if err != nil {
return nil, errors.WithStack(err)
}
total.AddResult(res)
return &total, nil
}
func (c *Issues) Count() (int, error) {
issue := common.Issue{}
query := c.GetDBConn().Model(&issue)
return c.countWithStack(query.Count())
}
func (c *Issues) searchFilter(query *orm.Query, filter *common.IssueSearch) {
if filter.Search != "" {
query.Where("vin ILIKE ? OR title ILIKE ? OR driver_id ILIKE ?", fmt.Sprintf("%%%s%%", filter.Search), fmt.Sprintf("%%%s%%", filter.Search), fmt.Sprintf("%%%s%%", filter.Search))
}
}