using Core.DomainObjects; using DataProviders.Abstractions; using DomainResults.Common; using Microsoft.Extensions.Logging; using MongoDB.Bson.Serialization; using MongoDB.Driver; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DataProviders.Collections { public interface IUserDataProvider { (User?, IDomainResult) Get(Guid userId); (User?, IDomainResult) GetByUsername(string nickName); (Guid?, IDomainResult) Update(User user); } public class UserDataProvider : CollectionDataProviderBase, IUserDataProvider { private const string _collectionName = "users"; public UserDataProvider( ILogger logger, IMongoClient client, IIdGenerator idGenerator, ISessionService sessionService) : base(logger, client, idGenerator, sessionService) { } public (User?, IDomainResult) Get(Guid userId) { var (list, result) = GetWithPredicate(x => x.Id == userId, _collectionName); if (!result.IsSuccess || list == null) return (null, result); return (list.First(), result); } public (User?, IDomainResult) GetByUsername(string username) { var (list, result) = GetWithPredicate(x => x.Username == username, _collectionName); if (!result.IsSuccess || list == null) return (null, result); return (list.First(), result); } public (Guid?, IDomainResult) Update(User user) => UpdateWithPredicate(user, x => x.Id == user.Id, _collectionName); } }