private static Validation <BaseError, Parameters> ValidateUrl(AddTraktList request) { const string PATTERN = @"(?:https:\/\/trakt\.tv\/users\/)?([\w\-_]+)\/(?:lists\/)?([\w\-_]+)"; Match match = Regex.Match(request.TraktListUrl, PATTERN); if (match.Success) { string user = match.Groups[1].Value; string list = match.Groups[2].Value; return(new Parameters(user, list)); } return(BaseError.New("Invalid Trakt list url")); }
public async Task <Either <BaseError, Unit> > Handle(AddTraktList request, CancellationToken cancellationToken) { try { Validation <BaseError, Parameters> validation = ValidateUrl(request); return(await validation.Match( DoAdd, error => Task.FromResult <Either <BaseError, Unit> >(error.Join()))); } finally { _entityLocker.UnlockTrakt(); } }