change on mongodb

This commit is contained in:
DozorovaA.A 2023-05-06 11:53:48 +04:00
parent 8d2fc1a9d6
commit 53204eab06
13 changed files with 604 additions and 507 deletions

View File

@ -157,7 +157,11 @@ namespace Announcements
comboBox1.Visible = false; comboBox1.Visible = false;
button3.Visible = false; button3.Visible = false;
button1.Visible = true; button1.Visible = true;
label7.Text = "Дата обновления: " + (Id.changeDate < Id.createDate ? Id.createDate.Date : Id.changeDate.Date); if(Id.createDate.HasValue)
{
label7.Text = "Дата обновления: " + (Id.changeDate.Value < Id.createDate.Value ? (DateTime)Id.createDate.Value.Date : (DateTime)Id.changeDate.Value.Date);
}
if (Id.isClose) if (Id.isClose)
{ {
label3.Visible = true; label3.Visible = true;

View File

@ -10,6 +10,8 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
<PackageReference Include="MongoDB.Bson" Version="2.19.1" />
<PackageReference Include="MongoDB.Driver" Version="2.19.1" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.3" /> <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.3" />
</ItemGroup> </ItemGroup>

View File

@ -1,4 +1,5 @@
using Announcements.Models; using Announcements.Models;
using MongoDB.Bson;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;

View File

@ -1,25 +0,0 @@
using Announcements.Database.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.VisualBasic.ApplicationServices;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Announcements.Database
{
public class DataBaseContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (optionsBuilder.IsConfigured == false)
{
optionsBuilder.UseNpgsql("Host=192.168.1.70;Port=5432;Database=database;Username=postgres;Password=123");
}
base.OnConfiguring(optionsBuilder);
}
}
}

View File

@ -2,6 +2,8 @@
using Announcements.Database.Models; using Announcements.Database.Models;
using Announcements.Models; using Announcements.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using MongoDB.Bson;
using MongoDB.Driver;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
@ -26,150 +28,235 @@ namespace Announcements.Database.Implements
} }
public bool BlockingAnnouncement(IAnnouncement model) public bool BlockingAnnouncement(IAnnouncement model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("announcement");
try
{ {
try var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
{
_db.Database.ExecuteSqlRaw(@$"UPDATE public.blocking "+ var update = Builders<BsonDocument>.Update.Set("BlockingId", model.blockingId);
@$"SET blockingid = {model.blockingId} WHERE id = {model.id}", new object[] { });
return true; collection.UpdateOne(filter, update);
} return true;
catch (Exception ex) }
{ catch (Exception ex)
return false; {
} return false;
} }
} }
public bool CreateAnnouncement(IAnnouncement model) public bool CreateAnnouncement(IAnnouncement model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("announcement");
var reviews = new BsonArray();
//model.reviews.ToList().Select(review => reviews.Add(new BsonDocument
//{
// ["_id"] = review.id,
// ["Text"] = review.text,
// ["Complaints"] = review.complaints,
// ["AuthorID"] = review.authorId.ToString(),
// ["BlockingId"] = review.blockingId.ToString()
//}));
try
{ {
try var update = new BsonDocument
{ {
var script = @$"INSERT INTO public.announcement " + {"_id", model.id+1},
@$"(text, createdate, changedate, complaints, isclose, categoryid, authorid, blockingid)" + { "Text", model.text},
$@"VALUES ('{model.text}', '{model.createDate}', '{model.changeDate}', " +
$@"{model.complaints}, {model.isClose}, {model.categoryId.id}, {model.authorId.id}, {model.blockingId?.id.ToString()}); "; {"Createdate", model.createDate},
_db.Database.ExecuteSqlRaw(script, new object[] { });
return true; {"Changedate", model.changeDate},
}
catch (Exception ex) {"Complaints", model.complaints},
{
return false; {"Isclose", model.isClose},
}
{"Review", reviews},
{"CategoryId", model.categoryId.id.ToString()},
{"AuthorId", model.authorId.id.ToString()}
//{ "BlockingId", model.blockingId?.ToString()}
};
collection.InsertOne(update);
return true;
}
catch (Exception ex)
{
return false;
} }
} }
public bool DeleteAnnouncement(IAnnouncement model) public bool DeleteAnnouncement(IAnnouncement model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("announcement");
var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
try
{ {
try collection.DeleteOne(filter);
{ return true;
_db.Database.ExecuteSqlRaw(@$"DELETE FROM public.announcement " + }
@$" WHERE id = {model.id}; ", new object[] { }); catch (Exception ex)
return true; {
} return false;
catch (Exception ex)
{
return false;
}
} }
} }
public IAnnouncement? ReadElement(int id) public IAnnouncement? ReadElement(int id)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("announcement");
var filter = Builders<BsonDocument>.Filter.Eq("_id", id);
var findAnn = collection.Find(filter).FirstOrDefault();
var reviews = new BsonArray();
//var rev = new List.reviews.ToList().Select(review => reviews.Add(new BsonDocument
//{
// review.id = ["_id"],
// ["Text"] = review.text,
// ["Complaints"] = review.complaints,
// ["AuthorID"] = review.authorId.ToString(),
// ["BlockingId"] = review.blockingId.ToString()
//}));
IAnnouncement announcement = new Announcement
{ {
using (var command = _db.Database.GetDbConnection().CreateCommand()) id = Convert.ToInt32(findAnn["_id"]),
{ text = findAnn["Text"].ToString(),
command.CommandText = $"SELECT * FROM public.announcement WHERE id = {id}";
command.CommandType = CommandType.Text;
_db.Database.OpenConnection(); createDate = findAnn["Createdate"].ToString().ToLower() == "bsonnull" ? null : Convert.ToDateTime(findAnn["Createdate"]),
using (var result = command.ExecuteReader()) changeDate = findAnn["Changedate"].ToString().ToLower() == "bsonnull" ? null : Convert.ToDateTime(findAnn["Changedate"]),
{
Announcement announcement = new Announcement();
while (result.Read()) complaints = Convert.ToInt32(findAnn["Complaints"]),
{
announcement = new Announcement
{
id = Convert.ToInt32(result["id"]),
text = result["text"].ToString(),
createDate = Convert.ToDateTime(result["createdate"]),
changeDate = Convert.ToDateTime(result["changedate"]),
complaints = Convert.ToInt32(result["complaints"]),
isClose = (bool)result["isclose"],
categoryId = categoryLogic.ReadElement(Convert.ToInt32(result["categoryId"])),
authorId = userLogic.ReadElement(Convert.ToInt32(result["authorid"])),
blockingId = blockingLogic.ReadElement(Convert.ToInt32(result["blockingid"]))
};
}
return announcement; isClose = Convert.ToBoolean(findAnn["Isclose"]),
}
} reviews = new IReview [5],
}
categoryId = categoryLogic.ReadElement(Convert.ToInt32(findAnn["CategoryId"])),
authorId = userLogic.ReadElement(Convert.ToInt32(findAnn["AuthorId"])),
blockingId = findAnn["BlockingId"].ToString().ToLower() != "bsonnull" ? blockingLogic.ReadElement(Convert.ToInt32(findAnn["BlockingId"])) : null
};
return announcement;
} }
public List<IAnnouncement>? ReadList() public List<IAnnouncement>? ReadList()
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("announcement");
var entities = new List<IAnnouncement>();
var ann = collection.Find(new BsonDocument()).ToList();
var u = ann[0];
ann.ForEach(u =>
{ {
using (var command = _db.Database.GetDbConnection().CreateCommand()) try
{ {
command.CommandText = "SELECT * FROM public.announcement"; entities.Add(new Announcement
command.CommandType = CommandType.Text;
_db.Database.OpenConnection();
using (var result = command.ExecuteReader())
{ {
var entities = new List<IAnnouncement>(); id = Convert.ToInt32(u["_id"]),
text = u["Text"].ToString(),
while (result.Read()) //createDate = u["Createdate"].ToString().ToLower() == "bsonnull" ? null : Convert.ToDateTime(u["Createdate"]),
{
entities.Add(new Announcement
{
id = Convert.ToInt32(result["id"]),
text = result["text"].ToString(),
createDate = Convert.ToDateTime(result["createdate"]),
changeDate = Convert.ToDateTime(result["changedate"]),
complaints = Convert.ToInt32(result["complaints"]),
isClose = (bool)result["isclose"],
categoryId = categoryLogic.ReadElement(Convert.ToInt32(result["categoryid"])),
authorId = userLogic.ReadElement(Convert.ToInt32(result["authorid"])),
blockingId = blockingLogic.ReadElement(Convert.ToInt32(result["blockingid"]))
});
}
return entities; //changeDate = u["Changedate"].ToString().ToLower() == "bsonnull" ? null : Convert.ToDateTime(u["Changedate"]),
}
complaints = Convert.ToInt32(u["Complaints"]),
isClose = Convert.ToBoolean(u["Isclose"]),
reviews = new Review[5],
categoryId = (Category)categoryLogic.ReadElement(Convert.ToInt32(u["CategoryId"])),
authorId = (User)userLogic.ReadElement(Convert.ToInt32(u["AuthorId"])),
blockingId = (Blocking?)(u["BlockingId"].ToString().ToLower() == "bsonnull" ? null : blockingLogic.ReadElement(Convert.ToInt32(u["BlockingId"])))
});
} }
} catch (Exception ex) { }
});
return entities;
} }
public bool UpdateAnnouncement(IAnnouncement model) public bool UpdateAnnouncement(IAnnouncement model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("announcement");
var reviews = new BsonArray();
if(reviews != null && reviews.Count > 0)
{ {
try model.reviews.ToList().Select(review => reviews.Add(new BsonDocument
{ {
var script = @$"UPDATE public.announcement " + ["_id"] = review.id,
$"SET text='{model.text}', createdate='{model.createDate}', changedate='{model.changeDate}', complaints={model.complaints}, " + ["Text"] = review.text,
$"isclose={model.isClose}, categoryid={model.categoryId.id}, authorid={model.authorId.id}, blockingid={model.blockingId.id} " + ["Complaints"] = review.complaints,
$"WHERE id = {model.id}"; ["AuthorID"] = review.authorId.ToString(),
_db.Database.ExecuteSqlRaw(script, new object[] { }); ["BlockingId"] = review.blockingId.ToString()
return true; }));
} }
catch (Exception ex)
var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
try
{
var update = new BsonDocument
{ {
return false; {"_id", model.id},
} { "Text", model.text},
{"Createdate", model.createDate},
{"Changedate", model.changeDate},
{"Complaints", model.complaints},
{"Isclose", model.isClose},
{"Review", reviews},
{"CategoryId", model.categoryId.id.ToString()},
{"AuthorId", model.authorId.id.ToString()},
{ "BlockingId", model.blockingId.id.ToString()}
};
collection.UpdateOne(filter, update);
return true;
}
catch (Exception ex)
{
return false;
} }
} }
} }

View File

@ -2,6 +2,8 @@
using Announcements.Database.Models; using Announcements.Database.Models;
using Announcements.Models; using Announcements.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using MongoDB.Bson;
using MongoDB.Driver;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
@ -15,115 +17,114 @@ namespace Announcements.Database.Implements
{ {
public bool CreateBlocking(IBlocking model) public bool CreateBlocking(IBlocking model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("blocking");
try
{ {
try var update = new BsonDocument
{ {
_db.Database.ExecuteSqlRaw(@$"INSERT INTO public.blocking" + {"_id", model.id},
@$"(name)" + { "Name", model.name}
@$"VALUES ('{model.name}');", new object[] { }); };
return true; collection.InsertOne(update);
} return true;
catch (Exception ex) }
{ catch (Exception ex)
return false; {
} return false;
} }
} }
public bool DeleteBlocking(IBlocking model) public bool DeleteBlocking(IBlocking model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("blocking");
var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
try
{ {
try collection.DeleteOne(filter);
{ return true;
_db.Database.ExecuteSqlRaw(@$"DELETE FROM public.blocking " + }
@$" WHERE id = {model.id}; ", new object[] { }); catch (Exception ex)
return true; {
} return false;
catch (Exception ex)
{
return false;
}
} }
} }
public IBlocking? ReadElement(int id) public IBlocking? ReadElement(int id)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("blocking");
var filter = Builders<BsonDocument>.Filter.Eq("_id", id);
var findBlock = collection.Find(filter).FirstOrDefault();
if(findBlock != null)
{ {
using (var command = _db.Database.GetDbConnection().CreateCommand()) IBlocking blocking = new Blocking
{ {
command.CommandText = $"SELECT * FROM public.blocking WHERE id = {id}"; id = Convert.ToInt32(findBlock["_id"]),
command.CommandType = CommandType.Text; name = findBlock["Name"].ToString()
};
_db.Database.OpenConnection(); return blocking;
using (var result = command.ExecuteReader())
{
Blocking blocking = new Blocking();
while (result.Read())
{
blocking = new Blocking
{
id = Convert.ToInt32(result["id"]),
name = result["name"].ToString()
};
}
return blocking;
}
}
} }
return null;
} }
public List<IBlocking>? ReadList() public List<IBlocking>? ReadList()
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("blocking");
var entities = new List<IBlocking>();
var blockings = collection.Find(new BsonDocument()).ToList();
blockings.ForEach(u =>
{ {
using (var command = _db.Database.GetDbConnection().CreateCommand()) entities.Add(new Blocking
{ {
command.CommandText = "SELECT * FROM public.blocking"; id = Convert.ToInt32(u["_id"]),
command.CommandType = CommandType.Text; name = u["Name"].ToString()
});
});
_db.Database.OpenConnection(); return entities;
using (var result = command.ExecuteReader())
{
var entities = new List<IBlocking>();
while (result.Read())
{
entities.Add(new Blocking
{
id = Convert.ToInt32(result["id"]),
name = result["name"].ToString()
});
}
return entities;
}
}
}
} }
public bool UpdateBlocking(IBlocking model) public bool UpdateBlocking(IBlocking model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("blocking");
try
{ {
try var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
var update = new BsonDocument
{ {
_db.Database.ExecuteSqlRaw(@$"UPDATE public.blocking " + {"_id", model.id},
@$"SET name = {model.name} " + { "Name", model.name}
@$"WHERE id = {model.id}", new object[] { }); };
return true; collection.UpdateOne(filter, update);
} return true;
catch (Exception ex) }
{ catch (Exception ex)
return false; {
} return false;
} }
} }
} }

View File

@ -2,6 +2,8 @@
using Announcements.Database.Models; using Announcements.Database.Models;
using Announcements.Models; using Announcements.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using MongoDB.Bson;
using MongoDB.Driver;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
@ -15,114 +17,114 @@ namespace Announcements.Database.Implements
{ {
public bool CreateCategory(ICategory model) public bool CreateCategory(ICategory model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("category");
try
{ {
try var update = new BsonDocument
{ {
_db.Database.ExecuteSqlRaw(@$"INSERT INTO public.category" + {"_id", model.id},
@$"(name)" + { "Name", model.name}
@$"VALUES ('{model.name}');", new object[] { }); };
return true; collection.InsertOne(update);
} return true;
catch (Exception ex) }
{ catch (Exception ex)
return false; {
} return false;
} }
} }
public bool DeleteCategory(ICategory model) public bool DeleteCategory(ICategory model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("category");
var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
try
{ {
try collection.DeleteOne(filter);
{ return true;
_db.Database.ExecuteSqlRaw(@$"DELETE FROM public.category " + }
@$" WHERE id = {model.id}; ", new object[] { }); catch (Exception ex)
return true; {
} return false;
catch (Exception ex)
{
return false;
}
} }
} }
public ICategory? ReadElement(int id) public ICategory? ReadElement(int id)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("category");
var filter = Builders<BsonDocument>.Filter.Eq("_id", id);
var findUser = collection.Find(filter).FirstOrDefault();
ICategory category = new Category
{ {
using (var command = _db.Database.GetDbConnection().CreateCommand()) id = Convert.ToInt32(findUser["_id"]),
{ name = findUser["Name"].ToString()
command.CommandText = $"SELECT * FROM public.category WHERE id = {id}"; };
command.CommandType = CommandType.Text;
_db.Database.OpenConnection(); return category;
using (var result = command.ExecuteReader())
{
Category category = new Category();
while (result.Read())
{
category = new Category
{
id = Convert.ToInt32(result["id"]),
name = result["name"].ToString()
};
}
return category;
}
}
}
} }
public List<ICategory>? ReadList() public List<ICategory>? ReadList()
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("category");
var entities = new List<ICategory>();
var categories = collection.Find(new BsonDocument()).ToList();
categories.ForEach(u =>
{ {
using (var command = _db.Database.GetDbConnection().CreateCommand()) if(!u.Contains("_Id"))
{ {
command.CommandText = "SELECT * FROM public.category"; entities.Add(new Category
command.CommandType = CommandType.Text;
_db.Database.OpenConnection();
using (var result = command.ExecuteReader())
{ {
var entities = new List<ICategory>(); id = Convert.ToInt32(u["_id"]),
name = u["Name"].ToString()
while (result.Read()) });
{
entities.Add(new Category
{
id = Convert.ToInt32(result["id"]),
name = result["name"].ToString()
});
}
return entities;
}
} }
}
});
return entities;
} }
public bool UpdateCategory(ICategory model) public bool UpdateCategory(ICategory model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("category");
try
{ {
try var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
var update = new BsonDocument
{ {
_db.Database.ExecuteSqlRaw(@$"UPDATE public.category " + {"_id", model.id},
@$"SET name = {model.name} "+ { "Name", model.name}
@$"WHERE id = {model.id}", new object[] { }); };
return true; collection.UpdateOne(filter, update);
} return true;
catch (Exception ex) }
{ catch (Exception ex)
return false; {
} return false;
} }
} }
} }

View File

@ -2,6 +2,8 @@
using Announcements.Database.Models; using Announcements.Database.Models;
using Announcements.Models; using Announcements.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using MongoDB.Bson;
using MongoDB.Driver;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
@ -26,143 +28,130 @@ namespace Announcements.Database.Implements
public bool BlockingReview(IReview model) public bool BlockingReview(IReview model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("review");
try
{ {
try var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
{
_db.Database.ExecuteSqlRaw(@$"UPDATE public.review SET isadmin = true WHERE id = {model.id}", new object[] { }); var update = Builders<BsonDocument>.Update.Set("BlockingId", model.blockingId);
return true;
} collection.UpdateOne(filter, update);
catch (Exception ex) return true;
{ }
return false; catch (Exception ex)
} {
return false;
} }
} }
public bool CreateReview(IReview model) public bool CreateReview(IReview model)
{ {
using (var _db = new DataBaseContext()) //MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
{
try //var database = dbClient.GetDatabase("database");
{ //var collection = database.GetCollection<BsonDocument>("announcement");
_db.Database.ExecuteSqlRaw(@$"INSERT INTO public.review "+ //var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
$"(text, createdate, complaints, announcementid, authorid, blockingid) "+
$"VALUES('{model.text}', '{model.createDate}', {model.complaints}, {model.announcementId.id}, "+ //var update = new
$"{model.authorId.id}, {model.blockingId.id}); ", new object[] { });
return true; //model.reviews.ToList().Select(review => reviews.Add(new BsonDocument
} //{
catch (Exception ex) // ["_id"] = review.id,
{ // ["Text"] = review.text,
return false; // ["Complaints"] = review.complaints,
} // ["AuthorID"] = review.authorId.ToString(),
} // ["BlockingId"] = review.blockingId.ToString()
//}));
return true;
} }
public bool DeleteReview(IReview model) public bool DeleteReview(IReview model)
{ {
using (var _db = new DataBaseContext()) //using (var _db = new DataBaseContext())
{ //{
try // try
{ // {
_db.Database.ExecuteSqlRaw(@$"DELETE FROM public.review " + // _db.Database.ExecuteSqlRaw(@$"DELETE FROM public.review " +
@$" WHERE id = {model.id}; ", new object[] { }); // @$" WHERE id = {model.id}; ", new object[] { });
return true; // return true;
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
return false; // return false;
} // }
} //}
return true;
} }
public IReview? ReadElement(int id) public IReview? ReadElement(int id)
{ {
using (var _db = new DataBaseContext()) //MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
{
using (var command = _db.Database.GetDbConnection().CreateCommand())
{
command.CommandText = $"SELECT * FROM public.review WHERE id = {id}";
command.CommandType = CommandType.Text;
_db.Database.OpenConnection(); //var database = dbClient.GetDatabase("database");
//var collection = database.GetCollection<BsonDocument>("announcement");
//var filter = Builders<BsonDocument>.Filter.Eq("student_id", 10000);
return new Review();
using (var result = command.ExecuteReader())
{
Review review = new Review();
while (result.Read())
{
review = new Review
{
id = Convert.ToInt32(result["id"]),
text = result["text"].ToString(),
createDate = Convert.ToDateTime(result["createdate"]),
complaints = Convert.ToInt32(result["complaints"]),
announcementId = announcementLogic.ReadElement(Convert.ToInt32(result["announcementId"])),
authorId = userLogic.ReadElement(Convert.ToInt32(result["authorid"])),
blockingId = blockingLogic.ReadElement(Convert.ToInt32(result["blockingId"]))
};
}
return review;
}
}
}
} }
public List<IReview>? ReadList() public List<IReview>? ReadList()
{ {
using (var _db = new DataBaseContext()) //using (var _db = new DataBaseContext())
{ //{
using (var command = _db.Database.GetDbConnection().CreateCommand()) // using (var command = _db.Database.GetDbConnection().CreateCommand())
{ // {
command.CommandText = $"SELECT * FROM public.review"; // command.CommandText = $"SELECT * FROM public.review";
command.CommandType = CommandType.Text; // command.CommandType = CommandType.Text;
_db.Database.OpenConnection(); // _db.Database.OpenConnection();
using (var result = command.ExecuteReader()) // using (var result = command.ExecuteReader())
{ // {
var reviews = new List<IReview>(); // var reviews = new List<IReview>();
while (result.Read()) // while (result.Read())
{ // {
reviews.Add(new Review // reviews.Add(new Review
{ // {
id = Convert.ToInt32(result["id"]), // id = Convert.ToInt32(result["id"]),
text = result["text"].ToString(), // text = result["text"].ToString(),
createDate = Convert.ToDateTime(result["createdate"]), // createDate = Convert.ToDateTime(result["createdate"]),
complaints = Convert.ToInt32(result["complaints"]), // complaints = Convert.ToInt32(result["complaints"]),
announcementId = announcementLogic.ReadElement(Convert.ToInt32(result["announcementId"])), // announcementId = announcementLogic.ReadElement(Convert.ToInt32(result["announcementId"])),
authorId = userLogic.ReadElement(Convert.ToInt32(result["authorid"])), // authorId = userLogic.ReadElement(Convert.ToInt32(result["authorid"])),
blockingId = blockingLogic.ReadElement(Convert.ToInt32(result["blockingId"])) // blockingId = blockingLogic.ReadElement(Convert.ToInt32(result["blockingId"]))
}); // });
} // }
return reviews; // return reviews;
} // }
} // }
} //}
return new List<IReview>();
} }
public bool UpdateReview(IReview model) public bool UpdateReview(IReview model)
{ {
using (var _db = new DataBaseContext()) //using (var _db = new DataBaseContext())
{ //{
try // try
{ // {
_db.Database.ExecuteSqlRaw(@$"UPDATE public.review "+ // _db.Database.ExecuteSqlRaw(@$"UPDATE public.review "+
@$"SET text={model.text}, createdate={model.createDate}, complaints={model.complaints}, announcementid={model.announcementId.id}, "+ // @$"SET text={model.text}, createdate={model.createDate}, complaints={model.complaints}, announcementid={model.announcementId.id}, "+
@$"authorid={model.authorId.id}, blockingid={model.blockingId.id} "+ // @$"authorid={model.authorId.id}, blockingid={model.blockingId.id} "+
@$" WHERE id = ", new object[] { }); // @$" WHERE id = ", new object[] { });
return true; // return true;
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
return false; // return false;
} // }
} //}
return true;
} }
} }
} }

View File

@ -2,6 +2,8 @@
using Announcements.Database.Models; using Announcements.Database.Models;
using Announcements.Models; using Announcements.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using MongoDB.Bson;
using MongoDB.Driver;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
@ -15,146 +17,178 @@ namespace Announcements.Database.Implements
{ {
public bool BlockingUser(IUser model) public bool BlockingUser(IUser model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("user");
try
{ {
try var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
{
_db.Database.ExecuteSqlRaw(@$"UPDATE public.user SET isadmin = true WHERE id = {model.id}", new object[] { }); var update = Builders<BsonDocument>.Update.Set("isAdmin", true);
return true;
} collection.UpdateOne(filter, update);
catch (Exception ex) return true;
{ }
return false; catch (Exception ex)
} {
return false;
} }
} }
public bool CreateUser(IUser model) public bool CreateUser(IUser model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("user");
try
{ {
try var update = new BsonDocument
{ {
_db.Database.ExecuteSqlRaw(@$"INSERT INTO public.user"+ {"_id", model.id},
@$"(name, surname, patronymic, email, password, registrdate, rating, isadmin)"+ { "Name", model.name},
@$"VALUES ('{model.name}', '{model.surname}', '{model.patronymic}', '{model.email}', "+
@$"'{model.password}', '{model.registrDate}'::timestamp, '{model.rating}', '{model.isAdmin}');", new object[] { }); {"Surname", model.surname},
return true;
} {"Patronymic", model.patronymic},
catch (Exception ex)
{ {"Email", model.email},
return false;
} {"Password", model.password},
{"Registerdate", model.registrDate},
{"Rating", model.rating},
{"isAdmin", model.isAdmin }
};
collection.InsertOne(update);
return true;
}
catch (Exception ex)
{
return false;
} }
} }
public bool DeleteUser(IUser model) public bool DeleteUser(IUser model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("user");
var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
try
{ {
try collection.DeleteOne(filter);
{ return true;
_db.Database.ExecuteSqlRaw(@$"DELETE FROM public.user "+ }
@$" WHERE id = {model.id}; ", new object[] { }); catch(Exception ex)
return true; {
} return false;
catch (Exception ex)
{
return false;
}
} }
} }
public IUser? ReadElement(int id) public IUser? ReadElement(int id)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
{
using (var command = _db.Database.GetDbConnection().CreateCommand()) var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("user");
var filter = Builders<BsonDocument>.Filter.Eq("_id", id);
var findUser = collection.Find(filter).FirstOrDefault();
IUser user = new User
{ {
command.CommandText = $"SELECT * FROM public.user WHERE id = {id}"; id = Convert.ToInt32(findUser["_id"]),
command.CommandType = CommandType.Text; name = findUser["Name"].ToString(),
surname = findUser["Surname"].ToString(),
patronymic = findUser["Patronymic"].ToString(),
password = findUser["Password"].ToString(),
email = findUser["Email"].ToString(),
registrDate = findUser["Registerdate"].ToString().ToLower() == "bsonnull" ? null : Convert.ToDateTime(findUser["Registerdate"]),
//rating = (Convert.ToDouble(findUser["Rating"])),
isAdmin = Convert.ToBoolean(findUser["isAdmin"])
};
_db.Database.OpenConnection(); return user;
using (var result = command.ExecuteReader())
{
User user = new User();
while (result.Read())
{
user = new User
{
id = Convert.ToInt32(result["id"]),
name = result["name"].ToString(),
surname = result["surname"].ToString(),
patronymic = result["patronymic"].ToString(),
password = result["password"].ToString(),
email = result["email"].ToString(),
registrDate = Convert.ToDateTime(result["registrdate"]),
rating = (float)Convert.ToDecimal(result["rating"]),
isAdmin = (bool)result["isadmin"]
};
}
return user;
}
}
}
} }
public List<IUser>? ReadList() public List<IUser>? ReadList()
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("user");
var entities = new List<IUser>();
var users = collection.Find(new BsonDocument()).ToList();
users.ForEach(u =>
{ {
using (var command = _db.Database.GetDbConnection().CreateCommand()) DateTime res;
DateTime.TryParse(u["Registerdate"].ToString(), out res);
entities.Add(new User
{ {
command.CommandText = "SELECT * FROM public.user"; id = Convert.ToInt32(u["_id"]),
command.CommandType = CommandType.Text; name = u["Name"].ToString(),
surname = u["Surname"].ToString(),
patronymic = u["Patronymic"].ToString(),
password = u["Password"].ToString(),
email = u["Email"].ToString(),
registrDate = res == null ? DateTime.UtcNow : res,
rating = (float)(Convert.ToDouble(u["Rating"])),
isAdmin = (bool)u["isAdmin"]
});
});
_db.Database.OpenConnection(); return entities;
using (var result = command.ExecuteReader())
{
var entities = new List<IUser>();
while (result.Read())
{
entities.Add(new User
{
id = Convert.ToInt32(result["id"]),
name = result["name"].ToString(),
surname = result["surname"].ToString(),
patronymic = result["patronymic"].ToString(),
password = result["password"].ToString(),
email = result["email"].ToString(),
registrDate = Convert.ToDateTime(result["registrdate"]),
rating = (float)(Convert.ToDouble(result["rating"])),
isAdmin = (bool)result["isadmin"]
});
}
return entities;
}
}
}
} }
public bool UpdateUser(IUser model) public bool UpdateUser(IUser model)
{ {
using (var _db = new DataBaseContext()) MongoClient dbClient = new MongoClient(@"mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.2");
var database = dbClient.GetDatabase("database");
var collection = database.GetCollection<BsonDocument>("user");
try
{ {
try var filter = Builders<BsonDocument>.Filter.Eq("_id", model.id);
var update = new BsonDocument
{ {
_db.Database.ExecuteSqlRaw(@$"UPDATE public.user "+ {"_id", model.id},
@$"SET name = {model.name}, surname = {model.surname}, patronymic = {model.patronymic}, email = {model.email}, "+ { "Name", model.name},
@$"password = {model.password}, registrdate = {model.registrDate}, rating = {model.rating}, isadmin = {model.isAdmin} "+
@$"WHERE id = {model.id}", new object[] { }); {"Surname", model.surname},
return true;
} {"Patronymic", model.patronymic},
catch (Exception ex)
{ {"Email", model.email},
return false;
} {"Password", model.password},
{"Registerdate", model.registrDate},
{"Rating", model.rating},
{"isAdmin", model.isAdmin }
};
collection.UpdateOne(filter, update);
return true;
}
catch (Exception ex)
{
return false;
} }
} }
} }

View File

@ -13,13 +13,14 @@ namespace Announcements.Database.Models
public string text { get; set; } public string text { get; set; }
public DateTime createDate { get; set; } public DateTime? createDate { get; set; }
public DateTime changeDate { get; set; } public DateTime? changeDate { get; set; }
public int complaints { get; set; } public int complaints { get; set; }
public bool isClose { get; set; } public bool isClose { get; set; }
public IReview[] reviews { get; set; }
public ICategory categoryId { get; set; } public ICategory categoryId { get; set; }

View File

@ -21,7 +21,7 @@ namespace Announcements.Database.Models
public string password { get; set; } public string password { get; set; }
public DateTime registrDate { get; set; } public DateTime? registrDate { get; set; }
public float rating { get; set; } public float rating { get; set; }

View File

@ -10,10 +10,11 @@ namespace Announcements.Models
{ {
int id { get; } int id { get; }
string text { get; } string text { get; }
DateTime createDate { get; } DateTime? createDate { get; }
DateTime changeDate { get; } DateTime? changeDate { get; }
int complaints { get; } int complaints { get; }
bool isClose { get; } bool isClose { get; }
IReview[] reviews { get; }
ICategory categoryId { get; } ICategory categoryId { get; }
IUser authorId { get; } IUser authorId { get; }
IBlocking blockingId { get; } IBlocking blockingId { get; }

View File

@ -14,7 +14,7 @@ namespace Announcements.Models
string patronymic {get; } string patronymic {get; }
string email {get; } string email {get; }
string password {get; } string password {get; }
DateTime registrDate { get; } DateTime? registrDate { get; }
float rating { get; } float rating { get; }
bool isAdmin {get; } bool isAdmin {get; }