using DigitalData.UserManager.Domain.Entities;
using DigitalData.Core.Abstractions.Application;
using DigitalData.UserManager.Application.DTOs.User;
using DigitalData.UserManager.Application.DTOs.Base;

namespace DigitalData.UserManager.Application.Contracts
{
    public interface IBaseService<TCreateDto, TReadDto, TUpdateDto, TBaseEntity> : ICRUDService<TCreateDto, TReadDto, TUpdateDto, TBaseEntity, int>
        where TCreateDto : BaseCreateDto
        where TReadDto : class
        where TUpdateDto : BaseUpdateDto
        where TBaseEntity : BaseEntity
    {

        public Func<Task<UserReadDto?>> UserFactoryAsync { set; }

        public Task<UserReadDto?> GetUserAsync();
    }        
}