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
This commit is contained in:
96
internal/models/user.go
Normal file
96
internal/models/user.go
Normal file
@@ -0,0 +1,96 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user