Newer
Older
VirtualActorAggregate / domain / InvoiceNumberGeneratorGrain.cs
@Derek Comartin Derek Comartin on 15 Dec 2021 901 bytes Init
using Microsoft.Extensions.Logging;
using Orleans;

public interface IInvoiceNumberGeneratorGrain : IGrainWithGuidKey
{
    public Task<int> ReserveInvoiceNumber();
}

public class InvoiceNumberGeneratorGrain : Grain, IInvoiceNumberGeneratorGrain
{
    private readonly ILogger<InvoiceNumberGeneratorGrain> _logger;
    private int _currentInvoiceNumber = 0;

    public InvoiceNumberGeneratorGrain(ILogger<InvoiceNumberGeneratorGrain> logger)
    {
        _logger = logger;
    }

    public override Task OnActivateAsync()
    {
        // Fetch Data from database or use persistence
        return base.OnActivateAsync();
    }

    public Task<int> ReserveInvoiceNumber()
    {
        _logger.LogInformation($"Executing in Grain Tenant: {this.GetPrimaryKey()}, Invoice #: {_currentInvoiceNumber}");

        _currentInvoiceNumber++;
        return Task.FromResult(_currentInvoiceNumber);
    }
}