diff --git a/123/Data/RemoteData/RemoteDatabase/DAO/Presence.cs b/123/Data/RemoteData/RemoteDatabase/DAO/Presence.cs index bf6c3db..4e97fd0 100644 --- a/123/Data/RemoteData/RemoteDatabase/DAO/Presence.cs +++ b/123/Data/RemoteData/RemoteDatabase/DAO/Presence.cs @@ -8,11 +8,12 @@ namespace _123.Data.RemoteData.RemoteDatabase.DAO { public class PresenceDao { - public required Guid UserGuid { get; set; } public bool IsAttedance { get; set; } = true; public required DateOnly Date { get; set; } public required int LessonNumber { get; set; } public UserDao UserDao { get; set; } + public int UserId { get; set; } + public int GroupId { get; set; } } } diff --git a/123/Data/RemoteData/RemoteDatabase/DAO/User.cs b/123/Data/RemoteData/RemoteDatabase/DAO/User.cs index 37cce29..205bed4 100644 --- a/123/Data/RemoteData/RemoteDatabase/DAO/User.cs +++ b/123/Data/RemoteData/RemoteDatabase/DAO/User.cs @@ -9,7 +9,7 @@ namespace _123.Data.RemoteData.RemoteDatabase.DAO public class UserDao { public required string UserFIO { get; set; } - public Guid UserGuid { get; set; } + public int UserID { get; set; } public required int GroupID { get; set; } diff --git a/123/Data/RemoteData/RemoteDatabase/RemoteDatabaseContext.cs b/123/Data/RemoteData/RemoteDatabase/RemoteDatabaseContext.cs index b5f9b26..d4aea7a 100644 --- a/123/Data/RemoteData/RemoteDatabase/RemoteDatabaseContext.cs +++ b/123/Data/RemoteData/RemoteDatabase/RemoteDatabaseContext.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace _123.Data.RemoteData.RemoteDatabase { - internal class RemoteDatabaseContext: DbContext + public class RemoteDatabaseContext: DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { diff --git a/123/Data/Repository/IGroupRepository.cs b/123/Data/Repository/IGroupRepository.cs index 810dc41..f010553 100644 --- a/123/Data/Repository/IGroupRepository.cs +++ b/123/Data/Repository/IGroupRepository.cs @@ -10,10 +10,10 @@ namespace _123.Data.Repository { internal interface IGroupRepository { - List GetAllGroup(); + List GetAllGroup(); bool RemoveGroupById(int groupID); bool UpdateGroupById(int groupID, String name); - GroupLocalEntity GetGroupById(int groupID); + GroupDao GetGroupById(int groupID); bool AddGroup(String name, String id); } } diff --git a/123/Data/Repository/IPresenceRepository.cs b/123/Data/Repository/IPresenceRepository.cs index 5a22e99..b27a789 100644 --- a/123/Data/Repository/IPresenceRepository.cs +++ b/123/Data/Repository/IPresenceRepository.cs @@ -8,12 +8,12 @@ using System.Threading.Tasks; namespace _123.Data.Repository { - interface IPresenceRepository + internal interface IPresenceRepository { - List GetPresenceByGroup(int groupId); - List GetPresenceByGroupAndDate(int groupId, DateOnly date); - void UnCheckAttendence (PresenceLocalEntity presence); - void AddPresence (PresenceLocalEntity presence); + List GetPresenceByGroup(int groupId); + List GetPresenceByGroupAndDate(int groupId, DateOnly date); + bool UnCheckAttendence (int firstClass, int lastClass, DateOnly date, Guid userGuid); + void AddPresence (PresenceDao presence); } } diff --git a/123/Data/Repository/IUserRepository.cs b/123/Data/Repository/IUserRepository.cs index 09ff06c..fd41894 100644 --- a/123/Data/Repository/IUserRepository.cs +++ b/123/Data/Repository/IUserRepository.cs @@ -10,11 +10,11 @@ namespace _123.Data.Repository { internal interface IUserRepository { - public List GetAllUsers(); - bool RemoveUserByGuid(Guid userGuid); - UserLocalEntity FindUserByGuid(Guid userGuid); - UserLocalEntity? GetUserByGuid(Guid userGuid); - UserLocalEntity? UpdateUser(UserLocalEntity userUpdateLocalEnity); - UserLocalEntity? UpdateUserByGuid(Guid userGuid); + List GetAllUser(); + bool RemoveUserByGuid(int userId); + UserDao FindUserByGuid(Guid userGuid); + UserDao? GetUserByGuid(int userId); + UserDao? UpdateUser(UserDao userUpdate); + UserDao? UpdateUserByGuid(int userId); } } diff --git a/123/Data/Repository/PresenceRepository.cs b/123/Data/Repository/PresenceRepository.cs index dd96fcf..c5222ff 100644 --- a/123/Data/Repository/PresenceRepository.cs +++ b/123/Data/Repository/PresenceRepository.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Xml.Linq; @@ -32,18 +33,25 @@ namespace _123.Data.Repository public List GetPresenceByGroup(int groupId) { - + return GetAllPresences; } public List GetPresenceByGroupAndDate(int groupId, DateOnly date) { - throw new NotImplementedException(); + return GetAllPresences; } - public void UnCheckAttendence(Presence presence) + public bool UnCheckAttendence(int firstClass, int lastClass, DateOnly date, Guid userGuid) { - throw new NotImplementedException(); + var presToUpdate = GetAllPresences + .Where(x => x.UserGuid == userGuid && x.LessonNumber >= firstClass + && x.LessonNumber <= lastClass && x.Date == date).ToList(); + foreach (var presence in presToUpdate) + { + presence.IsAttedance = false; + } + return true; } - } + } } diff --git a/123/Data/Repository/SQLGroupRepository.cs b/123/Data/Repository/SQLGroupRepository.cs new file mode 100644 index 0000000..506f17a --- /dev/null +++ b/123/Data/Repository/SQLGroupRepository.cs @@ -0,0 +1,114 @@ +using _123.Data.LocalData; +using _123.Data.LocalData.Entity; +using _123.Data.RemoteData.RemoteDatabase; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace _123.Data.Repository +{ + public class SQLGroupRepositoryImpl : IGroupRepository + { + private readonly RemoteDatabaseContext _remoteDatabaseContext; + + public SQLGroupRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext) + { + _remoteDatabaseContext = remoteDatabaseContext; + } + + public List GetAllGroups() + { + var groups = _remoteDatabaseContext.Groups + .Select(g => new GroupDao + { + ID = g.ID, + Name = g.Name + }) + .ToList(); + return groups; + } + + public bool AddGroup(string name, string id) + { + try + { + var groupDao = new GroupDao + { + ID = int.Parse(id), + Name = name, + Users = new List() + }; + _remoteDatabaseContext.Groups.Add(groupDao); + _remoteDatabaseContext.SaveChanges(); + return true; + } + catch + { + return false; + } + } + + public List GetAllGroup() + { + return GetAllGroups(); + } + + public GroupDao GetGroupById(int groupID) + { + var group = _remoteDatabaseContext.Groups + .FirstOrDefault(x => x.ID == groupID); + + if (group == null) return null; + + return new GroupDao + { + ID = group.ID, + Name = group.Name + }; + } + + public bool RemoveGroupById(int groupID) + { + try + { + var group = _remoteDatabaseContext.Groups + .FirstOrDefault(x => x.ID == groupID); + if (group == null) return false; + + // Проверяем, есть ли связанные пользователи + if (group.Users != null && group.Users.Any()) + { + return false; // Нельзя удалить группу с пользователями + } + + _remoteDatabaseContext.Groups.Remove(group); + _remoteDatabaseContext.SaveChanges(); + return true; + } + catch + { + return false; + } + } + + public bool UpdateGroupById(int groupID, string name) + { + try + { + var group = _remoteDatabaseContext.Groups + .FirstOrDefault(x => x.ID == groupID); + if (group == null) return false; + + group.Name = name; + _remoteDatabaseContext.SaveChanges(); + return true; + } + catch + { + return false; + } + } + } +} diff --git a/123/Data/Repository/SQLPresenceRepository.cs b/123/Data/Repository/SQLPresenceRepository.cs new file mode 100644 index 0000000..4a8e6dc --- /dev/null +++ b/123/Data/Repository/SQLPresenceRepository.cs @@ -0,0 +1,56 @@ +using _123.Data.LocalData; +using _123.Data.LocalData.Entity; +using _123.Data.RemoteData.RemoteDatabase; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace _123.Data.Repository +{ + public class SQLPresenceRepositoryImpl : IPresenceRepository + { + private readonly RemoteDatabaseContext _remoteDatabaseContext; + + public SQLPresenceRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext) + { + _remoteDatabaseContext = remoteDatabaseContext; + } + + public void AddPresence(PresenceDao presence) + { + _remoteDatabaseContext.Presences.Add(presence); + _remoteDatabaseContext.SaveChanges(); + } + + public List GetPresenceByGroup(int groupId) + { + return _remoteDatabaseContext.Presences + .Where(p => p.GroupId == groupId) + .ToList(); + } + + public List GetPresenceByGroupAndDate(int groupId, DateOnly date) + { + return _remoteDatabaseContext.Presences + .Where(p => p.GroupId == groupId && p.Date == date) + .ToList(); + } + + public bool UnCheckAttendence(int firstClass, int lastClass, DateOnly date, Guid userGuid) + { + var presToUpdate = _remoteDatabaseContext.Presences + .Where(x => x.UserGuid == userGuid && x.LessonNumber >= firstClass + && x.LessonNumber <= lastClass && x.Date == date).ToList(); + + foreach (var presence in presToUpdate) + { + presence.IsAttedance = false; + } + + _remoteDatabaseContext.SaveChanges(); + return true; + } + } +} diff --git a/123/Data/Repository/SQLUserRepository.cs b/123/Data/Repository/SQLUserRepository.cs new file mode 100644 index 0000000..bf5fac9 --- /dev/null +++ b/123/Data/Repository/SQLUserRepository.cs @@ -0,0 +1,92 @@ +using _123.Data.LocalData; +using _123.Data.LocalData.Entity; +using _123.Data.RemoteData.RemoteDatabase; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace _123.Data.Repository +{ + public class SQLUserRepositoryImpl : IUserRepository + { + private readonly RemoteDatabaseContext _remoteDatabaseContext; + + public SQLUserRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext) + { + _remoteDatabaseContext = remoteDatabaseContext; + } + + public UserDao FindUserByGuid(Guid userGuid) + { + var user = _remoteDatabaseContext.Users + .FirstOrDefault(x => x.UserID == userGuid); + if (user == null) throw new Exception("Пользователь не найден"); + return user; + } + + public List GetAllUser() + { + return _remoteDatabaseContext.Users + .Select(u => new UserDao + { + UserID = u.UserID, + UserFIO = u.UserFIO, + GroupID = u.GroupID, + Group = u.Group + }) + .ToList(); + } + + public UserDao? GetUserByGuid(int userId) + { + return _remoteDatabaseContext.Users + .FirstOrDefault(x => x.UserID == userId); + } + + public bool RemoveUserByGuid(int userId) + { + try + { + var user = _remoteDatabaseContext.Users + .FirstOrDefault(x => x.UserID == userId); + if (user == null) return false; + + _remoteDatabaseContext.Users.Remove(user); + _remoteDatabaseContext.SaveChanges(); + return true; + } + catch + { + return false; + } + } + + public UserDao? UpdateUser(UserDao userUpdate) + { + try + { + var user = _remoteDatabaseContext.Users + .FirstOrDefault(x => x.UserID == userUpdate.UserID); + if (user == null) return null; + + user.UserFIO = userUpdate.UserFIO; + user.GroupID = userUpdate.GroupID; + + _remoteDatabaseContext.SaveChanges(); + return user; + } + catch + { + return null; + } + } + + public UserDao? UpdateUserByGuid(int userId) + { + return _remoteDatabaseContext.Users + .FirstOrDefault(x => x.UserID == userId); + } + } +} diff --git a/123/Data/Repository/UserRepositoty.cs b/123/Data/Repository/UserRepositoty.cs index e3e133c..d61425f 100644 --- a/123/Data/Repository/UserRepositoty.cs +++ b/123/Data/Repository/UserRepositoty.cs @@ -21,6 +21,10 @@ namespace _123.Data.ReportsHistory public List GetAllUsers { get; set; } + public List GetAllUser() + { + return GetAllUsers; + } public bool RemoveUserByGuid(Guid userGuid) { UserLocalEntity? userLocal = GetAllUsers @@ -65,10 +69,5 @@ namespace _123.Data.ReportsHistory return userLocal; } - - List IUserRepository.GetAllUsers() - { - throw new NotImplementedException(); - } } } diff --git a/123/Domain/UseCase/GroupUseCase.cs b/123/Domain/UseCase/GroupUseCase.cs index e36ef4a..ffbfc1f 100644 --- a/123/Domain/UseCase/GroupUseCase.cs +++ b/123/Domain/UseCase/GroupUseCase.cs @@ -12,22 +12,35 @@ namespace _123.Domain.UseCase { public class GroupUseCase { - private GroupRepositoryImpl _repositoryGroupImpl; - public GroupUseCase(GroupRepositoryImpl repositoryGroupImpl) + private readonly SQLGroupRepositoryImpl _repositoryGroupImpl; + public GroupUseCase(SQLGroupRepositoryImpl repositoryGroupImpl) { _repositoryGroupImpl = repositoryGroupImpl; } + public List GetAllGroups() => _repositoryGroupImpl.GetAllGroups() .Select(it => new Group { ID = it.ID, Name = it.Name }).ToList(); - public bool UpdateGroupName(String id, String name1) + public bool UpdateGroupName(string id, string name) { - return _repositoryGroupImpl.UpdateGroupById(int.Parse(id), name1); + return _repositoryGroupImpl.UpdateGroupById(int.Parse(id), name); } - public bool AddGroup(String name, string id) + + public bool AddGroup(string name, string id) { return _repositoryGroupImpl.AddGroup(name, id); } + + public Group GetGroupById(int id) + { + var group = _repositoryGroupImpl.GetGroupById(id); + if (group == null) return null; + return new Group { ID = group.ID, Name = group.Name }; + } + + public bool RemoveGroupById(int id) + { + return _repositoryGroupImpl.RemoveGroupById(id); + } } - } diff --git a/123/Domain/UseCase/PresenceUseCase.cs b/123/Domain/UseCase/PresenceUseCase.cs index 1cad8a4..1d0e253 100644 --- a/123/Domain/UseCase/PresenceUseCase.cs +++ b/123/Domain/UseCase/PresenceUseCase.cs @@ -1,12 +1,73 @@ -using System; +using _123.Data.LocalData.Entity; +using _123.Data.ReportsHistory; +using _123.Data.Repository; +using _123.Domain.Models; +using System; using System.Collections.Generic; using System.Linq; +using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; namespace _123.Domain.UseCase { - class PresenceUseCase + public class PresenceUseCase { + private readonly SQLPresenceRepositoryImpl _presenceRepositoryImpl; + private readonly SQLGroupRepositoryImpl _groupRepositoryImpl; + private readonly SQLUserRepositoryImpl _userRepositoryImpl; + public List GetPresenceByGroup(int groupId) + { + var users = _userRepositoryImpl.GetAllUsers.Where(x => x.GroupID == groupId).ToList(); + + var presenceByGroup = _presenceRepositoryImpl.GetPresenceByGroup(groupId) + .Where(x => users.Any(user => user.UserGuid == x.UserGuid)) + .Select(presence => new Presence + { + User = new User + { + UserGuid = presence.UserGuid, + UserGroup = new Group + { + ID = groupId, + Name = _groupRepositoryImpl.GetAllGroups().First(group => group.ID == groupId).Name + }, + UserFIO = users.First(user => user.UserGuid == presence.UserGuid).UserFIO, + }, + ClassNum = presence.LessonNumber, + Date = presence.Date, + IsAttedance = presence.IsAttedance, + }).ToList(); + return presenceByGroup; + } + public List GetPresenceByGroupAndDate(int groupId, DateOnly date) + { + var users = _userRepositoryImpl.GetAllUsers.Where(x => x.GroupID == groupId).ToList(); + + var presenceByGroup = _presenceRepositoryImpl.GetPresenceByGroup(groupId) + .Where(x => users.Any(user => user.UserGuid == x.UserGuid && x.Date == date)) + .Select(presence => new Presence + { + User = new User + { + UserGuid = presence.UserGuid, + UserGroup = new Group + { + ID = groupId, + Name = _groupRepositoryImpl.GetAllGroups().First(group => group.ID == groupId).Name + }, + UserFIO = users.First(user => user.UserGuid == presence.UserGuid).UserFIO, + }, + ClassNum = presence.LessonNumber, + Date = presence.Date, + IsAttedance = presence.IsAttedance, + }).ToList(); + return presenceByGroup; + } + public bool UnCheckAttendance(int firstClass, int lastClass, DateOnly date, Guid userGuid) + { + return _presenceRepositoryImpl.UnCheckAttendence(firstClass, lastClass, date, userGuid); + } + } } diff --git a/123/Domain/UseCase/UseCaseGeneratePresence.cs b/123/Domain/UseCase/UseCaseGeneratePresence.cs index 6927465..507e224 100644 --- a/123/Domain/UseCase/UseCaseGeneratePresence.cs +++ b/123/Domain/UseCase/UseCaseGeneratePresence.cs @@ -1,4 +1,7 @@ -using System; +using _123.Data.LocalData.Entity; +using _123.Data.ReportsHistory; +using _123.Data.Repository; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,8 +9,59 @@ using System.Threading.Tasks; namespace _123.Domain.UseCase { - internal class UseCaseGeneratePresence + public class UseCaseGeneratePresence { + private readonly PresenceRepositoryImpl _presenceRepositoryImpl; + private readonly GroupRepositoryImpl _groupRepositoryImpl; + private readonly UserRepositoryImpl _userRepositoryImpl; + public UseCaseGeneratePresence(PresenceRepositoryImpl repositoryImpl, + UserRepositoryImpl userRepositoryImpl, + GroupRepositoryImpl groupRepositoryImpl) + { + _presenceRepositoryImpl = repositoryImpl; + _userRepositoryImpl = userRepositoryImpl; + _groupRepositoryImpl = groupRepositoryImpl; + } + + public void AddPrecence(int firstClass, int lastClass, int groupId, DateOnly date) + { + var users = _userRepositoryImpl.GetAllUser().Where(x => x.GroupID == groupId).ToList(); + List presence = new List(); + for (int i = firstClass; i < lastClass; i++) + { + foreach (var user in users) + { + PresenceLocalEntity pres = new PresenceLocalEntity { LessonNumber = i, UserGuid = user.UserGuid, Date = date }; + } + } + } + + public void AddPresenceForWeek(int firstClass, int lastClass, int groupId, DateOnly startDate) + { + var users = _userRepositoryImpl.GetAllUser().Where(x => x.GroupID == groupId).ToList(); + List presence = new List(); + + for (int dayOffset = 0; dayOffset < 7; dayOffset++) + { + DateOnly date = startDate.AddDays(dayOffset); + + for (int i = firstClass; i < lastClass; i++) + { + foreach (var user in users) + { + PresenceLocalEntity pres = new PresenceLocalEntity + { + LessonNumber = i, + UserGuid = user.UserGuid, + Date = date + }; + presence.Add(pres); + } + } + } + } } + + } diff --git a/123/Domain/UseCase/UserUseCase.cs b/123/Domain/UseCase/UserUseCase.cs index f073de2..74ba3c5 100644 --- a/123/Domain/UseCase/UserUseCase.cs +++ b/123/Domain/UseCase/UserUseCase.cs @@ -13,56 +13,62 @@ namespace _123.Domain.UseCase { public class UserUseCase { - //private readonly UserRepositoryImpl _repositoryUserImpl; - //private readonly GroupRepositoryImpl _repositoryGroupImpl; - private readonly UserRepositoryImpl _repositoryUserImpl; - private readonly IGroupRepository _repositoryGroupImpl; + private readonly SQLUserRepositoryImpl _repositoryUserImpl; + private readonly SQLGroupRepositoryImpl _repositoryGroupImpl; - public UserUseCase(UserRepositoryImpl repositoryImpl, GroupRepositoryImpl repositoryGroupImpl) + public UserUseCase(SQLUserRepositoryImpl repositoryImpl, SQLGroupRepositoryImpl repositoryGroupImpl) { _repositoryUserImpl = repositoryImpl; _repositoryGroupImpl = repositoryGroupImpl; } - public List GetAllGroups() => _repositoryGroupImpl.GetAllGroup() + public List GetAllGroups() => _repositoryGroupImpl.GetAllGroups() .Select(it => new Group { ID = it.ID, Name = it.Name }).ToList(); - private List GetAllUsers() => _repositoryUserImpl.GetAllUsers - .Join(_repositoryGroupImpl.GetAllGroup(), + + public List GetAllUsers() => _repositoryUserImpl.GetAllUser() + .Join(_repositoryGroupImpl.GetAllGroups(), user => user.GroupID, group => group.ID, (user, group) => new User { UserFIO = user.UserFIO, - UserGuid = user.UserGuid, + UserGuid = user.UserID, UserGroup = new Group { ID = group.ID, Name = group.Name } } ).ToList(); - public bool RemoveUserByGuid(Guid userGuid) + public bool RemoveUserByGuid(int userId) { - return _repositoryUserImpl.RemoveUserByGuid(userGuid); + return _repositoryUserImpl.RemoveUserByGuid(userId); } + public User UpdateUser(User user) { - UserLocalEntity userLocalEnity = new UserLocalEntity { UserFIO = user.UserFIO, GroupID = user.UserGroup.ID, UserGuid = user.UserGuid }; - UserLocalEntity? result = _repositoryUserImpl.UpdateUser(userLocalEnity); - if (result == null) throw new Exception(""); - Group? group = GetAllGroups().FirstOrDefault(it => it.ID == result!.GroupID); - if (group == null) throw new Exception(""); + UserDao userDao = new UserDao { + UserFIO = user.UserFIO, + GroupID = user.UserGroup.ID, + UserID = user.UserGuid + }; + UserDao? result = _repositoryUserImpl.UpdateUser(userDao); + if (result == null) throw new Exception("Не удалось обновить пользователя"); + Group? group = GetAllGroups().FirstOrDefault(it => it.ID == result.GroupID); + if (group == null) throw new Exception("Группа не найдена"); return new User { UserFIO = user.UserFIO, UserGuid = user.UserGuid, UserGroup = group }; } - public UserLocalEntity FindUserByGuid(Guid userGuid) + + public UserDao FindUserByGuid(int userId) { - return _repositoryUserImpl.FindUserByGuid(userGuid); + return _repositoryUserImpl.FindUserByGuid(userId); } - public UserLocalEntity UpdateUserByGuid(Guid userGuid, String name, String gro) + + public UserDao UpdateUserByGuid(int userId, string name, string groupId) { - UserLocalEntity? result = _repositoryUserImpl.UpdateUserByGuid(userGuid); - if (result == null) throw new Exception(""); - Group? group = GetAllGroups().FirstOrDefault(it => it.ID == int.Parse(gro)); - if (group == null) throw new Exception(""); - return new UserLocalEntity { UserFIO = name, GroupID = int.Parse(gro), UserGuid = userGuid}; + UserDao? result = _repositoryUserImpl.UpdateUserByGuid(userId); + if (result == null) throw new Exception("Пользователь не найден"); + Group? group = GetAllGroups().FirstOrDefault(it => it.ID == int.Parse(groupId)); + if (group == null) throw new Exception("Группа не найдена"); + return new UserDao { UserFIO = name, GroupID = int.Parse(groupId), UserID = userId }; } } } diff --git a/123/Program.cs b/123/Program.cs index 03eec2b..c879a62 100644 --- a/123/Program.cs +++ b/123/Program.cs @@ -1,4 +1,5 @@ -using _123.Data.ReportsHistory; +using _123.Data.RemoteData.RemoteDatabase; +using _123.Data.ReportsHistory; using _123.Data.Repository; using _123.Domain.UseCase; using _123.UI; @@ -6,14 +7,23 @@ using Microsoft.Extensions.DependencyInjection; using System.Text.RegularExpressions; IServiceCollection services = new ServiceCollection(); -services - .AddSingleton() - .AddSingleton(); +services + .AddSingleton() + .AddSingleton() + .AddSingleton() + .AddSingleton() + .AddDbContext() + .AddSingleton() + .AddSingleton() + .AddSingleton() var serviceProvider = services.BuildServiceProvider (); GroupRepositoryImpl groupRepositoryImpl = new GroupRepositoryImpl(); UserRepositoryImpl userRepositoryImpl = new UserRepositoryImpl(); UserUseCase userUseCase = new UserUseCase(userRepositoryImpl, groupRepositoryImpl); GroupUseCase groupUseCase = new GroupUseCase(groupRepositoryImpl); +PresenceRepositoryImpl presenceRepositoryImpl = new PresenceRepositoryImpl(); +PresenceUseCase presenceUseCase = new PresenceUseCase(); + +MainMenuUI mainMenuUI = new MainMenuUI(userUseCase, groupUseCase, presenceUseCase); -MainMenuUI mainMenuUI = new MainMenuUI(userUseCase, groupUseCase); \ No newline at end of file diff --git a/123/UI/GroupConsole.cs b/123/UI/GroupConsole.cs index 6d145d2..437be4b 100644 --- a/123/UI/GroupConsole.cs +++ b/123/UI/GroupConsole.cs @@ -28,19 +28,11 @@ namespace _123.UI { StringBuilder groupOutput = new StringBuilder(); var group = _groupUseCase.UpdateGroupName(name,name1); - { - groupOutput.AppendLine($"{group.Name}\t{group.ID}"); - } - Console.WriteLine(groupOutput); } public void AddGroup (String name, String id) { StringBuilder groupOutput = new StringBuilder(); var group = _groupUseCase.AddGroup(name,id); - { - groupOutput.AppendLine($"{group.Name}\t{group.ID}"); - } - Console.WriteLine(groupOutput); } } diff --git a/123/UI/MainMenu.cs b/123/UI/MainMenu.cs index 8099cb6..db97c76 100644 --- a/123/UI/MainMenu.cs +++ b/123/UI/MainMenu.cs @@ -14,10 +14,13 @@ namespace _123.UI GroupConsoleUI _groupConsoleUI; - public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase) + PresenceConsoleUI _presenceConsoleUI; + + public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, PresenceUseCase presenceUseCase) { _userConsoleUI = new UserConsoleUI(userUseCase); _groupConsoleUI = new GroupConsoleUI(groupUseCase); + _presenceConsoleUI = new PresenceConsoleUI(presenceUseCase); DisplayMenu(); @@ -32,10 +35,15 @@ namespace _123.UI case "1": _userConsoleUI.DisplayAllUsers(); break; case "2": _userConsoleUI.RemoveUserByGuid(Guid.Parse(Console.ReadLine())); break; case "3": _groupConsoleUI.DisplayAllGroups(); break; - case "4": _userConsoleUI.FindUserByGuid(Guid.Parse(Console.ReadLine()));break; - case "5": _userConsoleUI.UpdateUserByGuid(Guid.Parse(Console.ReadLine()),Console.ReadLine(), Console.ReadLine()); break; - case "6": _groupConsoleUI.UpdateGroupName(Console.ReadLine(),Console.ReadLine()); break; - case "7": _groupConsoleUI.AddGroup(Console.ReadLine(), Console.ReadLine());break; + case "4": _userConsoleUI.FindUserById(int.Parse(Console.ReadLine())); break; + case "5": _userConsoleUI.UpdateUserById(int.Parse(Console.ReadLine()), Console.ReadLine(), Console.ReadLine()); break; + case "6": _groupConsoleUI.UpdateGroupName(Console.ReadLine(), Console.ReadLine()); break; + case "7": _groupConsoleUI.AddGroup(Console.ReadLine(), Console.ReadLine()); break; + case "8": _presenceConsoleUI.GetPresenceByGroup(int.Parse(Console.ReadLine())); break; + case "9": _presenceConsoleUI.GetPresenceByGroupAndDAte(int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine())); break; + case "10": _presenceConsoleUI.UnCheckAttendence(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine()), Guid.Parse(Console.ReadLine())); break; + case "11": _presenceConsoleUI.AddPresence(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine())); break; + default: DisplayMenu(); break; diff --git a/123/UI/PresenceConsole.cs b/123/UI/PresenceConsole.cs index 3de68aa..6cb283e 100644 --- a/123/UI/PresenceConsole.cs +++ b/123/UI/PresenceConsole.cs @@ -1,4 +1,5 @@ -using System; +using _123.Domain.UseCase; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,7 +7,79 @@ using System.Threading.Tasks; namespace _123.UI { - internal class PresenceConsole + public class PresenceConsoleUI { + PresenceUseCase _presenceUseCase; + UseCaseGeneratePresence _useCaseGeneratePresence; + + public PresenceConsoleUI(PresenceUseCase presenceUseCase, UseCaseGeneratePresence useCaseGeneratePresence) + { + _presenceUseCase = presenceUseCase; + _useCaseGeneratePresence = useCaseGeneratePresence; + } + + public void GetPresenceByGroup(int groupId) + { + StringBuilder presenceOutput = new StringBuilder(); + var presence = _presenceUseCase.GetPresenceByGroup(groupId); + foreach (var p in presence) + { + presenceOutput.AppendLine($"{p.LessonNumber}\t{p.UserGuid}\t{p.Date}"); + } + Console.WriteLine(presenceOutput); + } + + public void GetPresenceByGroupAndDAte(int groupId, DateOnly date) + { + StringBuilder presenceOutput = new StringBuilder(); + var presence = _presenceUseCase.GetPresenceByGroupAndDate(groupId, date); + foreach (var p in presence) + { + presenceOutput.AppendLine($"{p.LessonNumber}\t{p.UserGuid}\t{p.Date}"); + } + Console.WriteLine(presenceOutput); + } + + public void UnCheckAttendence(int firstClass, int lastClass, DateOnly date, Guid userGuid) + { + var result = _presenceUseCase.UnCheckAttendance(firstClass, lastClass, date, userGuid); + Console.WriteLine(result ? "Посещаемость успешно обновлена" : "Ошибка при обновлении посещаемости"); + } + + public void AddPresence(int firstClass, int lastClass, int groupId, DateOnly date) + { + try + { + _useCaseGeneratePresence.AddPrecence(firstClass, lastClass, groupId, date); + Console.WriteLine("Посещаемость успешно добавлена"); + } + catch (Exception ex) + { + Console.WriteLine($"Ошибка при добавлении посещаемости: {ex.Message}"); + } + } + public void GetGroupAttendanceStats(int groupId) + { + StringBuilder statsOutput = new StringBuilder(); + var groupStats = _presenceUseCase.GetGroupStats(groupId); + + statsOutput.AppendLine($"Информация о группе {groupStats.GroupName}:"); + statsOutput.AppendLine($"Количество студентов: {groupStats.StudentsCount}"); + statsOutput.AppendLine($"Количество проведенных занятий: {groupStats.TotalLessons}"); + statsOutput.AppendLine($"Общий процент посещаемости: {groupStats.TotalAttendancePercent:F1}%"); + statsOutput.AppendLine("\nСтатистика по студентам:"); + statsOutput.AppendLine("ФИО\tПосещено\tПропущено\tПроцент посещаемости"); + + foreach(var student in groupStats.StudentStats) + { + statsOutput.AppendLine( + $"{student.StudentName}\t{student.AttendedLessons}\t" + + $"{student.MissedLessons}\t{student.AttendancePercent:F1}%" + ); + } + + Console.WriteLine(statsOutput.ToString()); + } } + } diff --git a/123/UI/UserConsole.cs b/123/UI/UserConsole.cs index c85aa36..877eebe 100644 --- a/123/UI/UserConsole.cs +++ b/123/UI/UserConsole.cs @@ -17,10 +17,9 @@ namespace _123.UI _userUseCase = userUseCase; } - public void RemoveUserByGuid(Guid guidUser) + public void RemoveUserById(int userId) { - - string output = _userUseCase.RemoveUserByGuid(guidUser) ? "Пользователь удален" : "Пользователь не удален"; + string output = _userUseCase.RemoveUserByGuid(userId) ? "Пользователь удален" : "Пользователь не удален"; Console.WriteLine(output); } @@ -29,27 +28,43 @@ namespace _123.UI StringBuilder userOutput = new StringBuilder(); foreach (var user in _userUseCase.GetAllUsers()) { - userOutput.AppendLine($"{user.UserGuid}\t{user.UserFIO}\t{user.UserGroup.Name}"); + userOutput.AppendLine($"{user.UserID}\t{user.UserFIO}\t{user.UserGroup.Name}"); } Console.WriteLine(userOutput); } - public void FindUserByGuid (Guid guidUser) + + public void FindUserById(int userId) { StringBuilder userOutput = new StringBuilder(); - var user = _userUseCase.FindUserByGuid(guidUser); - { - userOutput.AppendLine($"{user.UserGuid}\t{user.UserFIO}\t{user.GroupID}"); - } + var user = _userUseCase.FindUserByGuid(userId); + userOutput.AppendLine($"{user.UserID}\t{user.UserFIO}\t{user.GroupID}"); Console.WriteLine(userOutput); } - public void UpdateUserByGuid(Guid userGuid,String name,String group) + + public void UpdateUserById(int userId, String name, String groupId) { - StringBuilder userOutput = new StringBuilder(); - var user = _userUseCase.UpdateUserByGuid(userGuid,name,group); + try { - userOutput.AppendLine($"{user.UserGuid}\t{user.UserFIO}\t{user.GroupID}"); + var group = _userUseCase.GetAllGroups().FirstOrDefault(g => g.ID == int.Parse(groupId)); + if (group == null) + { + Console.WriteLine("Группа не найдена"); + return; + } + + var updatedUser = _userUseCase.UpdateUser(new User + { + UserID = userId, + UserFIO = name, + UserGroup = group + }); + + Console.WriteLine($"Пользователь обновлен: {updatedUser.UserID}\t{updatedUser.UserFIO}\t{updatedUser.UserGroup.Name}"); + } + catch (Exception ex) + { + Console.WriteLine($"Ошибка при обновлении пользователя: {ex.Message}"); } - Console.WriteLine(userOutput); } } }