protected Task <Option <Article, Error> > GetArticleBySlug(string slug) => slug.SomeWhen <string, Error>(s => !string.IsNullOrEmpty(s), "The slug must not be empty.") .Map(s => s.ToLower()) .FlatMapAsync(async s => await AllArticlesQueryable .OrderByDescending(a => a.CreatedAt) .FirstOrDefaultAsync(a => a.Slug.ToLower() == slug.ToLower()) .SomeNotNull <Article, Error>($"No article with slug '{slug}' was found."));
public Task <Option <ArticleModel[], Error> > GetFeed(string viewingUserId, int limit = 20, int offset = 0) => GetUserByIdOrError(viewingUserId) .MapAsync(async viewingUser => { var followedUserIds = viewingUser .Following .Select(f => f.FollowingId) .ToArray(); var articles = await AllArticlesQueryable .Where(a => followedUserIds.Contains(a.Author.Id)) .Skip(offset) .Take(limit) .ToArrayAsync(); return(await ToArticleModelsAsync(viewingUserId.Some(), articles)); });