SUBD/Forum/ForumDatabase/Implements/MessageStorage.cs
2023-05-01 19:05:49 +04:00

90 lines
2.7 KiB
C#

using ForumContracts.BindingModels;
using ForumContracts.SearchModels;
using ForumContracts.StoragesContracts;
using ForumContracts.ViewModels;
using ForumDatabase.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ForumDatabase.Implements
{
public class MessageStorage : IMessageStorage
{
public MessageViewModel? Delete(MessageBindingModel model)
{
using var context = new ForumDatabase();
var element = context.Messages.FirstOrDefault(rec => rec.Id == model.Id);
if (element != null)
{
context.Messages.Remove(element);
context.SaveChanges();
return element.GetViewModel;
}
return null;
}
public MessageViewModel? GetElement(MessageSearchModel model)
{
if (!model.Id.HasValue)
{
return null;
}
using var context = new ForumDatabase();
return context.Messages
.Include(x => x.User)
.Include(x => x.Topic)
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id).GetViewModel;
}
public List<MessageViewModel> GetFilteredList(MessageSearchModel model)
{
using var context = new ForumDatabase();
return context.Messages
.Include(x => x.User)
.Include(x => x.Topic)
.Select(x => x.GetViewModel)
.ToList();
}
public List<MessageViewModel> GetFullList()
{
using var context = new ForumDatabase();
return context.Messages
.Include(x => x.User)
.Include(x => x.Topic)
.Select(x => x.GetViewModel)
.ToList();
}
public MessageViewModel? Insert(MessageBindingModel model)
{
var newMessage = Message.Create(model);
if (newMessage == null)
{
return null;
}
using var context = new ForumDatabase();
context.Messages.Add(newMessage);
context.SaveChanges();
return newMessage.GetViewModel;
}
public MessageViewModel? Update(MessageBindingModel model)
{
using var context = new ForumDatabase();
var component = context.Messages.FirstOrDefault(x => x.Id == model.Id);
if (component == null)
{
return null;
}
component.Update(model);
context.SaveChanges();
return component.GetViewModel;
}
}
}