using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Timeline.Entities;
namespace Timeline.Services.User.RegisterCode
{
public interface IRegisterCodeService
{
///
/// Get the owner of a register code or null if the code does not exist or is not enabled.
///
/// The register code.
/// If true, only when code is enabled the owner id is returned.
/// A task contains the owner of the register code. Null of the code does not exist or is not enabled.
Task GetCodeOwnerAsync(string code, bool onlyEnabled = true);
///
/// Get the current enabled register code of the user or null if there is none.
///
/// The user id.
/// A task contains current enabled register code or null if there is none.
Task GetCurrentCodeAsync(long userId);
///
/// Create a new register code for a user, enable it and disable the previous one if there is a previous one.
///
/// The user id.
/// A task contains the new register code.
Task CreateNewCodeAsync(long userId);
///
/// Record a register info for a user.
///
/// The newly-registered user.
/// The register code.
/// The register time.
/// The created register info.
Task CreateRegisterInfoAsync(long userId, string registerCode, DateTime registerTime);
///
/// Get register info of a user if there is one.
///
/// The user id.
/// The user register info if there is one. Or null if there is not.
Task GetUserRegisterInfoAsync(long userId);
///
/// Get the list of user register info of the specified introducer.
///
///
/// The list of user register info.
Task> GetUserRegisterInfoOfIntroducerAsync(long introducerId);
}
}