diff options
author | Unknown <joe2010xtmf@163.com> | 2014-03-22 13:50:50 -0400 |
---|---|---|
committer | Unknown <joe2010xtmf@163.com> | 2014-03-22 13:50:50 -0400 |
commit | 61e29226015fad6451281035948c3d8d1364880c (patch) | |
tree | 6ef97e9b24040d880913eb09d3e1b00ea4727e2e /models | |
parent | e3f55ca0fb0c8aee84f2935b76353ef8ce66384f (diff) | |
download | gitea-61e29226015fad6451281035948c3d8d1364880c.tar.gz gitea-61e29226015fad6451281035948c3d8d1364880c.zip |
Working on issues
Diffstat (limited to 'models')
-rw-r--r-- | models/action.go | 1 | ||||
-rw-r--r-- | models/issue.go | 123 | ||||
-rw-r--r-- | models/models.go | 2 |
3 files changed, 118 insertions, 8 deletions
diff --git a/models/action.go b/models/action.go index 4e1107f891..a996e16aa8 100644 --- a/models/action.go +++ b/models/action.go @@ -88,7 +88,6 @@ func CommitRepoAction(userId int64, userName string, return err } repo.IsBare = false - repo.Updated = time.Now() if err = UpdateRepository(repo); err != nil { return err } diff --git a/models/issue.go b/models/issue.go index c669d201f6..0b6ca4c323 100644 --- a/models/issue.go +++ b/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"` +} + +// 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 } -type PullRequest struct { - Id int64 +// 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"` } diff --git a/models/models.go b/models/models.go index 8713ff2896..fb749c5d8a 100644 --- a/models/models.go +++ b/models/models.go @@ -72,7 +72,7 @@ func setEngine() { func NewEngine() { setEngine() if err := orm.Sync(new(User), new(PublicKey), new(Repository), new(Watch), - new(Action), new(Access)); err != nil { + new(Action), new(Access), new(Issue)); err != nil { fmt.Printf("sync database struct error: %v\n", err) os.Exit(2) } |