package models import ( "time" ) // User represents the user account model type User struct { ID string `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"` Username string `gorm:"uniqueIndex;not null;size:50" json:"username"` Email *string `gorm:"uniqueIndex;size:100" json:"email,omitempty"` PhoneNumber *string `gorm:"uniqueIndex;size:20" json:"phoneNumber,omitempty"` PasswordHash string `gorm:"column:password_hash;not null" json:"-"` AvatarURL *string `gorm:"size:500" json:"avatarURL,omitempty"` RegisteredAt time.Time `gorm:"autoCreateTime" json:"registeredAt"` UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updatedAt"` } // RegisterRequest DTO type RegisterRequest struct { Username string `json:"username" binding:"required,min=2"` Identifier string `json:"identifier" binding:"required"` // email or phone Password string `json:"password" binding:"required,min=6"` } // LoginRequest DTO type LoginRequest struct { Identifier string `json:"identifier" binding:"required"` Password string `json:"password" binding:"required"` } // UpdateProfileRequest DTO type UpdateProfileRequest struct { Username *string `json:"username,omitempty"` Email *string `json:"email,omitempty"` PhoneNumber *string `json:"phoneNumber,omitempty"` AvatarURL *string `json:"avatarURL,omitempty"` } // ChangePasswordRequest DTO type ChangePasswordRequest struct { OldPassword string `json:"oldPassword" binding:"required"` NewPassword string `json:"newPassword" binding:"required,min=6"` } // AuthResponse DTO type AuthResponse struct { User User `json:"user"` Token string `json:"token"` } // ErrorResponse DTO type ErrorResponse struct { Code int `json:"code"` Message string `json:"message"` }