using System.Collections.Concurrent;
using Hc900Crawler.Core.Application.Feedforward;
namespace Hc900Crawler.Infrastructure.Control;
/// 작업 B: 컬럼별 활성 FEED 램프 작업 인메모리 저장소(싱글턴).
public sealed class FeedRampJobStore : IFeedRampJobStore
{
private readonly ConcurrentDictionary _jobs = new();
public FeedRampJob Start(int columnId, double targetFeed, string op, bool dryRun)
{
var job = new FeedRampJob
{
ColumnId = columnId,
TargetFeed = targetFeed,
State = FeedRampState.Ramping,
StartedAt = DateTime.UtcNow,
Operator = op,
DryRun = dryRun
};
_jobs[columnId] = job;
return job;
}
public FeedRampJob? Get(int columnId) => _jobs.TryGetValue(columnId, out var j) ? j : null;
public IReadOnlyCollection GetAll() => _jobs.Values.ToArray();
public void Update(FeedRampJob job) => _jobs[job.ColumnId] = job;
public bool Cancel(int columnId)
{
if (!_jobs.TryGetValue(columnId, out var j)) return false;
_jobs[columnId] = j with { State = FeedRampState.Canceled };
return true;
}
}