129 lines
2.8 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|