You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

search_record.go 2.4 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package models
  2. import (
  3. "code.gitea.io/gitea/modules/log"
  4. "code.gitea.io/gitea/modules/timeutil"
  5. "xorm.io/xorm"
  6. )
  7. type SearchRecord struct {
  8. ID int64 `xorm:"pk autoincr"`
  9. //user
  10. Keyword string `xorm:"NOT NULL"`
  11. //
  12. CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
  13. }
  14. func SaveSearchKeywordToDb(keyword string) error {
  15. record := &SearchRecord{
  16. Keyword: keyword,
  17. }
  18. sess := x.NewSession()
  19. defer sess.Close()
  20. _, err := sess.Insert(record)
  21. if err != nil {
  22. log.Info("insert error." + err.Error())
  23. return err
  24. }
  25. return nil
  26. }
  27. func setIssueQueryCondition(sess *xorm.Session, Keyword string, isPull bool, userId int64) {
  28. sess.And("issue.poster_id=?", userId)
  29. sess.And("issue.is_pull=?", isPull)
  30. sess.And("(issue.name like '%" + Keyword + "%' or issue.content like '%" + Keyword + "%')")
  31. sess.Join("INNER", "repository", "issue.repo_id = repository.id").And("repository.is_private = ?", true)
  32. }
  33. func SearchPrivateIssueOrPr(Page int, PageSize int, Keyword string, isPull bool, userId int64) ([]*Issue, int64, error) {
  34. sess := x.NewSession()
  35. defer sess.Close()
  36. setIssueQueryCondition(sess, Keyword, isPull, userId)
  37. count, err := sess.Count(new(Issue))
  38. if err != nil {
  39. return nil, 0, err
  40. }
  41. setIssueQueryCondition(sess, Keyword, isPull, userId)
  42. sess.Desc("issue.created_unix")
  43. sess.Limit(PageSize, (Page-1)*PageSize)
  44. issues := make([]*Issue, 0)
  45. if err := sess.Find(&issues); err != nil {
  46. return nil, 0, err
  47. } else {
  48. return issues, count, nil
  49. }
  50. }
  51. func setDataSetQueryCondition(sess *xorm.Session, Keyword string, userId int64) {
  52. sess.And("dataset.user_id=?", userId)
  53. sess.And("(dataset.title like '%" + Keyword + "%' or dataset.description like '%" + Keyword + "%')")
  54. sess.Join("INNER", "repository", "dataset.repo_id = repository.id").And("repository.is_private = ?", true)
  55. }
  56. func SearchDatasetBySQL(Page int, PageSize int, Keyword string, userId int64) ([]*Dataset, int64, error) {
  57. sess := x.NewSession()
  58. defer sess.Close()
  59. setDataSetQueryCondition(sess, Keyword, userId)
  60. count, err := sess.Count(new(Dataset))
  61. if err != nil {
  62. return nil, 0, err
  63. }
  64. setDataSetQueryCondition(sess, Keyword, userId)
  65. sess.Desc("dataset.created_unix")
  66. sess.Limit(PageSize, (Page-1)*PageSize)
  67. datasets := make([]*Dataset, 0)
  68. if err := sess.Find(&datasets); err != nil {
  69. return nil, 0, err
  70. } else {
  71. return datasets, count, nil
  72. }
  73. }