using AssetManager.Data; using AssetManager.Models.DTOs; using SqlSugar; namespace AssetManager.Services; public interface IStrategyService { Strategy CreateStrategy(CreateStrategyRequest request, string userId); List GetStrategies(string userId); Strategy GetStrategyById(string id, string userId); Strategy UpdateStrategy(string id, UpdateStrategyRequest request, string userId); bool DeleteStrategy(string id, string userId); } public class StrategyService : IStrategyService { private readonly ISqlSugarClient _db; public StrategyService(ISqlSugarClient db) { _db = db; } public Strategy CreateStrategy(CreateStrategyRequest request, string userId) { var strategy = new Strategy { Id = Guid.NewGuid().ToString(), UserId = userId, Alias = request.name, Type = request.type, Config = System.Text.Json.JsonSerializer.Serialize(request.parameters), CreatedAt = DateTime.Now, UpdatedAt = DateTime.Now }; _db.Insertable(strategy).ExecuteCommand(); return strategy; } public List GetStrategies(string userId) { return _db.Queryable() .Where(it => it.UserId == userId) .ToList(); } public Strategy GetStrategyById(string id, string userId) { var strategy = _db.Queryable() .Where(it => it.Id == id && it.UserId == userId) .First(); if (strategy == null) { throw new Exception("Strategy not found or access denied"); } return strategy; } public Strategy UpdateStrategy(string id, UpdateStrategyRequest request, string userId) { var strategy = GetStrategyById(id, userId); strategy.Alias = request.name; strategy.Type = request.type; strategy.Config = System.Text.Json.JsonSerializer.Serialize(request.parameters); strategy.UpdatedAt = DateTime.Now; _db.Updateable(strategy).ExecuteCommand(); return strategy; } public bool DeleteStrategy(string id, string userId) { var strategy = GetStrategyById(id, userId); return _db.Deleteable(strategy).ExecuteCommand() > 0; } }