Models в БД

This commit is contained in:
Анна Забродина 2024-03-10 21:48:29 +04:00
parent 1b78f8c78a
commit 0f18873a38
9 changed files with 438 additions and 7 deletions

View File

@ -1,9 +1,4 @@
using HotelDataModels.Models; using HotelDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HotelContracts.BindingModels namespace HotelContracts.BindingModels
{ {

View File

@ -26,6 +26,6 @@ namespace HotelContracts.ViewModels
public string OrganiserEmail { get; set; } = string.Empty; public string OrganiserEmail { get; set; } = string.Empty;
[DisplayName("Телефон организатора")] [DisplayName("Телефон организатора")]
public string OrganiserNumber { get; set; } = string.Empty; public string OrganiserPhoneNumber { get; set; } = string.Empty;
} }
} }

View File

@ -0,0 +1,106 @@
using HotelContracts.BindingModels;
using HotelContracts.ViewModels;
using HotelDataModels.Models;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace HotelDataBaseImplement.Models
{
public class Conference : IConferenceModel
{
[Required]
public string ConferenceName { get; set; } = string.Empty;
[Required]
public DateTime StartDate { get; set; } = DateTime.Now;
public int OrganiserId { get; private set; }
public int Id { get; private set; }
public virtual Organiser Organiser { get; set; }
private Dictionary<int, IMemberModel> _conferenceMembers = null;
[NotMapped]
public Dictionary<int, IMemberModel> ConferenceMembers
{
get
{
if (_conferenceMembers == null)
{
using var context = new HotelDataBase();
_conferenceMembers = Members
.ToDictionary(x => x.MemberId, x => (context.Members
.FirstOrDefault(y => y.Id == x.MemberId)! as IMemberModel));
}
return _conferenceMembers;
}
}
[ForeignKey("ConferenceId")]
public virtual List<ConferenceBooking> ConferenceBookings { get; set; } = new();
[ForeignKey("ConferenceId")]
public virtual List<ConferenceMember> Members { get; set; } = new();
public static Conference Create(HotelDataBase context, ConferenceBindingModel model)
{
return new Conference()
{
Id = model.Id,
ConferenceName = model.ConferenceName,
StartDate = model.StartDate,
OrganiserId = model.OrganiserId,
Members = model.ConferenceMembers.Select(x => new ConferenceMember
{
Member = context.Members.First(y => y.Id == x.Key),
}).ToList()
};
}
public void Update(ConferenceBindingModel model)
{
ConferenceName = model.ConferenceName;
StartDate = model.StartDate;
OrganiserId = model.OrganiserId;
}
public ConferenceViewModel GetViewModel => new()
{
Id = Id,
ConferenceName = ConferenceName,
StartDate = StartDate,
OrganiserId = OrganiserId,
ConferenceMembers = ConferenceMembers
};
public void UpdateMembers(HotelDataBase context, ConferenceBindingModel model)
{
var conferenceMembers = context.ConferenceMembers.Where(rec => rec.ConferenceId == model.Id).ToList();
if (conferenceMembers != null && conferenceMembers.Count > 0)
{
context.ConferenceMembers.RemoveRange(conferenceMembers.Where(rec => !model.ConferenceMembers.ContainsKey(rec.MemberId)));
context.SaveChanges();
foreach (var updateMember in conferenceMembers)
{
model.ConferenceMembers.Remove(updateMember.MemberId);
}
context.SaveChanges();
}
var conference = context.Conferences.First(x => x.Id == Id);
foreach (var cm in model.ConferenceMembers)
{
context.ConferenceMembers.Add(new ConferenceMember
{
Conference = conference,
Member = context.Members.First(x => x.Id == cm.Key),
});
context.SaveChanges();
}
_conferenceMembers = null;
}
}
}

View File

@ -100,4 +100,3 @@ namespace HotelDataBaseImplement.Models
} }
} }
} }
}

View File

@ -0,0 +1,18 @@
using System.ComponentModel.DataAnnotations;
namespace HotelDataBaseImplement.Models
{
public class ConferenceMember
{
public int Id { get; set; }
[Required]
public int MemberId { get; set; }
[Required]
public int ConferenceId { get; set; }
public virtual Conference Conference { get; set; } = new();
public virtual Member Member { get; set; } = new();
}
}

View File

@ -0,0 +1,108 @@
using HotelContracts.BindingModels;
using HotelContracts.ViewModels;
using HotelDataModels.Models;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace HotelDataBaseImplement.Models
{
public class MealPlan : IMealPlanModel
{
[Required]
public string MealPlanName { get; set; } = string.Empty;
[Required]
public double MealPlanPrice { get; set; }
public int OrganiserId { get; private set; }
public int Id { get; private set; }
public virtual Organiser Organiser { get; set; }
private Dictionary<int, IMemberModel> _mealPlanMembers = null;
[NotMapped]
public Dictionary<int, IMemberModel> MealPlanMembers
{
get
{
if (_mealPlanMembers == null)
{
using var context = new HotelDataBase();
_mealPlanMembers = Members
.ToDictionary(x => x.MemberId, x => (context.Members
.FirstOrDefault(y => y.Id == x.MemberId)! as IMemberModel));
}
return _mealPlanMembers;
}
}
[ForeignKey("MealPlanId")]
public virtual List<Room> Rooms { get; set; } = new();
[ForeignKey("MealPlanId")]
public virtual List<MealPlanMember> Members { get; set; } = new();
public static MealPlan Create(HotelDataBase context, MealPlanBindingModel model)
{
return new MealPlan()
{
Id = model.Id,
MealPlanName = model.MealPlanName,
MealPlanPrice = model.MealPlanPrice,
OrganiserId = model.OrganiserId,
Members = model.MealPlanMembers.Select(x => new MealPlanMember
{
Member = context.Members.First(y => y.Id == x.Key),
}).ToList()
};
}
public void Update(MealPlanBindingModel model)
{
MealPlanName = model.MealPlanName;
MealPlanPrice = model.MealPlanPrice;
OrganiserId = model.OrganiserId;
}
public MealPlanViewModel GetViewModel => new()
{
Id = Id,
MealPlanName = MealPlanName,
MealPlanPrice = MealPlanPrice,
OrganiserId = OrganiserId,
MealPlanMembers = MealPlanMembers
};
public void UpdateMembers(HotelDataBase context, MealPlanBindingModel model)
{
var mealPlanMembers = context.MealPlanMembers.Where(rec => rec.MealPlanId == model.Id).ToList();
if (mealPlanMembers != null && mealPlanMembers.Count > 0)
{
context.MealPlanMembers.RemoveRange(mealPlanMembers.Where(rec => !model.MealPlanMembers.ContainsKey(rec.MemberId)));
context.SaveChanges();
foreach (var updateMember in mealPlanMembers)
{
model.MealPlanMembers.Remove(updateMember.MemberId);
}
context.SaveChanges();
}
var mealPlan = context.MealPlans.First(x => x.Id == Id);
foreach (var cm in model.MealPlanMembers)
{
context.MealPlanMembers.Add(new MealPlanMember
{
MealPlan = mealPlan,
Member = context.Members.First(x => x.Id == cm.Key)
});
context.SaveChanges();
}
_mealPlanMembers = null;
}
}
}

View File

@ -0,0 +1,18 @@
using System.ComponentModel.DataAnnotations;
namespace HotelDataBaseImplement.Models
{
public class MealPlanMember
{
public int Id { get; set; }
[Required]
public int MemberId { get; set; }
[Required]
public int MealPlanId { get; set; }
public virtual MealPlan MealPlan { get; set; } = new();
public virtual Member Member { get; set; } = new();
}
}

View File

@ -0,0 +1,91 @@
using HotelContracts.BindingModels;
using HotelContracts.ViewModels;
using HotelDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HotelDataBaseImplement.Models
{
public class Member : IMemberModel
{
[Required]
public string MemberSurname { get; set; } = string.Empty;
[Required]
public string MemberName { get; set; } = string.Empty;
[Required]
public string MemberPatronymic { get; set; } = string.Empty;
[Required]
public string MemberPhoneNumber { get; set; } = string.Empty;
public int OrganiserId { get; private set; }
public int Id { get; private set; }
public virtual Organiser Organiser { get; set; }
[ForeignKey("MemberId")]
public virtual List<MealPlanMember> MealPlanMember { get; set; } = new();
[ForeignKey("MemberId")]
public virtual List<ConferenceMember> ConferenceMembers { get; set; } = new();
public static Member? Create(MemberBindingModel model)
{
if (model == null)
{
return null;
}
return new Member()
{
Id = model.Id,
MemberSurname = model.MemberSurname,
MemberName = model.MemberName,
MemberPatronymic = model.MemberPatronymic,
MemberPhoneNumber = model.MemberPhoneNumber,
OrganiserId = model.OrganiserId,
};
}
public static Member Create(MemberViewModel model)
{
return new Member
{
Id = model.Id,
MemberSurname = model.MemberSurname,
MemberName = model.MemberName,
MemberPatronymic = model.MemberPatronymic,
MemberPhoneNumber = model.MemberPhoneNumber,
OrganiserId = model.OrganiserId,
};
}
public void Update(MemberBindingModel model)
{
if (model == null)
{
return;
}
MemberSurname = model.MemberSurname;
MemberName = model.MemberName;
MemberPatronymic = model.MemberPatronymic;
MemberPhoneNumber = model.MemberPhoneNumber;
OrganiserId = model.OrganiserId;
}
public MemberViewModel GetViewModel => new()
{
Id = Id,
MemberSurname = MemberSurname,
MemberName = MemberName,
MemberPatronymic = MemberPatronymic,
MemberPhoneNumber = MemberPhoneNumber,
OrganiserId = OrganiserId
};
}
}

View File

@ -0,0 +1,96 @@
using HotelContracts.BindingModels;
using HotelContracts.ViewModels;
using HotelDataModels.Models;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace HotelDataBaseImplement.Models
{
public class Organiser : IOrganiserModel
{
[Required]
public string OrganiserSurname { get; set; } = string.Empty;
[Required]
public string OrganiserName { get; set; } = string.Empty;
[Required]
public string OrganiserPatronymic { get; set; } = string.Empty;
[Required]
public string OrganiserLogin { get; set; } = string.Empty;
[Required]
public string OrganiserPassword { get; set; } = string.Empty;
[Required]
public string OrganiserEmail { get; set; } = string.Empty;
[Required]
public string OrganiserPhoneNumber { get; set; } = string.Empty;
public int Id { get; private set; }
[ForeignKey("OrganiserId")]
public virtual List<Conference> Conferences { get; set; } = new();
[ForeignKey("OrganiserId")]
public virtual List<MealPlan> MealPlans { get; set; } = new();
[ForeignKey("OrganiserId")]
public virtual List<Member> Members { get; set; } = new();
public static Organiser? Create(OrganiserBindingModel model)
{
if (model == null)
{
return null;
}
return new Organiser()
{
Id = model.Id,
OrganiserSurname = model.OrganiserSurname,
OrganiserName = model.OrganiserName,
OrganiserPatronymic = model.OrganiserPatronymic,
OrganiserLogin = model.OrganiserLogin,
OrganiserPassword = model.OrganiserPassword,
OrganiserEmail = model.OrganiserEmail,
OrganiserPhoneNumber = model.OrganiserPhoneNumber
};
}
public static Organiser Create(OrganiserViewModel model)
{
return new Organiser
{
Id = model.Id,
OrganiserSurname = model.OrganiserSurname,
OrganiserName = model.OrganiserName,
OrganiserPatronymic = model.OrganiserPatronymic,
OrganiserLogin = model.OrganiserLogin,
OrganiserPassword = model.OrganiserPassword,
OrganiserEmail = model.OrganiserEmail,
OrganiserPhoneNumber = model.OrganiserPhoneNumber
};
}
public void Update(OrganiserBindingModel model)
{
if (model == null)
{
return;
}
OrganiserSurname = model.OrganiserSurname;
OrganiserName = model.OrganiserName;
OrganiserPatronymic = model.OrganiserPatronymic;
OrganiserLogin = model.OrganiserLogin;
OrganiserPassword = model.OrganiserPassword;
OrganiserEmail = model.OrganiserEmail;
OrganiserPhoneNumber = model.OrganiserPhoneNumber;
}
public OrganiserViewModel GetViewModel => new()
{
Id = Id,
OrganiserSurname = OrganiserSurname,
OrganiserName = OrganiserName,
OrganiserPatronymic = OrganiserPatronymic,
OrganiserLogin = OrganiserLogin,
OrganiserPassword = OrganiserPassword,
OrganiserEmail = OrganiserEmail,
OrganiserPhoneNumber = OrganiserPhoneNumber
};
}
}