mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-04 19:02:33 -06:00
добавлен биллинг и тарифы
добавлена интеграция с юкасса
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"rmser/internal/domain/account"
|
||||
|
||||
@@ -60,6 +61,15 @@ func (r *pgRepository) GetUserByTelegramID(telegramID int64) (*account.User, err
|
||||
return &user, nil
|
||||
}
|
||||
|
||||
func (r *pgRepository) GetUserByID(id uuid.UUID) (*account.User, error) {
|
||||
var user account.User
|
||||
err := r.db.Where("id = ?", id).First(&user).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &user, nil
|
||||
}
|
||||
|
||||
// ConnectServer - Основная точка входа для добавления сервера
|
||||
func (r *pgRepository) ConnectServer(userID uuid.UUID, rawURL, login, encryptedPass, name string) (*account.RMSServer, error) {
|
||||
// 1. Нормализация URL (удаляем слеш в конце, приводим к нижнему регистру)
|
||||
@@ -401,3 +411,37 @@ func (r *pgRepository) GetConnectionByID(id uuid.UUID) (*account.ServerUser, err
|
||||
}
|
||||
return &link, nil
|
||||
}
|
||||
|
||||
func (r *pgRepository) GetServerByURL(rawURL string) (*account.RMSServer, error) {
|
||||
cleanURL := strings.TrimRight(strings.ToLower(strings.TrimSpace(rawURL)), "/")
|
||||
var server account.RMSServer
|
||||
err := r.db.Where("base_url = ?", cleanURL).First(&server).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &server, nil
|
||||
}
|
||||
|
||||
func (r *pgRepository) GetServerByID(id uuid.UUID) (*account.RMSServer, error) {
|
||||
var server account.RMSServer
|
||||
err := r.db.First(&server, id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &server, nil
|
||||
}
|
||||
|
||||
// UpdateBalance начисляет пакет или продлевает подписку
|
||||
func (r *pgRepository) UpdateBalance(serverID uuid.UUID, amountChange int, newPaidUntil *time.Time) error {
|
||||
return r.db.Model(&account.RMSServer{}).Where("id = ?", serverID).Updates(map[string]interface{}{
|
||||
"balance": gorm.Expr("balance + ?", amountChange),
|
||||
"paid_until": newPaidUntil,
|
||||
}).Error
|
||||
}
|
||||
|
||||
// DecrementBalance списывает 1 единицу при отправке накладной
|
||||
func (r *pgRepository) DecrementBalance(serverID uuid.UUID) error {
|
||||
return r.db.Model(&account.RMSServer{}).
|
||||
Where("id = ? AND balance > 0", serverID).
|
||||
UpdateColumn("balance", gorm.Expr("balance - ?", 1)).Error
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user