All presence
This commit is contained in:
parent
6f930408b5
commit
cd64ec54de
@ -6,12 +6,11 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Demo.domain.Models
|
namespace Demo.domain.Models
|
||||||
{
|
{
|
||||||
internal class PresenceLocalEntity
|
public class PresenceLocalEntity
|
||||||
{
|
{
|
||||||
public required Guid UserGuid { get; set; }
|
public required Guid UserGuid { get; set; }
|
||||||
public bool IsAttedance { get; set; } = true;
|
public bool IsAttedance { get; set; } = true;
|
||||||
public required DateOnly Date { get; set; }
|
public required DateOnly Date { get; set; }
|
||||||
|
|
||||||
public required int LessonNumber { get; set; }
|
public required int LessonNumber { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
13
Data/Repository/IPresenceRepository.cs
Normal file
13
Data/Repository/IPresenceRepository.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using Demo.domain.Models;
|
||||||
|
|
||||||
|
namespace Demo.Data.Repository
|
||||||
|
{
|
||||||
|
public interface IPresenceRepository
|
||||||
|
{
|
||||||
|
List<PresenceLocalEntity> GetPresences();
|
||||||
|
List<PresenceLocalEntity> GetPresencesByGroup();
|
||||||
|
List<PresenceLocalEntity> GetPresencesByGroupAndDate();
|
||||||
|
public List<PresenceLocalEntity> SavePresence(List<PresenceLocalEntity> presenceLocalEntities);
|
||||||
|
void UpdateAttedance(int firstLesson, int lastLesson, DateOnly date, Guid UserGuid);
|
||||||
|
}
|
||||||
|
}
|
37
Data/Repository/PresenceRepositoryImpl.cs
Normal file
37
Data/Repository/PresenceRepositoryImpl.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using Demo.domain.Models;
|
||||||
|
|
||||||
|
namespace Demo.Data.Repository
|
||||||
|
{
|
||||||
|
public class PresenceRepositoryImpl : IPresenceRepository
|
||||||
|
{
|
||||||
|
public List<PresenceLocalEntity> GetAllPresences = new List<PresenceLocalEntity>();
|
||||||
|
|
||||||
|
public List<PresenceLocalEntity> GetPresences()
|
||||||
|
{
|
||||||
|
return GetAllPresences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PresenceLocalEntity> GetPresencesByGroup()
|
||||||
|
{
|
||||||
|
return GetAllPresences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PresenceLocalEntity> GetPresencesByGroupAndDate()
|
||||||
|
{
|
||||||
|
return GetAllPresences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PresenceLocalEntity> SavePresence(List<PresenceLocalEntity> presenceLocalEntities){
|
||||||
|
GetAllPresences.AddRange(presenceLocalEntities);
|
||||||
|
return presenceLocalEntities;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateAttedance(int firstLesson, int lastLesson, DateOnly date, Guid UserGuid){
|
||||||
|
foreach(PresenceLocalEntity presence in GetAllPresences.Where(x => x.LessonNumber >= firstLesson && x.LessonNumber <= lastLesson && x.Date == date)){
|
||||||
|
if (presence.UserGuid == UserGuid){
|
||||||
|
presence.IsAttedance = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
13
Domain/UseCase/IPresenceUseCase.cs
Normal file
13
Domain/UseCase/IPresenceUseCase.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using Demo.domain.Models;
|
||||||
|
|
||||||
|
namespace Demo.Domain.UseCase
|
||||||
|
{
|
||||||
|
public interface IPresenceUseCase
|
||||||
|
{
|
||||||
|
List<Presence> GetPresencesByGroup(int groupId);
|
||||||
|
List<Presence> GetPresencesByGroupAndDate(int groupId, DateOnly date);
|
||||||
|
bool UpdateAttedance(int firstLesson, int lastLesson, DateOnly date, Guid UserGuid);
|
||||||
|
bool GeneratePresence(int firstLesson, int lastLesson, int groupId, DateOnly date);
|
||||||
|
bool GenerateWeekPresence(int firstLesson, int lastLesson, int groupId, DateOnly date);
|
||||||
|
}
|
||||||
|
}
|
111
Domain/UseCase/PresenceUseCase.cs
Normal file
111
Domain/UseCase/PresenceUseCase.cs
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
using Demo.Data.Repository;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
|
||||||
|
namespace Demo.Domain.UseCase
|
||||||
|
{
|
||||||
|
public class PresenceUseCase : IPresenceUseCase
|
||||||
|
{
|
||||||
|
private readonly IUserRepository _repositoryUserImpl;
|
||||||
|
private readonly IPresenceRepository _repositoryPresenceImpl;
|
||||||
|
private readonly IGroupRepository _repositoryGroupImpl;
|
||||||
|
|
||||||
|
public PresenceUseCase(IPresenceRepository presenceRepository, IUserRepository repositoryUserImpl, IGroupRepository repositoryGroupImpl)
|
||||||
|
{
|
||||||
|
_repositoryPresenceImpl = presenceRepository;
|
||||||
|
_repositoryGroupImpl = repositoryGroupImpl;
|
||||||
|
_repositoryUserImpl = repositoryUserImpl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Presence> GetPresencesByGroup(int groupId)
|
||||||
|
{
|
||||||
|
var usersByGroup = _repositoryUserImpl.GetAllUser()
|
||||||
|
.Where(user => user.GroupID == groupId).ToList();
|
||||||
|
|
||||||
|
var presenceByGroup = _repositoryPresenceImpl.GetPresencesByGroup()
|
||||||
|
.Where(x => usersByGroup.Any(user => user.Guid == x.UserGuid))
|
||||||
|
.Select(presence => new Presence{
|
||||||
|
User = new User{
|
||||||
|
Guid = presence.UserGuid,
|
||||||
|
Group = new Group{
|
||||||
|
Id = groupId,
|
||||||
|
Name = _repositoryGroupImpl.GetAllGroup().First(group => group.Id == groupId).Name
|
||||||
|
},
|
||||||
|
FIO = usersByGroup.First(user => user.Guid == presence.UserGuid).FIO,
|
||||||
|
},
|
||||||
|
LessonNumber = presence.LessonNumber,
|
||||||
|
Date = presence.Date,
|
||||||
|
IsAttedance = presence.IsAttedance
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
return presenceByGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Presence> GetPresencesByGroupAndDate(int groupId, DateOnly date)
|
||||||
|
{
|
||||||
|
var usersByGroup = _repositoryUserImpl.GetAllUser()
|
||||||
|
.Where(user => user.GroupID == groupId).ToList();
|
||||||
|
|
||||||
|
var presenceByGroupAndDate = _repositoryPresenceImpl.GetPresencesByGroup()
|
||||||
|
.Where(x => usersByGroup.Any(user => user.Guid == x.UserGuid && x.Date == date))
|
||||||
|
.Select(presence => new Presence{
|
||||||
|
User = new User{
|
||||||
|
Guid = presence.UserGuid,
|
||||||
|
Group = new Group{
|
||||||
|
Id = groupId,
|
||||||
|
Name = _repositoryGroupImpl.GetAllGroup().First(group => group.Id == groupId).Name
|
||||||
|
},
|
||||||
|
FIO = usersByGroup.First(user => user.Guid == presence.UserGuid).FIO,
|
||||||
|
},
|
||||||
|
LessonNumber = presence.LessonNumber,
|
||||||
|
Date = presence.Date,
|
||||||
|
IsAttedance = presence.IsAttedance
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
return presenceByGroupAndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool UpdateAttedance(int firstLesson, int lastLesson, DateOnly date, Guid UserGuid){
|
||||||
|
_repositoryPresenceImpl.UpdateAttedance(firstLesson, lastLesson, date, UserGuid);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool GeneratePresence(int firstLesson, int lastLesson, int groupId, DateOnly date){
|
||||||
|
List<Presence> presenceList = new List<Presence>{};
|
||||||
|
var usersByGroup = _repositoryUserImpl.GetAllUser().Where(x => x.GroupID == groupId);
|
||||||
|
for (int i = firstLesson; i <= lastLesson; i++){
|
||||||
|
foreach(UserLocalEntity user in usersByGroup){
|
||||||
|
presenceList.Add(new Presence{
|
||||||
|
User = new User{
|
||||||
|
Group = new Group{
|
||||||
|
Id = groupId,
|
||||||
|
Name = _repositoryGroupImpl.GetAllGroup().First(group => group.Id == groupId).Name
|
||||||
|
},
|
||||||
|
FIO = usersByGroup.First(user2 => user2.Guid == user.Guid).FIO,
|
||||||
|
Guid = user.Guid
|
||||||
|
},
|
||||||
|
IsAttedance = true,
|
||||||
|
Date = date,
|
||||||
|
LessonNumber = i});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var presenceLocalEntity = presenceList.Select(x => new PresenceLocalEntity{
|
||||||
|
UserGuid = x.User.Guid,
|
||||||
|
IsAttedance = x.IsAttedance,
|
||||||
|
LessonNumber = x.LessonNumber,
|
||||||
|
Date = x.Date
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
_repositoryPresenceImpl.SavePresence(presenceLocalEntity);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool GenerateWeekPresence(int firstLesson, int lastLesson, int groupId, DateOnly date){
|
||||||
|
for (int i = 0; i < 8; i++){
|
||||||
|
GeneratePresence(firstLesson, lastLesson, groupId, date.AddDays(i));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -9,10 +9,13 @@ IServiceCollection services = new ServiceCollection();
|
|||||||
services
|
services
|
||||||
.AddSingleton<IGroupRepository, GroupRepositoryImpl>()
|
.AddSingleton<IGroupRepository, GroupRepositoryImpl>()
|
||||||
.AddSingleton<IUserRepository, UserRepositoryImpl>()
|
.AddSingleton<IUserRepository, UserRepositoryImpl>()
|
||||||
|
.AddSingleton<IPresenceRepository, PresenceRepositoryImpl>()
|
||||||
.AddSingleton<IGroupUseCase, GroupUseCase>()
|
.AddSingleton<IGroupUseCase, GroupUseCase>()
|
||||||
.AddSingleton<IUserUseCase, UserUseCase>()
|
.AddSingleton<IUserUseCase, UserUseCase>()
|
||||||
|
.AddSingleton<IPresenceUseCase, PresenceUseCase>()
|
||||||
.AddSingleton<UserConsoleUI>()
|
.AddSingleton<UserConsoleUI>()
|
||||||
.AddSingleton<GroupConsoleUI>()
|
.AddSingleton<GroupConsoleUI>()
|
||||||
|
.AddSingleton<PresenceConsoleUI>()
|
||||||
.AddSingleton<MainMenuUI>();
|
.AddSingleton<MainMenuUI>();
|
||||||
|
|
||||||
var serviceProvider = services.BuildServiceProvider();
|
var serviceProvider = services.BuildServiceProvider();
|
||||||
|
@ -13,10 +13,12 @@ namespace Demo.UI
|
|||||||
|
|
||||||
UserConsoleUI _userConsoleUI;
|
UserConsoleUI _userConsoleUI;
|
||||||
GroupConsoleUI _groupConsoleUI;
|
GroupConsoleUI _groupConsoleUI;
|
||||||
|
PresenceConsoleUI _presenceConsoleUI;
|
||||||
|
|
||||||
public MainMenuUI(IUserUseCase userUseCase, IGroupUseCase groupUseCase) {
|
public MainMenuUI(IUserUseCase userUseCase, IGroupUseCase groupUseCase, IPresenceUseCase presenceUseCase) {
|
||||||
_userConsoleUI = new UserConsoleUI(userUseCase);
|
_userConsoleUI = new UserConsoleUI(userUseCase);
|
||||||
_groupConsoleUI = new GroupConsoleUI(groupUseCase);
|
_groupConsoleUI = new GroupConsoleUI(groupUseCase);
|
||||||
|
_presenceConsoleUI = new PresenceConsoleUI(presenceUseCase);
|
||||||
DisplayMenu();
|
DisplayMenu();
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -33,6 +35,11 @@ namespace Demo.UI
|
|||||||
case "5": _groupConsoleUI.DisplayAllGroups(); break;
|
case "5": _groupConsoleUI.DisplayAllGroups(); break;
|
||||||
case "6": _groupConsoleUI.CreateNewGroup(Group.Parse(Console.ReadLine())); break;
|
case "6": _groupConsoleUI.CreateNewGroup(Group.Parse(Console.ReadLine())); break;
|
||||||
case "7": _groupConsoleUI.UpdateGroupName(Group.Parse(Console.ReadLine())); break;
|
case "7": _groupConsoleUI.UpdateGroupName(Group.Parse(Console.ReadLine())); break;
|
||||||
|
case "8": _presenceConsoleUI.DisplayPresenceByGroup(Convert.ToInt32(Console.ReadLine())); break;
|
||||||
|
case "9": _presenceConsoleUI.DisplayPresenceByGroupByTime(Convert.ToInt32(Console.ReadLine()), DateOnly.FromDateTime(Convert.ToDateTime(Console.ReadLine()))); break;
|
||||||
|
case "10": _presenceConsoleUI.GeneratePresence(Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), DateOnly.FromDateTime(Convert.ToDateTime(Console.ReadLine()))); break;
|
||||||
|
case "11": _presenceConsoleUI.GeneratePresenceWeek(Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), DateOnly.FromDateTime(Convert.ToDateTime(Console.ReadLine()))); break;
|
||||||
|
case "12": _presenceConsoleUI.IsAttedance(Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), DateOnly.FromDateTime(Convert.ToDateTime(Console.ReadLine())), Guid.Parse(Console.ReadLine())); break;
|
||||||
|
|
||||||
default: DisplayMenu();
|
default: DisplayMenu();
|
||||||
break;
|
break;
|
||||||
|
46
UI/PresenceConsole.cs
Normal file
46
UI/PresenceConsole.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
using Demo.Domain.UseCase;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Demo.UI
|
||||||
|
{
|
||||||
|
|
||||||
|
public class PresenceConsoleUI {
|
||||||
|
|
||||||
|
IPresenceUseCase _presenceUseCase;
|
||||||
|
public PresenceConsoleUI (IPresenceUseCase presenceUseCase){
|
||||||
|
_presenceUseCase = presenceUseCase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisplayPresenceByGroup(int groupID){
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
foreach(Presence presence in _presenceUseCase.GetPresencesByGroup(groupID)){
|
||||||
|
stringBuilder.AppendLine($"{presence.User.FIO}, {presence.User.Group.Name}, {presence.IsAttedance}, {presence.Date}, {presence.LessonNumber}");
|
||||||
|
}
|
||||||
|
Console.WriteLine(stringBuilder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisplayPresenceByGroupByTime(int groupID, DateOnly date){
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
foreach(Presence presence in _presenceUseCase.GetPresencesByGroupAndDate(groupID, date)){
|
||||||
|
stringBuilder.AppendLine($"{presence.User.FIO}, {presence.User.Group.Name}, {presence.IsAttedance}, {presence.Date}, {presence.LessonNumber}");
|
||||||
|
}
|
||||||
|
Console.WriteLine(stringBuilder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GeneratePresence(int firstLesson, int lastLesson, int groupID, DateOnly date){
|
||||||
|
string output = _presenceUseCase.GeneratePresence(firstLesson, lastLesson, groupID, date) ? "Сгенерированно" : "Не сгенерированно";
|
||||||
|
Console.WriteLine(output);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GeneratePresenceWeek(int firstLesson, int lastLesson, int groupID, DateOnly date){
|
||||||
|
string output = _presenceUseCase.GenerateWeekPresence(firstLesson, lastLesson, groupID, date) ? "Сгенерированно" : "Не сгенерированно";
|
||||||
|
Console.WriteLine(output);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void IsAttedance(int firstLesson, int lastLesson, DateOnly date, Guid UserGuid){
|
||||||
|
string output = _presenceUseCase.UpdateAttedance(firstLesson, lastLesson, date, UserGuid) ? "Обновлено" : "Не обновлено";
|
||||||
|
Console.WriteLine(output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user