using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Strings;
namespace Umbraco.Cms.Web.Website.Models;
///
/// Builds a for use on the front-end
///
public class RegisterModelBuilder : MemberModelBuilderBase
{
private bool _lookupProperties;
private string? _memberTypeAlias;
private string? _redirectUrl;
private bool _usernameIsEmail;
private bool _automaticLogIn = true;
public RegisterModelBuilder(IMemberTypeService memberTypeService, IShortStringHelper shortStringHelper)
: base(memberTypeService, shortStringHelper)
{
}
public RegisterModelBuilder WithRedirectUrl(string? redirectUrl)
{
_redirectUrl = redirectUrl;
return this;
}
public RegisterModelBuilder UsernameIsEmail(bool usernameIsEmail = true)
{
_usernameIsEmail = usernameIsEmail;
return this;
}
public RegisterModelBuilder WithMemberTypeAlias(string memberTypeAlias)
{
_memberTypeAlias = memberTypeAlias;
return this;
}
public RegisterModelBuilder WithCustomProperties(bool lookupProperties)
{
_lookupProperties = lookupProperties;
return this;
}
public RegisterModelBuilder WithAutomaticLogIn(bool automaticLogIn = true)
{
_automaticLogIn = automaticLogIn;
return this;
}
public RegisterModel Build()
{
var providedOrDefaultMemberTypeAlias = _memberTypeAlias ?? Constants.Conventions.MemberTypes.DefaultAlias;
IMemberType? memberType = MemberTypeService.Get(providedOrDefaultMemberTypeAlias);
if (memberType == null)
{
throw new InvalidOperationException(
$"Could not find a member type with alias: {providedOrDefaultMemberTypeAlias}.");
}
var model = new RegisterModel
{
RedirectUrl = _redirectUrl,
MemberTypeAlias = providedOrDefaultMemberTypeAlias,
UsernameIsEmail = _usernameIsEmail,
MemberProperties = _lookupProperties
? GetMemberPropertiesViewModel(memberType)
: Enumerable.Empty().ToList(),
AutomaticLogIn = _automaticLogIn
};
return model;
}
}