Files
gitpm/internal/models/user.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

96 lines
2.3 KiB
Go

package models
import (
"time"
"gorm.io/gorm"
)
type User struct {
ID uint `json:"id" gorm:"primaryKey"`
GiteaUserID *uint `json:"gitea_user_id" gorm:"uniqueIndex"`
Username string `json:"username" gorm:"unique;not null"`
Email string `json:"email" gorm:"not null"`
FullName string `json:"full_name"`
AvatarURL string `json:"avatar_url"`
Role string `json:"role" gorm:"default:'developer'"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type UserRole string
const (
RoleAdmin UserRole = "admin"
RoleManager UserRole = "manager"
RoleDeveloper UserRole = "developer"
RoleTester UserRole = "tester"
RoleViewer UserRole = "viewer"
)
func (u *User) BeforeCreate(tx *gorm.DB) error {
return nil
}
func (u *User) GetOwnedProjects() ([]Project, error) {
var projects []Project
err := DB.Where("owner_id = ?", u.ID).Find(&projects).Error
return projects, err
}
func (u *User) GetJoinedProjects() ([]Project, error) {
var projects []Project
err := DB.Joins("JOIN project_members ON projects.id = project_members.project_id").
Where("project_members.user_id = ?", u.ID).
Find(&projects).Error
return projects, err
}
func (u *User) GetAssignedTasks() ([]Task, error) {
var tasks []Task
err := DB.Where("assignee_id = ?", u.ID).Find(&tasks).Error
return tasks, err
}
func CreateUser(user *User) error {
return DB.Create(user).Error
}
func GetUserByID(id uint) (*User, error) {
var user User
err := DB.First(&user, id).Error
return &user, err
}
func GetUserByUsername(username string) (*User, error) {
var user User
err := DB.Where("username = ?", username).First(&user).Error
return &user, err
}
func GetUserByGiteaID(giteaUserID uint) (*User, error) {
var user User
err := DB.Where("gitea_user_id = ?", giteaUserID).First(&user).Error
return &user, err
}
func UpdateUser(user *User) error {
return DB.Save(user).Error
}
func DeleteUser(id uint) error {
return DB.Delete(&User{}, id).Error
}
func ListUsers(offset, limit int) ([]User, int64, error) {
var users []User
var total int64
err := DB.Model(&User{}).Count(&total).Error
if err != nil {
return nil, 0, err
}
err = DB.Offset(offset).Limit(limit).Find(&users).Error
return users, total, err
}