Personal Git forge.

Code git clone ssh://git.poy.ooo:6969/~poyo/farga ZIP
db/issues.go / 1KiB #bcb3e8c1
Raw
package dbimport (	"farga/db/types"	"github.com/google/uuid"	"gorm.io/gorm"	"gorm.io/gorm/clause")// creates an issue in a given repofunc (db *DB) NewIssue(issue *types.Issue) error {	return db.Transaction(func(tx *gorm.DB) error {		var repo types.Repo		// Lock the repo row.		if err := tx.			Clauses(clause.Locking{Strength: "UPDATE"}).			Model(&repo).Where(&types.Repo{UUID_ID: types.UUID_ID{ID: *issue.RepoID}}).			First(&repo).Error; err != nil {			return err		}		issue.IssueID = repo.NextIssueID		repo.NextIssueID++		if err := tx.Save(&repo).Error; err != nil {			return err		}		return tx.Create(issue).Error	})}// closes an issue, only the repo owner may call this.func (db *DB) CloseIssue(issue *types.Issue) error {	return db.Model(issue).Update("status", "closed").Error}func (db *DB) NewIssueComment(comment *types.IssueComment) error {	return db.Create(comment).Error}// gets an issue from a repo, given the issue's ID.func (db *DB) Issue(repo *types.Repo, issueNumber uint) (types.Issue, error) {	var issue types.Issue	err := db.		Where("repo_id = ? AND issue_id = ?", repo.ID, issueNumber).		Preload(clause.Associations).		First(&issue).Error	return issue, err}func (db *DB) IssueComments(issueID uuid.UUID) ([]types.IssueComment, error) {	var comments []types.IssueComment	err :=		db.Preload("User").			Where("issue_id = ?", issueID).			Order("created_at ASC").			Find(&comments).Error	return comments, err}