using NewsBlogAbstractions.Models; using NewsBlogAbstractions.WorkAbstractions; using NewsBlogMongoDB.Models; using NewsBlogMongoDB.StoragesContracts; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace NewsBlogView { public partial class FormComment : Form { private readonly ICommentWork _commentLogic; private readonly IArticleWork _articleLogic; private readonly StorageModel _mongoLogic; public FormComment(ICommentWork commentLogic, IArticleWork articleLogic, StorageModel mongoLogic) { InitializeComponent(); _commentLogic = commentLogic; _articleLogic = articleLogic; _mongoLogic = mongoLogic; } private void FormComment_Load(object sender, EventArgs e) { LoadData(); } private void ButtonCreate_Click(object sender, EventArgs e) { Comment newComment = new() { Title = textBoxTitle.Text, Content = textBoxContent.Text, CreateDate = DateTime.Now, ArticleId = ((Article?)comboBoxArticle.SelectedItem)?.Id ?? 0, }; if (Program.isPostgreSQL) _commentLogic.Create(newComment); else _mongoLogic.AddComment(newComment); LoadData(); } private void LoadData() { dataGridView.Rows.Clear(); if (dataGridView.ColumnCount == 0) { dataGridView.Columns.Add("Id", "ID"); dataGridView.Columns.Add("Title", "Заголовок"); dataGridView.Columns.Add("Content", "Содержимое"); dataGridView.Columns.Add("Date", "Дата написания"); dataGridView.Columns.Add("ArticleId", "ArticleId"); dataGridView.Columns["ArticleId"].Visible = false; dataGridView.Columns.Add("Article", "Статья"); } dataGridView.Columns["Id"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; dataGridView.Columns["Title"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; dataGridView.Columns["Content"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; dataGridView.Columns["Date"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; dataGridView.Columns["Article"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; comboBoxArticle.DataSource = _articleLogic.GetAll(); comboBoxArticle.DisplayMember = "Article"; comboBoxArticle.ValueMember = "Title"; if (Program.isPostgreSQL) { var comments = _commentLogic.GetAll(); foreach (var comment in comments) { dataGridView.Rows.Add(comment.Id, comment.Title, comment.Content, comment.CreateDate.ToString("d"), comment.ArticleId, _articleLogic.Get(comment.ArticleId)?.Title); } } else { var comments = _mongoLogic.GetComments(); foreach (var comment in comments) { dataGridView.Rows.Add(comment.Id, comment.Title, comment.Content, comment.Create_date, comment.Article_id, _mongoLogic.GetArticleById(comment.Article_id)?.Title); } } } private void ButtonUpdate_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count > 0) { DataGridViewRow selectedRow = dataGridView.SelectedRows[0]; if (Program.isPostgreSQL) { int commentId = Convert.ToInt32(selectedRow.Cells["Id"].Value); Comment updatedComment = new() { Id = commentId, Title = textBoxTitle.Text, Content = textBoxContent.Text, CreateDate = DateTime.Now, ArticleId = ((Article?)comboBoxArticle.SelectedItem)?.Id ?? 0, }; _commentLogic.Update(updatedComment); } else { string? commentId = selectedRow.Cells["Id"].Value.ToString(); CommentMongo updatedComment = new() { Id = commentId, Title = textBoxTitle.Text, Content = textBoxContent.Text, Create_date = DateTime.Now.ToString("d"), Article_id = _mongoLogic.GetMongoId("Article", ((Article?)comboBoxArticle.SelectedItem)?.Id.ToString() ?? String.Empty), }; _mongoLogic.UpdateComment(updatedComment); } LoadData(); } else { MessageBox.Show("Пожалуйста, выберите комментарий, информацию о котором необходимо обновить"); } } private void ButtonDelete_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count > 0) { DataGridViewRow selectedRow = dataGridView.SelectedRows[0]; if (Program.isPostgreSQL) { int commentId = Convert.ToInt32(selectedRow.Cells["Id"].Value); _commentLogic.Delete(commentId); } else { string? commentId = selectedRow.Cells["Id"].Value.ToString(); _mongoLogic.DeleteComment(commentId); } LoadData(); } else { MessageBox.Show("Пожалуйста, выберите комментарий, информацию о котором необходимо удалить"); } } private void DataGridView_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) { DataGridViewRow row = dataGridView.Rows[e.RowIndex]; textBoxTitle.Text = row.Cells["Title"].Value.ToString(); textBoxContent.Text = row.Cells["Content"].Value.ToString(); comboBoxArticle.SelectedValue = row.Cells["Article"].Value; } } } }