Files
rmser/internal/domain/account/entity.go
SERTY b4ce819931 добавил пользователей для сервера и роли
добавил инвайт-ссылки с ролью оператор для сервера
добавил супер-админку для смены владельцев
добавил уведомления о смене ролей на серверах
добавил модалку для фото прям в черновике
добавил UI для редактирования прав
2025-12-23 13:06:06 +03:00

118 lines
5.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package account
import (
"time"
"github.com/google/uuid"
)
// Роли пользователей
type Role string
const (
RoleOwner Role = "OWNER" // Создатель: Полный доступ + удаление сервера
RoleAdmin Role = "ADMIN" // Администратор: Редактирование, настройки, приглашение
RoleOperator Role = "OPERATOR" // Оператор: Только загрузка фото
)
// User - Пользователь системы (Telegram аккаунт)
type User struct {
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
TelegramID int64 `gorm:"uniqueIndex;not null" json:"telegram_id"`
Username string `gorm:"type:varchar(100)" json:"username"`
FirstName string `gorm:"type:varchar(100)" json:"first_name"`
LastName string `gorm:"type:varchar(100)" json:"last_name"`
PhotoURL string `gorm:"type:text" json:"photo_url"`
IsSystemAdmin bool `gorm:"default:false" json:"is_system_admin"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// ServerUser - Связь пользователя с сервером (здесь храним личные креды)
type ServerUser struct {
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()"`
ServerID uuid.UUID `gorm:"type:uuid;not null;index:idx_user_server,unique"`
UserID uuid.UUID `gorm:"type:uuid;not null;index:idx_user_server,unique"`
Role Role `gorm:"type:varchar(20);default:'OPERATOR'"`
IsActive bool `gorm:"default:false"` // Выбран ли этот сервер сейчас
// Персональные данные для подключения (могут быть null у операторов)
Login string `gorm:"type:varchar(100)"`
EncryptedPassword string `gorm:"type:text"`
Server RMSServer `gorm:"foreignKey:ServerID"`
User User `gorm:"foreignKey:UserID"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// RMSServer - Инстанс сервера iiko
type RMSServer struct {
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
// Уникальный URL (очищенный), определяет инстанс
BaseURL string `gorm:"type:varchar(255);not null;uniqueIndex" json:"base_url"`
Name string `gorm:"type:varchar(100);not null" json:"name"`
MaxUsers int `gorm:"default:5" json:"max_users"` // Лимит пользователей
// Глобальные настройки сервера (общие для всех)
DefaultStoreID *uuid.UUID `gorm:"type:uuid" json:"default_store_id"`
RootGroupGUID *uuid.UUID `gorm:"type:uuid" json:"root_group_guid"`
AutoProcess bool `gorm:"default:false" json:"auto_process"`
// Billing / Stats
InvoiceCount int `gorm:"default:0" json:"invoice_count"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// Repository интерфейс
type Repository interface {
// Users
GetOrCreateUser(telegramID int64, username, first, last string) (*User, error)
GetUserByTelegramID(telegramID int64) (*User, error)
// ConnectServer - Основной метод подключения.
// Реализует логику: Новый URL -> Owner, Старый URL -> Operator.
ConnectServer(userID uuid.UUID, url, login, encryptedPass, name string) (*RMSServer, error)
SaveServerSettings(server *RMSServer) error
// SetActiveServer переключает активность в таблице ServerUser
SetActiveServer(userID, serverID uuid.UUID) error
// GetActiveServer ищет сервер, где у UserID стоит флаг IsActive=true
GetActiveServer(userID uuid.UUID) (*RMSServer, error)
// GetActiveConnectionCredentials возвращает актуальные логин/пароль для текущего юзера (личные или общие)
GetActiveConnectionCredentials(userID uuid.UUID) (url, login, passHash string, err error)
// GetAllAvailableServers возвращает все серверы, доступные пользователю (в любом статусе)
GetAllAvailableServers(userID uuid.UUID) ([]RMSServer, error)
DeleteServer(serverID uuid.UUID) error
// GetUserRole возвращает роль пользователя на сервере (или ошибку доступа)
GetUserRole(userID, serverID uuid.UUID) (Role, error)
SetUserRole(serverID, targetUserID uuid.UUID, newRole Role) error
GetServerUsers(serverID uuid.UUID) ([]ServerUser, error)
// Invite System
AddUserToServer(serverID, userID uuid.UUID, role Role) error
RemoveUserFromServer(serverID, userID uuid.UUID) error
IncrementInvoiceCount(serverID uuid.UUID) error
// Super Admin Functions
GetAllServersSystemWide() ([]RMSServer, error)
TransferOwnership(serverID, newOwnerID uuid.UUID) error
// GetConnectionByID получает связь ServerUser по её ID (нужно для админки, чтобы сократить callback_data)
GetConnectionByID(id uuid.UUID) (*ServerUser, error)
}