You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							63 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							63 lines
						
					
					
						
							2.5 KiB
						
					
					
				using BukiVedi.Shared.Entities;
 | 
						|
using BukiVedi.Shared.Models;
 | 
						|
using BukiVedi.Shared.Services;
 | 
						|
using BukiVedi.Shared.Services.Mappers;
 | 
						|
 | 
						|
namespace BukiVedi.Shared.Apps
 | 
						|
{
 | 
						|
    public class AuthorHandler
 | 
						|
        : IAuthorHandler
 | 
						|
    {
 | 
						|
        private readonly ILibrary _library;
 | 
						|
        public AuthorHandler(ILibrary library)
 | 
						|
        {
 | 
						|
            if (library == null) throw new ArgumentNullException(nameof(library));
 | 
						|
            _library = library;
 | 
						|
        }
 | 
						|
 | 
						|
        public async Task AddToFavorite(string id, OperationContext context)
 | 
						|
        {
 | 
						|
            if (await Tables.FavoriteAuthors.Exists(Filters.FavoriteAuthors.Exact(id, context.OperationInitiator.Id)) == false)
 | 
						|
            {
 | 
						|
                await Tables.FavoriteAuthors.Write(new FavoriteAuthor { AuthorId = id, UserId = context.OperationInitiator.Id });
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public async Task<IEnumerable<AuthorInfo>> GetAllAuthors(OperationContext context) =>
 | 
						|
            (await Tables.Authors.GetAll()).Select(a => new AuthorInfo { Id = a.Id, Name = a.Name })?.ToArray()!;
 | 
						|
 | 
						|
        public async Task<IEnumerable<AuthorInfo>> GetFavoriteAuthors(OperationContext context)
 | 
						|
        {
 | 
						|
            var authorIds = (await Tables.FavoriteAuthors.Get(Filters.FavoriteAuthors.ByUser(context.OperationInitiator.Id)))?.Select(f => f.AuthorId)?.ToHashSet()!;
 | 
						|
            if (authorIds != null && authorIds.Any())
 | 
						|
            {
 | 
						|
                var authors = (await Tables.Authors.Get(Filters.Authors.ByIds(authorIds)))?.Select(a => new AuthorInfo { Id = a.Id, Name = a.Name })?.ToArray()!;
 | 
						|
                return authors;
 | 
						|
            }
 | 
						|
            return Enumerable.Empty<AuthorInfo>();
 | 
						|
        }
 | 
						|
 | 
						|
        public async Task RemoveFromFavorite(string id, OperationContext context)
 | 
						|
        {
 | 
						|
            var records = (await Tables.FavoriteAuthors.Get(Filters.FavoriteAuthors.Exact(id, context.OperationInitiator.Id)))?.ToHashSet()!;
 | 
						|
            if (records != null && records.Count > 0)
 | 
						|
            {
 | 
						|
                foreach (var record in records)
 | 
						|
                {
 | 
						|
                    await Tables.FavoriteAuthors.TryRemoveById(record.Id);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public async Task<IEnumerable<BookInfo>> SearchByAuthor(string id, OperationContext context)
 | 
						|
        {
 | 
						|
            var books = (await _library.SearchBooksByAuthor(id))?.ToArray()!;
 | 
						|
            if (books != null && books.Any())
 | 
						|
            {
 | 
						|
                return await BookEntityMapper.Map(books, context);
 | 
						|
            }
 | 
						|
            return Enumerable.Empty<BookInfo>();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |