Refactoring

main
Ogoun 4 months ago
parent f836c4963b
commit 55c378d992

@ -37,6 +37,7 @@ namespace BukiVedi.App.Controllers
}
#endregion
/// <summary>
/// Добавление книги в избранное
/// </summary>

@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<Project>
<PropertyGroup>
<_PublishTargetUrl>G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Release\net8.0\publish\</_PublishTargetUrl>
<History>True|2024-05-12T17:17:18.3446630Z;True|2024-05-12T20:11:53.1976666+03:00;True|2024-04-28T17:30:08.5715518+03:00;True|2024-04-28T17:28:06.6959908+03:00;True|2024-04-28T16:38:39.9281743+03:00;False|2024-04-28T16:36:56.3567692+03:00;False|2024-04-28T16:36:21.9546945+03:00;False|2024-04-28T16:35:24.2096595+03:00;True|2024-04-09T13:52:12.7238098+03:00;True|2024-04-07T21:16:45.6816851+03:00;True|2024-04-07T05:01:48.6765910+03:00;True|2024-04-07T05:01:36.8953339+03:00;True|2024-04-07T04:57:19.2521218+03:00;True|2024-04-06T21:11:57.8349210+03:00;True|2024-04-06T17:36:58.3428821+03:00;True|2024-04-05T04:52:06.7814045+03:00;True|2024-04-05T04:46:11.3960475+03:00;True|2024-04-04T16:59:14.8807703+03:00;True|2024-04-04T14:55:51.0062074+03:00;True|2024-04-04T14:01:53.0402462+03:00;True|2024-04-04T05:50:10.9326327+03:00;True|2024-04-04T05:23:22.3837261+03:00;True|2024-04-04T05:18:08.8436345+03:00;True|2024-04-04T05:13:03.4261357+03:00;True|2024-04-04T04:23:59.4217155+03:00;True|2024-04-04T04:12:10.2381826+03:00;True|2024-04-04T04:04:27.2386390+03:00;</History>
<History>True|2024-05-27T18:54:10.5214496Z;True|2024-05-12T20:17:18.3446630+03:00;True|2024-05-12T20:11:53.1976666+03:00;True|2024-04-28T17:30:08.5715518+03:00;True|2024-04-28T17:28:06.6959908+03:00;True|2024-04-28T16:38:39.9281743+03:00;False|2024-04-28T16:36:56.3567692+03:00;False|2024-04-28T16:36:21.9546945+03:00;False|2024-04-28T16:35:24.2096595+03:00;True|2024-04-09T13:52:12.7238098+03:00;True|2024-04-07T21:16:45.6816851+03:00;True|2024-04-07T05:01:48.6765910+03:00;True|2024-04-07T05:01:36.8953339+03:00;True|2024-04-07T04:57:19.2521218+03:00;True|2024-04-06T21:11:57.8349210+03:00;True|2024-04-06T17:36:58.3428821+03:00;True|2024-04-05T04:52:06.7814045+03:00;True|2024-04-05T04:46:11.3960475+03:00;True|2024-04-04T16:59:14.8807703+03:00;True|2024-04-04T14:55:51.0062074+03:00;True|2024-04-04T14:01:53.0402462+03:00;True|2024-04-04T05:50:10.9326327+03:00;True|2024-04-04T05:23:22.3837261+03:00;True|2024-04-04T05:18:08.8436345+03:00;True|2024-04-04T05:13:03.4261357+03:00;True|2024-04-04T04:23:59.4217155+03:00;True|2024-04-04T04:12:10.2381826+03:00;True|2024-04-04T04:04:27.2386390+03:00;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

@ -1,42 +0,0 @@
using BukiVedi.Shared.Entities;
using BukiVedi.Shared.Models;
using BukiVedi.Shared.Services;
using MongoDB.Driver;
namespace BukiVedi.App.Services.Mappers
{
public class BookEntityMapper
{
public static async Task<IEnumerable<BookInfo>> Map(IEnumerable<BookEntity> books)
{
var booksIds = books.Select(x => x.Id).ToList();
var tags_list = (await Tables.UserTag.Get(Builders<UserTag>.Filter.In(t => t.BookId, booksIds)));
var tags = new Dictionary<string, List<TagInfo>>();
foreach (var t in tags_list)
{
if (tags.TryGetValue(t.BookId, out var list)) { list.Add(new TagInfo { Id = t.Id, Name = t.Name }); }
else
{
tags.Add(t.BookId,
new List<TagInfo>
{
new TagInfo { Id = t.Id, Name = t.Name }
});
}
}
return books.Select(book =>
new BookInfo
{
Authors = book.Authors.Select(a => new AuthorInfo { Id = a.Id, Name = a.Name }).ToArray(),
Description = book.Description,
Format = book.Format,
Id = book.Id,
Genres = new GenreInfo[1] { new GenreInfo { Id = book.Genre.Id, Name = book.Genre.Code } },
Title = book.Title,
Year = book.Year,
Tags = tags.ContainsKey(book.Id) ? tags[book.Id] : null!
});
}
}
}

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("BukiVedi.App")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+112daccec93b21f74faf3a3b85b2f9a47b2ae81f")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f836c4963b5e99aa3f8cf1767a7e2475c8365585")]
[assembly: System.Reflection.AssemblyProductAttribute("BukiVedi.App")]
[assembly: System.Reflection.AssemblyTitleAttribute("BukiVedi.App")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

@ -1 +1 @@
a7e97588f3d72640975deb9345bc56ed8105e4a411d7365c01f74b565d536185
4b4b9b8782de19706da19d9f622b1c0ae0f67e76d13507633e9b217526407a05

@ -1 +1 @@
01863397d052ecaa66378570909483d909afc157f0ec741e43d4b803613bad26
ed81abf2574a377e553a94f81fb7f13635914d0a568744fd6688eb2402f4589b

@ -80,8 +80,6 @@ G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Debug\net8.0\web\fonts\Roboto-
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Debug\net8.0\web\fonts\Roboto-Regular.ttf
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Debug\net8.0\web\fonts\Roboto-Thin.ttf
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Debug\net8.0\web\fonts\Roboto-ThinItalic.ttf
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Debug\net8.0\LemmaSharpPrebuilt.pdb
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Debug\net8.0\LemmaSharpPrebuilt.dll.config
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Debug\net8.0\web\js\common\jquery.js
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Debug\net8.0\web\js\constants\index.js
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Debug\net8.0\web\js\login\index.js

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("BukiVedi.App")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+431f2503a837ccf39eac97076a865db39f86a8dd")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f836c4963b5e99aa3f8cf1767a7e2475c8365585")]
[assembly: System.Reflection.AssemblyProductAttribute("BukiVedi.App")]
[assembly: System.Reflection.AssemblyTitleAttribute("BukiVedi.App")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

@ -1 +1 @@
731a41efb4470858e97b70db5c6c673a43866001a9d9b8ac769cdb5c62d8eec0
29025db0182771bf6cf91cb9d325b9bf6b103812996e3476ba09ddfdcd3dd811

@ -88,3 +88,7 @@ G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Release\net8.0\web\js\main\ind
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Release\net8.0\web\js\requests\index.js
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Release\net8.0\web\js\scroll\index.js
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Release\net8.0\web\script.js
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Release\net8.0\web\assets\pencil.svg
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Release\net8.0\web\js\common\jquery.min.js
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Release\net8.0\web\js\components\tags\index.js
G:\Documents\GitHub\BukiVedi\src\BukiVedi.App\bin\Release\net8.0\web\js\utils\index.js

@ -2,7 +2,6 @@
using BukiVedi.Shared.Models;
using BukiVedi.Shared.Services;
using BukiVedi.Shared.Services.Mappers;
using MongoDB.Driver;
namespace BukiVedi.Shared.Apps
{
@ -18,50 +17,46 @@ namespace BukiVedi.Shared.Apps
public async Task AddToFavorite(string id, OperationContext context)
{
if (context?.OperationInitiator?.Id == null) throw new InvalidOperationException("Unauthorized");
var exists_fiter = Builders<FavoriteAuthor>.Filter.And
(
Builders<FavoriteAuthor>.Filter.Eq(f => f.UserId, context.OperationInitiator.Id),
Builders<FavoriteAuthor>.Filter.Eq(f => f.AuthorId, id)
);
if (await Tables.FavoriteAuthors.Exists(exists_fiter) == false)
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)
{
var authors = (await Tables.Authors.GetAll()).Select(a => new AuthorInfo { Id = a.Id, Name = a.Name }).ToArray();
return authors;
}
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(Builders<FavoriteAuthor>.Filter.Eq(f => f.UserId, context.OperationInitiator.Id))).Select(f => f.AuthorId).ToHashSet();
var authors = (await Tables.Authors.Get(Builders<Author>.Filter.In(a => a.Id, authorIds))).Select(a => new AuthorInfo { Id = a.Id, Name = a.Name }).ToArray();
return authors;
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)
{
if (context?.OperationInitiator?.Id == null) throw new InvalidOperationException("Unauthorized");
var exists_fiter = Builders<FavoriteAuthor>.Filter.And
(
Builders<FavoriteAuthor>.Filter.Eq(f => f.UserId, context.OperationInitiator.Id),
Builders<FavoriteAuthor>.Filter.Eq(f => f.AuthorId, id)
);
var records = await Tables.FavoriteAuthors.Get(exists_fiter);
foreach (var record in records)
var records = (await Tables.FavoriteAuthors.Get(Filters.FavoriteAuthors.Exact(id, context.OperationInitiator.Id)))?.ToHashSet()!;
if (records != null && records.Count > 0)
{
await Tables.FavoriteAuthors.TryRemoveById(record.Id);
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();
return await BookEntityMapper.Map(books);
var books = (await _library.SearchBooksByAuthor(id))?.ToArray()!;
if (books != null && books.Any())
{
return await BookEntityMapper.Map(books, context);
}
return Enumerable.Empty<BookInfo>();
}
}
}

@ -1,15 +1,7 @@
using Amazon.Runtime.Internal;
using BukiVedi.Shared.Entities;
using BukiVedi.Shared.Entities;
using BukiVedi.Shared.Models;
using BukiVedi.Shared.Services;
using BukiVedi.Shared.Services.Mappers;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using ZeroLevel.Services.FileSystem;
namespace BukiVedi.Shared.Apps
@ -33,16 +25,11 @@ namespace BukiVedi.Shared.Apps
var authors = book.AuthorIds;
if (!string.IsNullOrEmpty(account_id) && authors?.Count > 0)
{
foreach (var author in authors)
foreach (var author_id in authors)
{
var exists_fiter = Builders<FavoriteAuthor>.Filter.And
(
Builders<FavoriteAuthor>.Filter.Eq(f => f.UserId, account_id),
Builders<FavoriteAuthor>.Filter.Eq(f => f.AuthorId, author)
);
if (await Tables.FavoriteAuthors.Exists(exists_fiter) == false)
if (await Tables.FavoriteAuthors.Exists(Filters.FavoriteAuthors.Exact(author_id, account_id)) == false)
{
await Tables.FavoriteAuthors.Write(new FavoriteAuthor { AuthorId = author, UserId = account_id });
await Tables.FavoriteAuthors.Write(new FavoriteAuthor { AuthorId = author_id, UserId = account_id });
}
}
}
@ -56,12 +43,7 @@ namespace BukiVedi.Shared.Apps
var account_id = context.OperationInitiator.Id;
if (!string.IsNullOrEmpty(account_id))
{
var exists_fiter = Builders<ReadQueueItem>.Filter.And
(
Builders<ReadQueueItem>.Filter.Eq(f => f.UserId, account_id),
Builders<ReadQueueItem>.Filter.Eq(f => f.BookId, id)
);
if (await Tables.ReadQueue.Exists(exists_fiter) == false)
if (await Tables.ReadQueue.Exists(Filters.BooksToRead.Exact(id, account_id)) == false)
{
await Tables.ReadQueue.Write(new ReadQueueItem { BookId = id, UserId = account_id, Timestamp = Timestamp.UtcNow });
}
@ -76,12 +58,7 @@ namespace BukiVedi.Shared.Apps
var account_id = context.OperationInitiator.Id;
if (!string.IsNullOrEmpty(account_id))
{
var exists_fiter = Builders<FavoriteBook>.Filter.And
(
Builders<FavoriteBook>.Filter.Eq(f => f.UserId, account_id),
Builders<FavoriteBook>.Filter.Eq(f => f.BookId, id)
);
if (await Tables.FavoriteBooks.Exists(exists_fiter) == false)
if (await Tables.FavoriteBooks.Exists(Filters.FavoriteBooks.ByBook(id, account_id)) == false)
{
await Tables.FavoriteBooks.Write(new FavoriteBook { BookId = id, UserId = account_id });
}
@ -96,12 +73,7 @@ namespace BukiVedi.Shared.Apps
var account_id = context.OperationInitiator.Id;
if (!string.IsNullOrEmpty(account_id))
{
var exists_fiter = Builders<DisgustingBook>.Filter.And
(
Builders<DisgustingBook>.Filter.Eq(f => f.UserId, account_id),
Builders<DisgustingBook>.Filter.Eq(f => f.BookId, id)
);
if (await Tables.DisgustingBooks.Exists(exists_fiter) == false)
if (await Tables.DisgustingBooks.Exists(Filters.DisgustingBooks.ByBook(id, account_id)) == false)
{
await Tables.DisgustingBooks.Write(new DisgustingBook { BookId = id, UserId = account_id });
}
@ -120,12 +92,7 @@ namespace BukiVedi.Shared.Apps
{
foreach (var author in authors)
{
var exists_fiter = Builders<DisgustingAuthor>.Filter.And
(
Builders<DisgustingAuthor>.Filter.Eq(f => f.UserId, account_id),
Builders<DisgustingAuthor>.Filter.Eq(f => f.AuthorId, author)
);
if (await Tables.DisgustingAuthors.Exists(exists_fiter) == false)
if (await Tables.DisgustingAuthors.Exists(Filters.DisgustingAuthors.ByAuthor(author, account_id)) == false)
{
await Tables.DisgustingAuthors.Write(new DisgustingAuthor { AuthorId = author, UserId = account_id });
}
@ -149,13 +116,7 @@ namespace BukiVedi.Shared.Apps
public async Task RemoveFromFavorite(string id, OperationContext context)
{
if (context?.OperationInitiator?.Id == null) throw new InvalidOperationException("Unauthorized");
var exists_fiter = Builders<FavoriteBook>.Filter.And
(
Builders<FavoriteBook>.Filter.Eq(f => f.UserId, context.OperationInitiator.Id),
Builders<FavoriteBook>.Filter.Eq(f => f.BookId, id)
);
var records = await Tables.FavoriteBooks.Get(exists_fiter);
var records = await Tables.FavoriteBooks.Get(Filters.FavoriteBooks.ByBook(id, context.OperationInitiator.Id));
foreach (var record in records)
{
await Tables.FavoriteBooks.TryRemoveById(record.Id);
@ -164,13 +125,7 @@ namespace BukiVedi.Shared.Apps
public async Task RemoveFromReadingQueue(string id, OperationContext context)
{
if (context?.OperationInitiator?.Id == null) throw new InvalidOperationException("Unauthorized");
var exists_fiter = Builders<ReadQueueItem>.Filter.And
(
Builders<ReadQueueItem>.Filter.Eq(f => f.UserId, context.OperationInitiator.Id),
Builders<ReadQueueItem>.Filter.Eq(f => f.BookId, id)
);
var records = await Tables.ReadQueue.Get(exists_fiter);
var records = await Tables.ReadQueue.Get(Filters.BooksToRead.Exact(id, context.OperationInitiator.Id));
foreach (var record in records)
{
await Tables.ReadQueue.TryRemoveById(record.Id);
@ -186,35 +141,35 @@ namespace BukiVedi.Shared.Apps
case "@favorites":
{
var books = (await _library.SearchFavoritesBooks(context.OperationInitiator.Id)).ToArray();
return await BookEntityMapper.Map(books);
return await BookEntityMapper.Map(books, context);
}
case "@favoriteauthors":
{
var books = (await _library.SearchFavoriteAuthorsBooks(context.OperationInitiator.Id)).ToArray();
return await BookEntityMapper.Map(books);
return await BookEntityMapper.Map(books, context);
}
case "@tagged":
{
var books = (await _library.SearchTaggedBooks(context.OperationInitiator.Id, tag: tag!)).ToArray();
return await BookEntityMapper.Map(books);
return await BookEntityMapper.Map(books, context);
}
case "@blocked":
{
var books = (await _library.SearchBlockedBooks(context.OperationInitiator.Id)).ToArray();
return await BookEntityMapper.Map(books);
return await BookEntityMapper.Map(books, context);
}
case "@toread":
{
var books = (await _library.SearchToReadBooks(context.OperationInitiator.Id)).ToArray();
return await BookEntityMapper.Map(books);
return await BookEntityMapper.Map(books, context);
}
default:
{
var books = (await _library.SearchBooks(query)).ToArray();
return await BookEntityMapper.Map(books);
return await BookEntityMapper.Map(books, context);
}
}
}
@ -223,16 +178,10 @@ namespace BukiVedi.Shared.Apps
public async Task UnblockBook(string id, OperationContext context)
{
if (context?.OperationInitiator?.Id == null) throw new InvalidOperationException("Unauthorized");
var account_id = context.OperationInitiator.Id;
if (!string.IsNullOrEmpty(account_id))
{
var exists_fiter = Builders<DisgustingBook>.Filter.And
(
Builders<DisgustingBook>.Filter.Eq(f => f.UserId, account_id),
Builders<DisgustingBook>.Filter.Eq(f => f.BookId, id)
);
var records = await Tables.DisgustingBooks.Get(exists_fiter);
var records = await Tables.DisgustingBooks.Get(Filters.DisgustingBooks.ByBook(id, account_id));
foreach (var record in records)
{
await Tables.DisgustingBooks.TryRemoveById(record.Id);

@ -2,7 +2,6 @@
using BukiVedi.Shared.Models;
using BukiVedi.Shared.Services;
using BukiVedi.Shared.Services.Mappers;
using MongoDB.Driver;
namespace BukiVedi.Shared.Apps
{
@ -21,7 +20,7 @@ namespace BukiVedi.Shared.Apps
if (string.IsNullOrWhiteSpace(name) == false && await Tables.Books.ExistById(bookId))
{
name = name.Trim().ToLowerInvariant();
var tagFilter = Builders<UserTag>.Filter.And(Builders<UserTag>.Filter.And(Builders<UserTag>.Filter.Eq(t => t.BookId, bookId), Builders<UserTag>.Filter.Eq(t => t.Name, name)), Builders<UserTag>.Filter.Eq(t => t.UserId, context.OperationInitiator.Id));
var tagFilter = Filters.Tags.Exact(bookId, context.OperationInitiator.Id, name);
var existTag = await Tables.UserTag.Get(tagFilter);
if (existTag != null && existTag.Length > 0)
{
@ -38,9 +37,7 @@ namespace BukiVedi.Shared.Apps
public async Task<IEnumerable<TagInfo>> GetBookTags(string bookId, OperationContext context)
{
var userFilter = Builders<UserTag>.Filter.Eq(t => t.UserId, context.OperationInitiator.Id);
var bookFilter = Builders<UserTag>.Filter.Eq(t => t.BookId, bookId);
var filter = Builders<UserTag>.Filter.And(userFilter, bookFilter);
var filter = Filters.Tags.ByBook(bookId, context.OperationInitiator.Id);
return (await Tables.UserTag.Get(filter))?.Select(t => new TagInfo
{
Id = t.Id,
@ -50,7 +47,7 @@ namespace BukiVedi.Shared.Apps
public async Task<IEnumerable<string>> GetUserTags(OperationContext context)
{
return (await Tables.UserTag.Get(Builders<UserTag>.Filter.Eq(t => t.UserId, context.OperationInitiator.Id)))?.Select(t => t.Name)!;
return (await Tables.UserTag.Get(Filters.Tags.ByUser(context.OperationInitiator.Id)))?.Select(t => t.Name)!;
}
public async Task<bool> RemoveTag(string id, OperationContext context)
@ -67,7 +64,7 @@ namespace BukiVedi.Shared.Apps
if (string.IsNullOrWhiteSpace(id) == false)
{
var books = await _library.SearchByTagBooks(context.OperationInitiator.Id, id);
return await BookEntityMapper.Map(books);
return await BookEntityMapper.Map(books, context);
}
return Enumerable.Empty<BookInfo>();
}

@ -1,5 +1,4 @@
using BukiVedi.Shared.Entities;
using MongoDB.Driver;
namespace BukiVedi.Shared.Services
{
@ -21,7 +20,7 @@ namespace BukiVedi.Shared.Services
}
return await _accountRepository.Write(account);
}
public async Task<Member> GetAccountByLogin(string login) => (await _accountRepository.Get(Builders<Member>.Filter.Eq(a => a.Login, login))).FirstOrDefault()!;
public async Task<Member> GetAccountByLogin(string login) => (await _accountRepository.Get(Filters.Auth.ByLogin(login))).FirstOrDefault()!;
public async Task<Member> GetAccount(string id) => await _accountRepository.GetById(id);
public async Task<Member> GetAccount(string login, string password)
{

@ -0,0 +1,278 @@
using BukiVedi.Shared.Entities;
using MongoDB.Driver;
using System.Net;
namespace BukiVedi.Shared.Services
{
/// <summary>
/// Фабрика фильтров
/// </summary>
public static class Filters
{
/// <summary>
/// Теги
/// </summary>
public static class Tags
{
/// <summary>
/// По пользователю
/// </summary>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<UserTag> ByUser(string userId) => Builders<UserTag>.Filter.Eq(t => t.UserId, userId);
/// <summary>
/// По названию тега
/// </summary>
/// <param name="userId">Название тега</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<UserTag> ByName(string name, string userId) =>
Builders<UserTag>.Filter.And(Builders<UserTag>.Filter.Eq(t => t.UserId, userId), Builders<UserTag>.Filter.Eq(t => t.Name, name));
/// <summary>
/// По книге
/// </summary>
/// <param name="bookId">Идентификатор книги</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<UserTag> ByBook(string bookId, string userId) =>
Builders<UserTag>.Filter.And(Builders<UserTag>.Filter.Eq(t => t.BookId, bookId), Builders<UserTag>.Filter.Eq(t => t.UserId, userId));
/// <summary>
/// По точному совпадению
/// </summary>
/// <param name="bookId">Идентификатор книги</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <param name="name">Имя тега</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<UserTag> Exact(string bookId, string userId, string name) =>
Builders<UserTag>.Filter.And(
Builders<UserTag>.Filter.Eq(t => t.BookId, bookId),
Builders<UserTag>.Filter.Eq(t => t.UserId, userId),
Builders<UserTag>.Filter.Eq(t => t.Name, name));
/// <summary>
/// По книгам
/// </summary>
/// <param name="bookIds">Идентификаторы книг</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<UserTag> ByBooks(IEnumerable<string> bookIds, string userId) =>
Builders<UserTag>.Filter.And(Builders<UserTag>.Filter.In(t => t.BookId, bookIds), Builders<UserTag>.Filter.Eq(t => t.UserId, userId));
}
/// <summary>
/// Избранные книги
/// </summary>
public static class FavoriteBooks
{
/// <summary>
/// По пользователю
/// </summary>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<FavoriteBook> ByUser(string userId) => Builders<FavoriteBook>.Filter.Eq(t => t.UserId, userId);
/// <summary>
/// По книге
/// </summary>
/// <param name="bookId">Идентификатор книги</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<FavoriteBook> ByBook(string bookId, string userId) =>
Builders<FavoriteBook>.Filter.And(Builders<FavoriteBook>.Filter.Eq(t => t.BookId, bookId), Builders<FavoriteBook>.Filter.Eq(t => t.UserId, userId));
/// <summary>
/// По книгам
/// </summary>
/// <param name="bookIds">Идентификаторы книг</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<FavoriteBook> ByBooks(IEnumerable<string> bookIds, string userId) =>
Builders<FavoriteBook>.Filter.And(Builders<FavoriteBook>.Filter.In(t => t.BookId, bookIds), Builders<FavoriteBook>.Filter.Eq(t => t.UserId, userId));
}
/// <summary>
/// Избранные авторы
/// </summary>
public static class FavoriteAuthors
{
/// <summary>
/// По пользователю
/// </summary>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<FavoriteAuthor> ByUser(string userId) => Builders<FavoriteAuthor>.Filter.Eq(t => t.UserId, userId);
/// <summary>
/// По точному совпадению
/// </summary>
/// <param name="authorId">Идентификатор автора</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<FavoriteAuthor> Exact(string authorId, string userId) =>
Builders<FavoriteAuthor>.Filter.And(
Builders<FavoriteAuthor>.Filter.Eq(t => t.AuthorId, authorId),
Builders<FavoriteAuthor>.Filter.Eq(t => t.UserId, userId));
}
/// <summary>
/// Заблокированные книги
/// </summary>
public static class DisgustingBooks
{
/// <summary>
/// По пользователю
/// </summary>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<DisgustingBook> ByUser(string userId) => Builders<DisgustingBook>.Filter.Eq(t => t.UserId, userId);
/// <summary>
/// По книге
/// </summary>
/// <param name="bookId">Идентификатор книги</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<DisgustingBook> ByBook(string bookId, string userId) =>
Builders<DisgustingBook>.Filter.And(Builders<DisgustingBook>.Filter.Eq(t => t.BookId, bookId), Builders<DisgustingBook>.Filter.Eq(t => t.UserId, userId));
/// <summary>
/// По книгам
/// </summary>
/// <param name="bookIds">Идентификаторы книг</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<DisgustingBook> ByBooks(IEnumerable<string> bookIds, string userId) =>
Builders<DisgustingBook>.Filter.And(Builders<DisgustingBook>.Filter.In(t => t.BookId, bookIds), Builders<DisgustingBook>.Filter.Eq(t => t.UserId, userId));
}
/// <summary>
/// Заблокированные авторы
/// </summary>
public static class DisgustingAuthors
{
/// <summary>
/// По пользователю
/// </summary>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<DisgustingAuthor> ByUser(string userId) => Builders<DisgustingAuthor>.Filter.Eq(t => t.UserId, userId);
/// <summary>
/// По автору
/// </summary>
/// <param name="authorId">Идентификатор автора</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<DisgustingAuthor> ByAuthor(string authorId, string userId) =>
Builders<DisgustingAuthor>.Filter.And(Builders<DisgustingAuthor>.Filter.Eq(t => t.AuthorId, authorId), Builders<DisgustingAuthor>.Filter.Eq(t => t.UserId, userId));
/// <summary>
/// По авторам
/// </summary>
/// <param name="authorIds">Идентификаторы авторов</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<DisgustingAuthor> ByAuthors(IEnumerable<string> authorIds, string userId) =>
Builders<DisgustingAuthor>.Filter.And(Builders<DisgustingAuthor>.Filter.In(t => t.AuthorId, authorIds), Builders<DisgustingAuthor>.Filter.Eq(t => t.UserId, userId));
}
/// <summary>
/// Книги
/// </summary>
public static class Books
{
/// <summary>
/// По идентификаторам книг
/// </summary>
/// <param name="userId">Идентификаторы книг</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<Book> ByIds(IEnumerable<string> bookIds) => Builders<Book>.Filter.In(t => t.Id, bookIds);
/// <summary>
/// По идентификаторам авторов
/// </summary>
/// <param name="authorIds">Идентификаторы авторов</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<Book> ByAuthors(IEnumerable<string> authorIds) => Builders<Book>.Filter.AnyIn(b => b.AuthorIds, authorIds);
/// <summary>
/// По идентификатору автора
/// </summary>
/// <param name="authorId">Идентификатор автора</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<Book> ByAuthor(string authorId) => Builders<Book>.Filter.AnyEq(b => b.AuthorIds, authorId);
/// <summary>
/// По размещению в архиве
/// </summary>
/// <param name="archivePath">Путь к акрхиву</param>
/// <param name="archiveIndex">Индекс в акрхиве</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<Book> ByArchiveLocation(string archivePath, int archiveIndex) =>
Builders<Book>.Filter.And(Builders<Book>.Filter.Eq(b => b.ArchivePath, archivePath), Builders<Book>.Filter.Eq(b => b.ArchiveIndex, archiveIndex));
}
/// <summary>
/// Книги для чтения
/// </summary>
public static class BooksToRead
{
/// <summary>
/// По пользователю
/// </summary>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<ReadQueueItem> ByUser(string userId) => Builders<ReadQueueItem>.Filter.Eq(t => t.UserId, userId);
/// <summary>
/// По точному совпадению
/// </summary>
/// <param name="bookId">Идентификатор книги</param>
/// <param name="userId">Идентификатор пользователя</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<ReadQueueItem> Exact(string bookId, string userId) =>
Builders<ReadQueueItem>.Filter.And(
Builders<ReadQueueItem>.Filter.Eq(t => t.BookId, bookId),
Builders<ReadQueueItem>.Filter.Eq(t => t.UserId, userId));
}
/// <summary>
/// Авторы
/// </summary>
public static class Authors
{
/// <summary>
/// По идентификаторам авторов
/// </summary>
/// <param name="authorIds">Идентификаторы авторов</param>
/// <returns>Фильтр</returns>
public static FilterDefinition<Author> ByIds(IEnumerable<string> authorIds) => Builders<Author>.Filter.In(t => t.Id, authorIds);
/// <summary>
/// Пустой фильтр
/// </summary>
public static FilterDefinition<Author> Empty => Builders<Author>.Filter.Empty;
}
/// <summary>
/// Жанры
/// </summary>
public static class Genres
{
/// <summary>
/// Пустой фильтр
/// </summary>
public static FilterDefinition<Genre> Empty => Builders<Genre>.Filter.Empty;
}
/// <summary>
/// Авторизация
/// </summary>
public static class Auth
{
public static FilterDefinition<Member> ByLogin(string login) => Builders<Member>.Filter.Eq(a => a.Login, login);
}
}
}

@ -43,8 +43,8 @@ namespace BukiVedi.Shared.Services
_library = new ZipLibraryReader(_libraryPath);
_engine = new SleoEngine<BookDocument>(AppSettings.Settings.Sleopok.Path, b => b.Id);
var authors_count = (int)Tables.Authors.Count(Builders<Author>.Filter.Empty).Result;
var genres_count = (int)Tables.Genres.Count(Builders<Genre>.Filter.Empty).Result;
var authors_count = (int)Tables.Authors.Count(Filters.Authors.Empty).Result;
var genres_count = (int)Tables.Genres.Count(Filters.Genres.Empty).Result;
Authors = new Dictionary<string, Author>(authors_count);
Genres = new Dictionary<string, Genre>(genres_count);
@ -85,18 +85,19 @@ namespace BukiVedi.Shared.Services
public async Task<IEnumerable<BookEntity>> SearchByTagBooks(string accountId, string tagId)
{
IEnumerable<string> bookIds = (await Tables.UserTag.Get(Builders<UserTag>.Filter.And(Builders<UserTag>.Filter.Eq(t => t.UserId, accountId), Builders<UserTag>.Filter.Eq(t => t.Id, tagId))))?.Select(t => t.BookId)!;
if (bookIds != null && bookIds.Any())
var tag = await Tables.UserTag.GetById(tagId);
var books = (await Tables.UserTag.Get(Filters.Tags.ByName(tag.Name, accountId)))?.Select(t => t.BookId)?.ToHashSet()?.ToHashSet()!;
if (books != null && books.Any())
{
var filter = Builders<Book>.Filter.In(b => b.Id, bookIds);
return await PrepareBooksByFilter(filter);
return await PrepareBooksByFilter(Filters.Books.ByIds(books));
}
return Enumerable.Empty<BookEntity>();
}
public async Task<IEnumerable<BookEntity>> SearchFavoritesBooks(string accountId)
{
IEnumerable<string> bookIds = (await Tables.FavoriteBooks.Get(Builders<FavoriteBook>.Filter.Eq(f => f.UserId, accountId)))?.Select(t => t.BookId)!;
IEnumerable<string> bookIds = (await Tables.FavoriteBooks.Get(Filters.FavoriteBooks.ByUser(accountId)))?.Select(t => t.BookId)?.ToHashSet()!;
if (bookIds != null && bookIds.Any())
{
var filter = Builders<Book>.Filter.In(b => b.Id, bookIds);
@ -107,33 +108,30 @@ namespace BukiVedi.Shared.Services
public async Task<IEnumerable<BookEntity>> SearchToReadBooks(string accountId)
{
IEnumerable<string> bookIds = (await Tables.ReadQueue.Get(Builders<ReadQueueItem>.Filter.Eq(d => d.UserId, accountId)))?.Select(t => t.BookId)!;
IEnumerable<string> bookIds = (await Tables.ReadQueue.Get(Filters.BooksToRead.ByUser(accountId)))?.Select(t => t.BookId)?.ToHashSet()!;
if (bookIds != null && bookIds.Any())
{
var filter = Builders<Book>.Filter.In(b => b.Id, bookIds);
return await PrepareBooksByFilter(filter);
return await PrepareBooksByFilter(Filters.Books.ByIds(bookIds));
}
return Enumerable.Empty<BookEntity>();
}
public async Task<IEnumerable<BookEntity>> SearchBlockedBooks(string accountId)
{
IEnumerable<string> bookIds = (await Tables.DisgustingBooks.Get(Builders<DisgustingBook>.Filter.Eq(d => d.UserId, accountId)))?.Select(t => t.BookId)!;
IEnumerable<string> bookIds = (await Tables.DisgustingBooks.Get(Filters.DisgustingBooks.ByUser(accountId)))?.Select(t => t.BookId)?.ToHashSet()!;
if (bookIds != null && bookIds.Any())
{
var filter = Builders<Book>.Filter.In(b => b.Id, bookIds);
return await PrepareBooksByFilter(filter);
return await PrepareBooksByFilter(Filters.Books.ByIds(bookIds));
}
return Enumerable.Empty<BookEntity>();
}
public async Task<IEnumerable<BookEntity>> SearchFavoriteAuthorsBooks(string accountId)
{
var authorIds = (await Tables.FavoriteAuthors.Get(Builders<FavoriteAuthor>.Filter.Eq(f => f.UserId, accountId)))?.Select(t => t.AuthorId)?.ToHashSet();
var authorIds = (await Tables.FavoriteAuthors.Get(Filters.FavoriteAuthors.ByUser(accountId)))?.Select(t => t.AuthorId)?.ToHashSet()!;
if (authorIds != null && authorIds.Any())
{
var filter = Builders<Book>.Filter.AnyIn(b => b.AuthorIds, authorIds);
return await PrepareBooksByFilter(filter);
return await PrepareBooksByFilter(Filters.Books.ByAuthors(authorIds));
}
return Enumerable.Empty<BookEntity>();
}
@ -142,8 +140,7 @@ namespace BukiVedi.Shared.Services
{
if (string.IsNullOrWhiteSpace(author_id) == false)
{
var filter = Builders<Book>.Filter.AnyEq(b => b.AuthorIds, author_id);
return await PrepareBooksByFilter(filter);
return await PrepareBooksByFilter(Filters.Books.ByAuthor(author_id));
}
return Enumerable.Empty<BookEntity>();
}
@ -152,17 +149,16 @@ namespace BukiVedi.Shared.Services
{
IEnumerable<string> bookIds;
if (string.IsNullOrWhiteSpace(tag))
{
bookIds = (await Tables.UserTag.Get(Builders<UserTag>.Filter.Eq(t => t.UserId, accountId)))?.Select(t => t.BookId)!;
{
bookIds = (await Tables.UserTag.Get(Filters.Tags.ByUser(accountId)))?.Select(t => t.BookId)?.ToHashSet()!;
}
else
{
bookIds = (await Tables.UserTag.Get(Builders<UserTag>.Filter.And(Builders<UserTag>.Filter.Eq(t => t.UserId, accountId), Builders<UserTag>.Filter.Eq(t => t.Name, tag))))?.Select(t => t.BookId)!;
bookIds = (await Tables.UserTag.Get(Filters.Tags.ByName(tag, accountId)))?.Select(t => t.BookId)?.ToHashSet()!;
}
if (bookIds != null && bookIds.Any())
{
var filter = Builders<Book>.Filter.In(b => b.Id, bookIds);
return await PrepareBooksByFilter(filter);
return await PrepareBooksByFilter(Filters.Books.ByIds(bookIds));
}
return Enumerable.Empty<BookEntity>();
}
@ -244,8 +240,7 @@ namespace BukiVedi.Shared.Services
if (docs?.Any() ?? false)
{
var booksFilter = Builders<Book>.Filter.In<string>(b => b.Id, docs.Select(d => d.Key));
var books = (await Tables.Books.Get(booksFilter)).ToDictionary(b => b.Id, b => b);
var books = (await Tables.Books.Get(Filters.Books.ByIds(docs.Select(d => d.Key)))).ToDictionary(b => b.Id, b => b);
var result = new BookEntity[books.Count];
Log.Debug($"Found {books.Count} books by query {query}");
@ -395,8 +390,8 @@ namespace BukiVedi.Shared.Services
foreach (var zip_book in _library.ReadBooks())
{
var archive_path = Path.GetFileName(zip_book.ArchivePath);
var book_filter = Builders<Book>.Filter.And(Builders<Book>.Filter.Eq(b => b.ArchivePath, archive_path), Builders<Book>.Filter.Eq(b => b.ArchiveIndex, zip_book.ArchiveIndex));
if (await Tables.Books.Exists(book_filter)) continue;
if (await Tables.Books.Exists(Filters.Books.ByArchiveLocation(archive_path, zip_book.ArchiveIndex))) continue;
var author_ids = new HashSet<string>();
var authors_list = PrepareAuthorsLine(zip_book.Authors);
@ -442,7 +437,6 @@ namespace BukiVedi.Shared.Services
Format = zip_book.Format.ToString()
};
await Tables.Books.Write(book);
//Console.WriteLine($"[{((authors_list?.Length > 0) ? string.Join(';', authors_list) : string.Empty)}] \"{book.Title}\"");
}
}
}

@ -6,24 +6,27 @@ namespace BukiVedi.Shared.Services.Mappers
{
public class BookEntityMapper
{
public static async Task<IEnumerable<BookInfo>> Map(IEnumerable<BookEntity> books)
public static async Task<IEnumerable<BookInfo>> Map(IEnumerable<BookEntity> books, OperationContext context)
{
var booksIds = books.Select(x => x.Id).ToList();
var tags_list = (await Tables.UserTag.Get(Builders<UserTag>.Filter.In(t => t.BookId, booksIds)));
var tags_list = (await Tables.UserTag.Get(Filters.Tags.ByBooks(booksIds, context.OperationInitiator.Id)));
var tags = new Dictionary<string, List<TagInfo>>();
foreach (var t in tags_list)
{
if (tags.TryGetValue(t.BookId, out var list)) { list.Add(new TagInfo { Id = t.Id, Name = t.Name }); }
else
{
tags.Add(t.BookId,
new List<TagInfo>
{
tags.Add(t.BookId,
new List<TagInfo>
{
new TagInfo { Id = t.Id, Name = t.Name }
});
}
}
var favorites = (await Tables.FavoriteBooks.Get(Filters.FavoriteBooks.ByBooks(booksIds, context.OperationInitiator.Id)))?.Select(f => f.BookId)?.ToHashSet();
var blocked = (await Tables.DisgustingBooks.Get(Filters.DisgustingBooks.ByBooks(booksIds, context.OperationInitiator.Id)))?.Select(f => f.BookId)?.ToHashSet();
return books.Select(book =>
new BookInfo
{
@ -34,7 +37,11 @@ namespace BukiVedi.Shared.Services.Mappers
Genres = new GenreInfo[1] { new GenreInfo { Id = book.Genre.Id, Name = book.Genre.Code } },
Title = book.Title,
Year = book.Year,
Tags = tags.ContainsKey(book.Id) ? tags[book.Id] : null!
Tags = tags.ContainsKey(book.Id) ? tags[book.Id] : null!,
IsFavorite = favorites?.Contains(book.Id) ?? false,
IsBlocked = blocked?.Contains(book.Id) ?? false,
Series = string.Empty,
Subseries = string.Empty,
});
}
}

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("BukiVedi.Shared")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+112daccec93b21f74faf3a3b85b2f9a47b2ae81f")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f836c4963b5e99aa3f8cf1767a7e2475c8365585")]
[assembly: System.Reflection.AssemblyProductAttribute("BukiVedi.Shared")]
[assembly: System.Reflection.AssemblyTitleAttribute("BukiVedi.Shared")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

@ -1 +1 @@
509bc785dfee6d2836ba0599e079958f32ff95621449af032e3881340993551e
e4e6ef3d232779668b7356b53e736c596a60d5e2e06421f0b29dbc4bb5a419a2

@ -1 +1 @@
8f1511391c660118f311ede1de029df8d3c4dca0dcff3c3fe53339a3d1836ea1
75e2e150ecac4751ac10fab9d34f7b529ba5779544f9189c3c88503c5831419a

@ -46,5 +46,3 @@ G:\Documents\GitHub\BukiVedi\src\BukiVedi.Shared\obj\Debug\net8.0\BukiVedi.Share
G:\Documents\GitHub\BukiVedi\src\BukiVedi.Shared\obj\Debug\net8.0\refint\BukiVedi.Shared.dll
G:\Documents\GitHub\BukiVedi\src\BukiVedi.Shared\obj\Debug\net8.0\BukiVedi.Shared.pdb
G:\Documents\GitHub\BukiVedi\src\BukiVedi.Shared\obj\Debug\net8.0\ref\BukiVedi.Shared.dll
G:\Documents\GitHub\BukiVedi\src\BukiVedi.Shared\bin\Debug\net8.0\LemmaSharpPrebuilt.pdb
G:\Documents\GitHub\BukiVedi\src\BukiVedi.Shared\bin\Debug\net8.0\LemmaSharpPrebuilt.dll.config

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("BukiVedi.Shared")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+431f2503a837ccf39eac97076a865db39f86a8dd")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f836c4963b5e99aa3f8cf1767a7e2475c8365585")]
[assembly: System.Reflection.AssemblyProductAttribute("BukiVedi.Shared")]
[assembly: System.Reflection.AssemblyTitleAttribute("BukiVedi.Shared")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

@ -1 +1 @@
06715856c937a6aa0ade3b1fa065928029591cc434dd76545f239523dd28567b
98f72f42fc48d45d265a5ffb52e9388479522c8b965310d02bf57c3576b0305d

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("TitleReader")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+112daccec93b21f74faf3a3b85b2f9a47b2ae81f")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f836c4963b5e99aa3f8cf1767a7e2475c8365585")]
[assembly: System.Reflection.AssemblyProductAttribute("TitleReader")]
[assembly: System.Reflection.AssemblyTitleAttribute("TitleReader")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

@ -1 +1 @@
153deb8a7a296fdeedff24e4e5322961f1ebc6ec896447287c432b0746206083
c9e66645ae5573f9df578f3f25060b24528e55f246ced67e86a246dab31a8f04

@ -133,5 +133,3 @@ G:\Documents\GitHub\BukiVedi\src\TitleReader\obj\Debug\net8.0\refint\TitleReader
G:\Documents\GitHub\BukiVedi\src\TitleReader\obj\Debug\net8.0\TitleReader.pdb
G:\Documents\GitHub\BukiVedi\src\TitleReader\obj\Debug\net8.0\TitleReader.genruntimeconfig.cache
G:\Documents\GitHub\BukiVedi\src\TitleReader\obj\Debug\net8.0\ref\TitleReader.dll
G:\Documents\GitHub\BukiVedi\src\TitleReader\bin\Debug\net8.0\LemmaSharpPrebuilt.pdb
G:\Documents\GitHub\BukiVedi\src\TitleReader\bin\Debug\net8.0\LemmaSharpPrebuilt.dll.config

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("TitleReader")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+431f2503a837ccf39eac97076a865db39f86a8dd")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f836c4963b5e99aa3f8cf1767a7e2475c8365585")]
[assembly: System.Reflection.AssemblyProductAttribute("TitleReader")]
[assembly: System.Reflection.AssemblyTitleAttribute("TitleReader")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

@ -1 +1 @@
a7282ddb1bbc4aea6cf73d9f5cd24625e715891dd94841b8c41be90b8822b144
9de5ac71286c28facdb4bb6ca86d853cad2ea78e15c3db020117cee35f3bd8ce

Loading…
Cancel
Save

Powered by TurnKey Linux.