Files
gitpm/internal/models/gitea.go
huxunan 885fad6c64 Initial commit: Gitea Project Management System
Features:
- Complete project management system with Epic/Story/Task hierarchy
- Vue.js 3 + Element Plus frontend with kanban board
- Go backend with Gin framework and GORM
- OAuth2 integration with Gitea
- Docker containerization with MySQL
- RESTful API for project, task, and user management
- JWT authentication and authorization
- Responsive web interface with dashboard
2025-09-22 14:53:53 +08:00

88 lines
2.8 KiB
Go

package models
import (
"time"
)
type GiteaRelation struct {
ID uint `json:"id" gorm:"primaryKey"`
TaskID uint `json:"task_id"`
GiteaRepoID uint `json:"gitea_repo_id"`
GiteaRepoName string `json:"gitea_repo_name"`
RelationType string `json:"relation_type" gorm:"type:varchar(50)"`
GiteaObjectID string `json:"gitea_object_id" gorm:"type:varchar(255)"`
GiteaObjectNumber *uint `json:"gitea_object_number"`
GiteaObjectTitle string `json:"gitea_object_title"`
GiteaObjectURL string `json:"gitea_object_url"`
Task Task `json:"task" gorm:"foreignKey:TaskID"`
CreatedAt time.Time `json:"created_at"`
}
type GiteaRelationType string
const (
RelationTypeBranch GiteaRelationType = "branch"
RelationTypeCommit GiteaRelationType = "commit"
RelationTypePullRequest GiteaRelationType = "pull_request"
RelationTypeIssue GiteaRelationType = "issue"
)
type WebhookConfig struct {
ID uint `json:"id" gorm:"primaryKey"`
ProjectID uint `json:"project_id"`
GiteaRepoID uint `json:"gitea_repo_id"`
GiteaRepoName string `json:"gitea_repo_name"`
WebhookURL string `json:"webhook_url"`
Secret string `json:"secret"`
Events string `json:"events"` // JSON string
Active bool `json:"active" gorm:"default:true"`
Project Project `json:"project" gorm:"foreignKey:ProjectID"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
func CreateGiteaRelation(relation *GiteaRelation) error {
return DB.Create(relation).Error
}
func GetGiteaRelationsByTask(taskID uint) ([]GiteaRelation, error) {
var relations []GiteaRelation
err := DB.Where("task_id = ?", taskID).Find(&relations).Error
return relations, err
}
func GetGiteaRelationsByRepo(repoID uint, relationType string) ([]GiteaRelation, error) {
var relations []GiteaRelation
query := DB.Where("gitea_repo_id = ?", repoID)
if relationType != "" {
query = query.Where("relation_type = ?", relationType)
}
err := query.Preload("Task").Find(&relations).Error
return relations, err
}
func UpdateGiteaRelation(relation *GiteaRelation) error {
return DB.Save(relation).Error
}
func DeleteGiteaRelation(id uint) error {
return DB.Delete(&GiteaRelation{}, id).Error
}
func CreateWebhookConfig(config *WebhookConfig) error {
return DB.Create(config).Error
}
func GetWebhookConfigByRepo(repoID uint) (*WebhookConfig, error) {
var config WebhookConfig
err := DB.Where("gitea_repo_id = ?", repoID).First(&config).Error
return &config, err
}
func UpdateWebhookConfig(config *WebhookConfig) error {
return DB.Save(config).Error
}
func DeleteWebhookConfig(id uint) error {
return DB.Delete(&WebhookConfig{}, id).Error
}