Exemplo n.º 1
0
func (as *ArticleService) Read(v interface{}) (*Result, error) {
	opt, ok := v.(ArticleReadOption)
	if !ok {
		return nil, ErrServiceFuncNeedType(as.Read, opt)
	}
	whereStr, whereArgs := opt.toWhereString()
	a := new(model.Article)
	if _, err := core.Db.Where(whereStr, whereArgs...).Get(a); err != nil {
		return nil, err
	}
	if a.Id == 0 {
		return nil, ErrArticleNotFound
	}
	if opt.IsPublish && !a.IsPublish() {
		return nil, ErrArticleNotFound
	}
	if opt.IsHit {
		if _, err := core.Db.Exec("UPDATE article SET hits = hits + 1 WHERE id = ?", a.Id); err != nil {
			return nil, err
		}
	}
	return newResult(as.Read, a), nil
}