Files
tp/main_dc/yalarba/api_es/internal/models/user.go
T
2025-11-12 04:41:30 +05:00

69 lines
2.8 KiB
Go

package models
import (
"gorm.io/gorm"
"time"
)
type User struct {
ID uint `gorm:"primaryKey" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
// Основная информация
Email string `gorm:"uniqueIndex;not null" json:"email"`
PasswordHash string `gorm:"not null" json:"-"`
FullName string `gorm:"not null" json:"full_name"`
FirstName string `gorm:"not null" json:"first_name"`
LastName string `gorm:"not null" json:"last_name"`
Phone string `json:"phone"`
City string `json:"city"`
// Бизнес информация (для владельцев объектов)
OrganizationForm string `json:"organization_form"` // ИП, ООО и т.д.
OrganizationName string `json:"organization_name"`
OrganizationShort string `json:"organization_short"`
INN string `json:"inn"` // ИНН организации
PersonalINN string `json:"personal_inn"` // Личный ИНН
// Статус
IsActive bool `gorm:"default:true" json:"is_active"`
IsVerified bool `gorm:"default:false" json:"is_verified"`
Role string `gorm:"default:user" json:"role"` // user, admin, moderator
// Связи
Objects []Object `gorm:"foreignKey:OwnerID" json:"-"`
Reviews []Review `gorm:"foreignKey:AuthorID" json:"-"`
}
// UserStats представляет статистику пользователя
type UserStats struct {
UserID uint `gorm:"primaryKey" json:"user_id"`
TotalObjects int `gorm:"default:0" json:"total_objects"`
ActiveObjects int `gorm:"default:0" json:"active_objects"`
ModerationObjects int `gorm:"default:0" json:"moderation_objects"`
TotalReviews int `gorm:"default:0" json:"total_reviews"`
}
// UserResponse - структура для ответа API (без чувствительных данных)
type UserResponse struct {
ID uint `json:"id"`
Email string `json:"email"`
FullName string `json:"full_name"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Phone string `json:"phone"`
City string `json:"city"`
OrganizationForm string `json:"organization_form"`
OrganizationName string `json:"organization_name"`
OrganizationShort string `json:"organization_short"`
INN string `json:"inn"`
PersonalINN string `json:"personal_inn"`
IsActive bool `json:"is_active"`
IsVerified bool `json:"is_verified"`
Role string `json:"role"`
CreatedAt time.Time `json:"created_at"`
Stats UserStats `json:"stats,omitempty"`
}