(keyword string, group string, model string, idSort bool)
| 262 | } |
| 263 | |
| 264 | func SearchChannels(keyword string, group string, model string, idSort bool) ([]*Channel, error) { |
| 265 | var channels []*Channel |
| 266 | modelsCol := "`models`" |
| 267 | |
| 268 | // 如果是 PostgreSQL,使用双引号 |
| 269 | if common.UsingPostgreSQL { |
| 270 | modelsCol = `"models"` |
| 271 | } |
| 272 | |
| 273 | baseURLCol := "`base_url`" |
| 274 | // 如果是 PostgreSQL,使用双引号 |
| 275 | if common.UsingPostgreSQL { |
| 276 | baseURLCol = `"base_url"` |
| 277 | } |
| 278 | |
| 279 | order := "priority desc" |
| 280 | if idSort { |
| 281 | order = "id desc" |
| 282 | } |
| 283 | |
| 284 | // 构造基础查询 |
| 285 | baseQuery := DB.Model(&Channel{}).Omit("key") |
| 286 | |
| 287 | // 构造WHERE子句 |
| 288 | var whereClause string |
| 289 | var args []interface{} |
| 290 | if group != "" && group != "null" { |
| 291 | var groupCondition string |
| 292 | if common.UsingMySQL { |
| 293 | groupCondition = `CONCAT(',', ` + commonGroupCol + `, ',') LIKE ?` |
| 294 | } else { |
| 295 | // sqlite, PostgreSQL |
| 296 | groupCondition = `(',' || ` + commonGroupCol + ` || ',') LIKE ?` |
| 297 | } |
| 298 | whereClause = "(id = ? OR name LIKE ? OR " + commonKeyCol + " = ? OR " + baseURLCol + " LIKE ?) AND " + modelsCol + ` LIKE ? AND ` + groupCondition |
| 299 | args = append(args, common.String2Int(keyword), "%"+keyword+"%", keyword, "%"+keyword+"%", "%"+model+"%", "%,"+group+",%") |
| 300 | } else { |
| 301 | whereClause = "(id = ? OR name LIKE ? OR " + commonKeyCol + " = ? OR " + baseURLCol + " LIKE ?) AND " + modelsCol + " LIKE ?" |
| 302 | args = append(args, common.String2Int(keyword), "%"+keyword+"%", keyword, "%"+keyword+"%", "%"+model+"%") |
| 303 | } |
| 304 | |
| 305 | // 执行查询 |
| 306 | err := baseQuery.Where(whereClause, args...).Order(order).Find(&channels).Error |
| 307 | if err != nil { |
| 308 | return nil, err |
| 309 | } |
| 310 | return channels, nil |
| 311 | } |
| 312 | |
| 313 | func GetChannelById(id int, selectAll bool) (*Channel, error) { |
| 314 | channel := &Channel{Id: id} |
no test coverage detected