mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Working on issues
This commit is contained in:
		
							
								
								
									
										123
									
								
								models/issue.go
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								models/issue.go
									
									
									
									
									
								
							| @@ -4,16 +4,127 @@ | ||||
|  | ||||
| package models | ||||
|  | ||||
| import ( | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/gogits/gogs/modules/base" | ||||
| ) | ||||
|  | ||||
| // Issue represents an issue or pull request of repository. | ||||
| type Issue struct { | ||||
| 	Id       int64 | ||||
| 	RepoId   int64 `xorm:"index"` | ||||
| 	PosterId int64 | ||||
| 	Id          int64 | ||||
| 	Index       int64 // Index in one repository. | ||||
| 	Name        string | ||||
| 	RepoId      int64 `xorm:"index"` | ||||
| 	PosterId    int64 | ||||
| 	MilestoneId int64 | ||||
| 	AssigneeId  int64 | ||||
| 	IsPull      bool // Indicates whether is a pull request or not. | ||||
| 	IsClosed    bool | ||||
| 	Labels      string | ||||
| 	Mentions    string | ||||
| 	Content     string | ||||
| 	NumComments int | ||||
| 	Created     time.Time `xorm:"created"` | ||||
| 	Updated     time.Time `xorm:"updated"` | ||||
| } | ||||
|  | ||||
| type PullRequest struct { | ||||
| 	Id int64 | ||||
| // CreateIssue creates new issue for repository. | ||||
| func CreateIssue(userId, repoId, milestoneId, assigneeId int64, name, labels, mentions, content string, isPull bool) error { | ||||
| 	count, err := GetIssueCount(repoId) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	_, err = orm.Insert(&Issue{ | ||||
| 		Index:       count + 1, | ||||
| 		Name:        name, | ||||
| 		RepoId:      repoId, | ||||
| 		PosterId:    userId, | ||||
| 		MilestoneId: milestoneId, | ||||
| 		AssigneeId:  assigneeId, | ||||
| 		IsPull:      isPull, | ||||
| 		Labels:      labels, | ||||
| 		Mentions:    mentions, | ||||
| 		Content:     content, | ||||
| 	}) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // GetIssueCount returns count of issues in the repository. | ||||
| func GetIssueCount(repoId int64) (int64, error) { | ||||
| 	return orm.Count(&Issue{RepoId: repoId}) | ||||
| } | ||||
|  | ||||
| // GetIssues returns a list of issues by given conditions. | ||||
| func GetIssues(userId, repoId, posterId, milestoneId int64, page int, isClosed, isMention bool, labels, sortType string) ([]Issue, error) { | ||||
| 	sess := orm.Limit(20, (page-1)*20).Where("repo_id=?", repoId).And("is_closed=?", isClosed) | ||||
| 	if userId > 0 { | ||||
| 		sess = sess.And("assignee_id=?", userId) | ||||
| 	} else if posterId > 0 { | ||||
| 		sess = sess.And("poster_id=?", posterId) | ||||
| 	} else if isMention { | ||||
| 		sess = sess.And("mentions like '%$" + base.ToStr(userId) + "|%'") | ||||
| 	} | ||||
|  | ||||
| 	if milestoneId > 0 { | ||||
| 		sess = sess.And("milestone_id=?", milestoneId) | ||||
| 	} | ||||
|  | ||||
| 	if len(labels) > 0 { | ||||
| 		for _, label := range strings.Split(labels, ",") { | ||||
| 			sess = sess.And("mentions like '%$" + label + "|%'") | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	switch sortType { | ||||
| 	case "oldest": | ||||
| 		sess = sess.Asc("created") | ||||
| 	case "recentupdate": | ||||
| 		sess = sess.Desc("updated") | ||||
| 	case "leastupdate": | ||||
| 		sess = sess.Asc("updated") | ||||
| 	case "mostcomment": | ||||
| 		sess = sess.Desc("num_comments") | ||||
| 	case "leastcomment": | ||||
| 		sess = sess.Asc("num_comments") | ||||
| 	default: | ||||
| 		sess = sess.Desc("created") | ||||
| 	} | ||||
|  | ||||
| 	var issues []Issue | ||||
| 	err := sess.Find(&issues) | ||||
| 	return issues, err | ||||
| } | ||||
|  | ||||
| // Label represents a list of labels of repository for issues. | ||||
| type Label struct { | ||||
| 	Id     int64 | ||||
| 	RepoId int64 `xorm:"index"` | ||||
| 	Names  string | ||||
| 	Colors string | ||||
| } | ||||
|  | ||||
| // Milestone represents a milestone of repository. | ||||
| type Milestone struct { | ||||
| 	Id        int64 | ||||
| 	Name      string | ||||
| 	RepoId    int64 `xorm:"index"` | ||||
| 	IsClosed  bool | ||||
| 	Content   string | ||||
| 	NumIssues int | ||||
| 	DueDate   time.Time | ||||
| 	Created   time.Time `xorm:"created"` | ||||
| } | ||||
|  | ||||
| // Comment represents a comment in commit and issue page. | ||||
| type Comment struct { | ||||
| 	Id int64 | ||||
| 	Id       int64 | ||||
| 	PosterId int64 | ||||
| 	IssueId  int64 | ||||
| 	CommitId int64 | ||||
| 	Line     int | ||||
| 	Content  string | ||||
| 	Created  time.Time `xorm:"created"` | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user