2023-05-10 20:57:06 +04:00

129 lines
2.8 KiB
C#

using ForumContracts.BindingModels;
using ForumContracts.SearchModels;
using ForumContracts.StorageContracts;
using ForumContracts.ViewModels;
using ForumDatabaseImplement.Models;
using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ForumMongoDataBase.Implements
{
public class UserStorage : IUserStorage
{
private readonly IMongoCollection<User> _collection;
public MongoClient context;
public UserStorage()
{
context = ForumMongoDataBase.getInstance().client;
_collection = context.GetDatabase("forum").GetCollection<User>("users");
}
public UserViewModel? Delete(UserBindingModel model)
{
var filter = Builders<User>.Filter.Eq(u => u.Id, model.Id);
var user = _collection.FindOneAndDelete(filter);
if (user == null)
{
return null;
}
return user.GetViewModel();
}
public UserViewModel? GetElement(UserSearchModel model)
{
var filter = Builders<User>.Filter.Empty;
if (model.Id.HasValue)
{
filter &= Builders<User>.Filter.Eq(u => u.Id, model.Id.Value);
}
if (!string.IsNullOrEmpty(model.Nickname) && !string.IsNullOrEmpty(model.Password))
{
filter &= Builders<User>.Filter.Eq(u => u.Nickname, model.Nickname)
& Builders<User>.Filter.Eq(u => u.Password, model.Password);
}
if (!string.IsNullOrEmpty(model.Email))
{
filter &= Builders<User>.Filter.Eq(u => u.Email, model.Email);
}
var user = _collection.Find(filter)
.FirstOrDefault();
if (user == null)
{
return null;
}
return user.GetViewModel();
}
public List<UserViewModel> GetFilteredList(UserSearchModel model)
{
if (string.IsNullOrEmpty(model.Nickname))
{
return new List<UserViewModel>();
}
var filter = Builders<User>.Filter.Regex(u => u.Nickname, new BsonRegularExpression(model.Nickname, "i"));
var users = _collection.Find(filter)
.ToList()
.Select(u => u.GetViewModel())
.ToList();
return users;
}
public List<UserViewModel> GetFullList()
{
var users = _collection.Find(_ => true)
.ToList()
.Select(u => u.GetViewModel())
.ToList();
return users;
}
public UserViewModel? Insert(UserBindingModel model)
{
var user = User.Create(model);
if (user == null)
{
return null;
}
_collection.InsertOne(user);
return user.GetViewModel();
}
public UserViewModel? Update(UserBindingModel model)
{
var filter = Builders<User>.Filter.Eq(u => u.Id, model.Id);
var user = _collection.Find(filter).FirstOrDefault();
if (user == null)
{
return null;
}
user.Update(model);
_collection.ReplaceOne(filter, user);
return user.GetViewModel();
}
}
}