Compare commits
No commits in common. "39e7d5c4ee719da78a462fd45f7d346c98c75c42" and "35f253e7db2199cf2eb5503d4b8179ef82249bc2" have entirely different histories.
39e7d5c4ee
...
35f253e7db
14
Demo.sln
14
Demo.sln
@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 17
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 17.11.35312.102
|
VisualStudioVersion = 17.11.35327.3
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo", "Demo\Demo.csproj", "{983820F6-FF31-4B3A-8593-831BC3904E80}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo", "presence_new\Demo.csproj", "{31E5FFCB-821D-4C62-90AF-73CF0FED2F38}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@ -11,15 +11,15 @@ Global
|
|||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{983820F6-FF31-4B3A-8593-831BC3904E80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{31E5FFCB-821D-4C62-90AF-73CF0FED2F38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{983820F6-FF31-4B3A-8593-831BC3904E80}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{31E5FFCB-821D-4C62-90AF-73CF0FED2F38}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{983820F6-FF31-4B3A-8593-831BC3904E80}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{31E5FFCB-821D-4C62-90AF-73CF0FED2F38}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{983820F6-FF31-4B3A-8593-831BC3904E80}.Release|Any CPU.Build.0 = Release|Any CPU
|
{31E5FFCB-821D-4C62-90AF-73CF0FED2F38}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {4F43A963-447C-4FCB-BB78-8D315EC0F1D6}
|
SolutionGuid = {F3A9BD62-7626-4D6A-BEE1-35A21784C59F}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace Demo.Data.Exceptions
|
|
||||||
{
|
|
||||||
public class UserNotFoundException : RepositoryException
|
|
||||||
{
|
|
||||||
public UserNotFoundException(Guid UserGuid)
|
|
||||||
: base($"Пользователь с ID {UserGuid} не найден.") { }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Demo.domain.Models
|
|
||||||
{
|
|
||||||
public class PresenceLocalEntity
|
|
||||||
{
|
|
||||||
public Guid UserGuid { get; set; }
|
|
||||||
public required int GroupId { get; set; }
|
|
||||||
public bool IsAttedance { get; set; } = true;
|
|
||||||
public required DateTime Date { get; set; }
|
|
||||||
|
|
||||||
public required int LessonNumber { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Demo.Data.RemoteData.RemoteDataBase.DAO
|
|
||||||
{
|
|
||||||
public class Temp
|
|
||||||
{
|
|
||||||
public Guid UserGuid;
|
|
||||||
public double ok;
|
|
||||||
public double skip;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Security.Cryptography.X509Certificates;
|
|
||||||
using System.Text;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Demo.Data.RemoteData.RemoteDataBase
|
|
||||||
{
|
|
||||||
public class RemoteDatabaseContext: DbContext
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
|
||||||
{
|
|
||||||
optionsBuilder.UseNpgsql("Host=45.67.56.214;Port=5421;Username=user15;Database=user15;Password=3XkvwMOb");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
modelBuilder.Entity<GroupDao>().HasKey(group=>group.Id);
|
|
||||||
modelBuilder.Entity<GroupDao>().Property(group => group.Id).ValueGeneratedOnAdd();
|
|
||||||
modelBuilder.Entity<UserDao>().HasKey(user=>user.UserGuid);
|
|
||||||
modelBuilder.Entity<UserDao>().Property(user=>user.UserGuid).ValueGeneratedOnAdd();
|
|
||||||
modelBuilder.Entity<PresenceDao>().HasKey(presence =>presence.PresenceId);
|
|
||||||
modelBuilder.Entity<PresenceDao>().Property(presence=>presence.PresenceId).ValueGeneratedOnAdd();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public DbSet<GroupDao> Groups { get; set; }
|
|
||||||
public DbSet<UserDao> Users { get; set; }
|
|
||||||
public DbSet<PresenceDao> PresenceDaos { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,75 +0,0 @@
|
|||||||
using Demo.Data.Exceptions;
|
|
||||||
using Demo.Data.LocalData;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.Data.Repository;
|
|
||||||
using Demo.domain.Models;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
public class GroupRepositoryImpl: IGroupRepository
|
|
||||||
{
|
|
||||||
private List<GroupLocalEntity> _groups = LocalStaticData.groups;
|
|
||||||
|
|
||||||
|
|
||||||
public GroupLocalEntity? GetGroupById(int groupId)
|
|
||||||
{
|
|
||||||
foreach (var group in _groups)
|
|
||||||
{
|
|
||||||
if (group.Id == groupId)
|
|
||||||
{
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Метод для получения всех групп
|
|
||||||
public List<GroupLocalEntity> GetAllGroups() => _groups;
|
|
||||||
|
|
||||||
// Метод для добавления новой группы
|
|
||||||
public void AddGroup(GroupLocalEntity group)
|
|
||||||
{
|
|
||||||
group.Id = _groups.Any() ? _groups.Max(g => g.Id) + 1 : 1;
|
|
||||||
_groups.Add(group);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Метод для обновления существующей группы
|
|
||||||
public void UpdateGroupById(int groupId, GroupLocalEntity updatedGroup)
|
|
||||||
{
|
|
||||||
var existingGroup = GetGroupById(groupId);
|
|
||||||
if (existingGroup == null) throw new GroupNotFoundException(groupId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveGroupById(int groupId)
|
|
||||||
{
|
|
||||||
var existingGroup = GetGroupById(groupId);
|
|
||||||
if (existingGroup == null) throw new GroupNotFoundException(groupId);
|
|
||||||
if (_groups.Contains(existingGroup))
|
|
||||||
{
|
|
||||||
_groups.Remove(existingGroup);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<GroupDao> IGroupRepository.GetAllGroups()
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool UpdateGroupById(int groupID, GroupDao updatedGroup)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
GroupDao IGroupRepository.GetGroupById(int groupID)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool AddGroup(string Name)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.domain.Models;
|
|
||||||
using Demo.Domain.UseCase;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Demo.Data.Repository
|
|
||||||
{
|
|
||||||
public interface IPresenceRepository
|
|
||||||
{
|
|
||||||
List<PresenceDao> GetPresenceByDateAndGroup(DateTime date, int groupId);
|
|
||||||
void SavePresence(List<PresenceDao> presences);
|
|
||||||
List<PresenceDao> GetPresenceByGroup(int groupId);
|
|
||||||
DateOnly? GetLastDateByGroupId(int groupId);
|
|
||||||
List<PresenceDao> GetPresenceForAbsent(DateTime date, int GroupId);
|
|
||||||
void GetGeneralPresenceForGroup(int groupId);
|
|
||||||
void UpdateAtt(Guid UserGuid, int groupId, int firstLesson, int lastLesson, DateOnly date, bool isAttendance);
|
|
||||||
List<PresenceDao> GetAttendanceByGroup(int groupId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
|||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.domain.Models;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Demo.Data.Repository
|
|
||||||
{
|
|
||||||
public interface IUserRepository
|
|
||||||
{
|
|
||||||
List<UserDao> GetAllUsers();
|
|
||||||
bool RemoveUserById(Guid UserGuid);
|
|
||||||
UserDao? UpdateUser(UserDao user);
|
|
||||||
List<UserDao> GetUserNames();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
using Demo.Data.LocalData;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.domain.Models;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace Demo.Data.Repository
|
|
||||||
{
|
|
||||||
public class PresenceRepositoryImpl
|
|
||||||
{
|
|
||||||
private List<PresenceLocalEntity> _presences;
|
|
||||||
|
|
||||||
public PresenceRepositoryImpl()
|
|
||||||
{
|
|
||||||
_presences = new List<PresenceLocalEntity>(); // Ваши реальные данные
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SavePresence(List<PresenceLocalEntity> presences)
|
|
||||||
{
|
|
||||||
foreach (var presence in presences)
|
|
||||||
{
|
|
||||||
var existingPresence = _presences.FirstOrDefault(p =>
|
|
||||||
p.Date == presence.Date &&
|
|
||||||
p.UserGuid == presence.UserGuid &&
|
|
||||||
p.LessonNumber == presence.LessonNumber);
|
|
||||||
|
|
||||||
if (existingPresence == null)
|
|
||||||
{
|
|
||||||
_presences.Add(presence);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
existingPresence.IsAttedance = presence.IsAttedance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<PresenceLocalEntity> GetPresenceByDateAndGroup(DateTime date, int groupId)
|
|
||||||
{
|
|
||||||
return _presences.Where(p => p.Date.Date == date.Date &&
|
|
||||||
LocalStaticData.users.Any(u => u.GroupID == groupId && u.Guid == p.UserGuid)).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<PresenceLocalEntity> GetPresenceByGroup(int groupId)
|
|
||||||
{
|
|
||||||
return _presences.Where(p => p.GroupId == groupId).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,122 +0,0 @@
|
|||||||
using Demo.Data.RemoteData.RemoteDataBase;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.domain.Models;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Demo.Data.Repository
|
|
||||||
{
|
|
||||||
public class SQLGroupRepositoryImpl : IGroupRepository
|
|
||||||
{
|
|
||||||
private readonly RemoteDatabaseContext _remoteDatabaseContext;
|
|
||||||
|
|
||||||
public SQLGroupRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
|
|
||||||
{
|
|
||||||
_remoteDatabaseContext = remoteDatabaseContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Метод для добавления новой группы
|
|
||||||
public bool AddGroup(GroupDao newGroup)
|
|
||||||
{
|
|
||||||
var groupDao = new GroupDao
|
|
||||||
{
|
|
||||||
Name = newGroup.Name
|
|
||||||
};
|
|
||||||
_remoteDatabaseContext.Groups.Add(groupDao);
|
|
||||||
_remoteDatabaseContext.SaveChanges();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Метод для получения группы по ID
|
|
||||||
public GroupDao GetGroupById(int groupId)
|
|
||||||
{
|
|
||||||
var groupDao = _remoteDatabaseContext.Groups
|
|
||||||
.Include(g => g.Users)
|
|
||||||
.FirstOrDefault(g => g.Id == groupId);
|
|
||||||
if (groupDao == null) return null;
|
|
||||||
|
|
||||||
return new GroupDao
|
|
||||||
{
|
|
||||||
Id = groupDao.Id,
|
|
||||||
Name = groupDao.Name,
|
|
||||||
Users = groupDao.Users.Select(u => new UserDao
|
|
||||||
{
|
|
||||||
UserGuid = u.UserGuid,
|
|
||||||
FIO = u.FIO,
|
|
||||||
GroupId = u.GroupId
|
|
||||||
}).ToList()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Метод для получения всех групп
|
|
||||||
public List<GroupDao> GetAllGroups()
|
|
||||||
{
|
|
||||||
return _remoteDatabaseContext.Groups
|
|
||||||
.Include(g => g.Users)
|
|
||||||
.Select(g => new GroupDao
|
|
||||||
{
|
|
||||||
Id = g.Id,
|
|
||||||
Name = g.Name,
|
|
||||||
Users = g.Users.Select(u => new UserDao
|
|
||||||
{
|
|
||||||
UserGuid = u.UserGuid,
|
|
||||||
FIO = u.FIO,
|
|
||||||
GroupId = u.GroupId
|
|
||||||
}).ToList()
|
|
||||||
})
|
|
||||||
.ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Метод для обновления группы по ID
|
|
||||||
public bool UpdateGroupById(int groupId, GroupDao updatedGroup)
|
|
||||||
{
|
|
||||||
var groupDao = _remoteDatabaseContext.Groups
|
|
||||||
.Include(g => g.Users)
|
|
||||||
.FirstOrDefault(g => g.Id == groupId);
|
|
||||||
if (groupDao == null) return false;
|
|
||||||
|
|
||||||
groupDao.Name = updatedGroup.Name;
|
|
||||||
// Пример обновления списка пользователей
|
|
||||||
groupDao.Users = updatedGroup.Users.Select(user => new UserDao
|
|
||||||
{
|
|
||||||
UserGuid = user.UserGuid,
|
|
||||||
FIO = user.FIO,
|
|
||||||
GroupId = user.GroupId
|
|
||||||
}).ToList();
|
|
||||||
|
|
||||||
_remoteDatabaseContext.SaveChanges();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Метод для удаления группы по ID
|
|
||||||
public bool RemoveGroupById(int groupId)
|
|
||||||
{
|
|
||||||
var groupDao = _remoteDatabaseContext.Groups.Find(groupId);
|
|
||||||
if (groupDao == null) return false;
|
|
||||||
|
|
||||||
_remoteDatabaseContext.Groups.Remove(groupDao);
|
|
||||||
_remoteDatabaseContext.SaveChanges();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool UpdateGroupById(int groupID, GroupLocalEntity updatedGroup)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public bool AddGroup(string Name)
|
|
||||||
{
|
|
||||||
|
|
||||||
var groupDao = new GroupDao
|
|
||||||
{
|
|
||||||
Name = Name
|
|
||||||
};
|
|
||||||
_remoteDatabaseContext.Groups.Add(groupDao);
|
|
||||||
_remoteDatabaseContext.SaveChanges();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,250 +0,0 @@
|
|||||||
using Demo.Data.LocalData;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.domain.Models;
|
|
||||||
using DocumentFormat.OpenXml.InkML;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Data;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Text;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
|
||||||
|
|
||||||
namespace Demo.Data.Repository
|
|
||||||
{
|
|
||||||
public class SQLPresenceRepositoryImpl : IPresenceRepository
|
|
||||||
{
|
|
||||||
private readonly RemoteDatabaseContext _remoteDatabaseContext;
|
|
||||||
|
|
||||||
public SQLPresenceRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
|
|
||||||
{
|
|
||||||
_remoteDatabaseContext = remoteDatabaseContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public List<PresenceDao> GetAttendanceByGroup(int groupId)
|
|
||||||
{
|
|
||||||
// Получаем записи посещаемости для указанной группы
|
|
||||||
return _remoteDatabaseContext.PresenceDaos
|
|
||||||
.Where(p => p.GroupId == groupId)
|
|
||||||
.Select(p => new PresenceDao
|
|
||||||
{
|
|
||||||
UserGuid = p.UserGuid,
|
|
||||||
GroupId = p.GroupId,
|
|
||||||
Date = p.Date,
|
|
||||||
LessonNumber = p.LessonNumber,
|
|
||||||
IsAttedance = p.IsAttedance
|
|
||||||
})
|
|
||||||
.ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public List<PresenceDao> GetPresenceForAbsent(DateTime date, int GroupId)
|
|
||||||
{
|
|
||||||
return _remoteDatabaseContext.PresenceDaos.Where(p => p.GroupId == GroupId && p.Date == DateOnly.FromDateTime(date)).ToList();
|
|
||||||
}
|
|
||||||
public List<PresenceDao> GetPresenceByDateAndGroup(DateTime date, int groupId)
|
|
||||||
{
|
|
||||||
return _remoteDatabaseContext.PresenceDaos.Where(p => p.Date == DateOnly.FromDateTime(date) &&
|
|
||||||
_remoteDatabaseContext.Users.Any(u => u.GroupId == groupId && u.UserGuid == p.UserGuid)).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Реализация метода для получения всех данных по группе
|
|
||||||
public List<PresenceDao> GetPresenceByGroup(int groupId)
|
|
||||||
{
|
|
||||||
return _remoteDatabaseContext.PresenceDaos.Where(p => p.GroupId == groupId)
|
|
||||||
.OrderBy(p => p.Date)
|
|
||||||
.ThenBy(p=>p.UserGuid).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SavePresence(List<PresenceDao> presences)
|
|
||||||
{
|
|
||||||
_remoteDatabaseContext.PresenceDaos.AddRange(presences.Select(it => new PresenceDao
|
|
||||||
{
|
|
||||||
Date = it.Date,
|
|
||||||
IsAttedance = it.IsAttedance,
|
|
||||||
LessonNumber = it.LessonNumber,
|
|
||||||
UserGuid = it.UserGuid,
|
|
||||||
GroupId = it.GroupId
|
|
||||||
}));
|
|
||||||
_remoteDatabaseContext.SaveChanges();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateAtt(Guid UserGuid, int groupId, int firstLesson, int lastLesson, DateOnly date, bool isAttendance)
|
|
||||||
{
|
|
||||||
// Находим все записи по UserId, GroupId, LessonNumber (в диапазоне) и дате
|
|
||||||
var presences = _remoteDatabaseContext.PresenceDaos
|
|
||||||
.Where(p => p.UserGuid == UserGuid
|
|
||||||
&& p.GroupId == groupId
|
|
||||||
&& p.LessonNumber >= firstLesson
|
|
||||||
&& p.LessonNumber <= lastLesson
|
|
||||||
&& p.Date == date)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (presences.Any())
|
|
||||||
{
|
|
||||||
// Обновляем значение IsAttendance для всех найденных записей
|
|
||||||
foreach (var presence in presences)
|
|
||||||
{
|
|
||||||
presence.IsAttedance = isAttendance;
|
|
||||||
}
|
|
||||||
|
|
||||||
_remoteDatabaseContext.SaveChanges(); // Сохраняем изменения в базе данных
|
|
||||||
Console.WriteLine($"Статус посещаемости для пользователя {UserGuid} с {firstLesson} по {lastLesson} урок обновлён.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Посещаемость для пользователя ID: {UserGuid} на дату {date.ToShortDateString()} с {firstLesson} по {lastLesson} уроки не найдена.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public DateOnly? GetLastDateByGroupId(int groupId)
|
|
||||||
{
|
|
||||||
// Проверяем наличие записей о посещаемости в базе данных для данной группы.
|
|
||||||
var lastDate = _remoteDatabaseContext.PresenceDaos
|
|
||||||
.Where(p => p.GroupId == groupId)
|
|
||||||
.OrderByDescending(p => p.Date)
|
|
||||||
.Select(p => p.Date)
|
|
||||||
.FirstOrDefault();
|
|
||||||
|
|
||||||
return lastDate == default ? (DateOnly?)null : lastDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<PresenceDao> PresenceSort(List<PresenceDao> presences)
|
|
||||||
{
|
|
||||||
presences=_remoteDatabaseContext.PresenceDaos.OrderBy(p=>p.Date).ToList();
|
|
||||||
return presences;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void GetGeneralPresenceForGroup(int groupId)
|
|
||||||
{
|
|
||||||
var attendanceRecords = _remoteDatabaseContext.PresenceDaos
|
|
||||||
.Where(p => p.GroupId == groupId)
|
|
||||||
.OrderBy(p => p.LessonNumber)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var uniqueDates = _remoteDatabaseContext.PresenceDaos
|
|
||||||
.Select(p => p.Date)
|
|
||||||
.Distinct()
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
int sessionId = 0;
|
|
||||||
int lessonNum = 1;
|
|
||||||
double attendedSessions = 0;
|
|
||||||
int totalDays = -1;
|
|
||||||
int totalLessons = 0;
|
|
||||||
DateOnly currentDate = DateOnly.MinValue;
|
|
||||||
List<Guid> uniqueUserGuids = new List<Guid>();
|
|
||||||
|
|
||||||
foreach (var record in attendanceRecords)
|
|
||||||
{
|
|
||||||
if (!uniqueUserGuids.Contains(record.UserGuid))
|
|
||||||
{
|
|
||||||
uniqueUserGuids.Add(record.UserGuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (record.Date != currentDate)
|
|
||||||
{
|
|
||||||
currentDate = record.Date;
|
|
||||||
sessionId++;
|
|
||||||
lessonNum = record.LessonNumber;
|
|
||||||
totalDays++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (record.LessonNumber != lessonNum && currentDate == record.Date)
|
|
||||||
{
|
|
||||||
lessonNum = record.LessonNumber;
|
|
||||||
totalLessons++;
|
|
||||||
sessionId++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (record.IsAttedance)
|
|
||||||
{
|
|
||||||
attendedSessions++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.WriteLine(attendanceRecords.Count);
|
|
||||||
Console.WriteLine($"Количество студентов в группе: {uniqueUserGuids.Count}, " +
|
|
||||||
$"Количество проведённых занятий: {sessionId}, " +
|
|
||||||
$"Общий процент посещаемости группы: {attendedSessions / uniqueUserGuids.Count / lessonNum / uniqueDates.Count * 100}%");
|
|
||||||
|
|
||||||
List<AttendanceSummary> attendanceSummaryList = new List<AttendanceSummary>();
|
|
||||||
List<Guid> processedUserGuids = new List<Guid>();
|
|
||||||
double attendedCount = 0;
|
|
||||||
double missedCount = 0;
|
|
||||||
Guid currentUserGuid = Guid.Empty;
|
|
||||||
|
|
||||||
foreach (var userGuid in uniqueUserGuids)
|
|
||||||
{
|
|
||||||
var userAttendanceRecords = _remoteDatabaseContext.PresenceDaos
|
|
||||||
.Where(p => p.UserGuid == userGuid);
|
|
||||||
|
|
||||||
foreach (var record in userAttendanceRecords)
|
|
||||||
{
|
|
||||||
currentUserGuid = record.UserGuid;
|
|
||||||
|
|
||||||
if (!processedUserGuids.Contains(currentUserGuid))
|
|
||||||
{
|
|
||||||
missedCount = 0;
|
|
||||||
attendedCount = 0;
|
|
||||||
processedUserGuids.Add(currentUserGuid);
|
|
||||||
attendanceSummaryList.Add(new AttendanceSummary { UserGuid = currentUserGuid, Attended = attendedCount, Missed = missedCount });
|
|
||||||
|
|
||||||
if (record.IsAttedance)
|
|
||||||
{
|
|
||||||
attendanceSummaryList.First(a => a.UserGuid == currentUserGuid).Attended = attendedCount += 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
attendanceSummaryList.First(a => a.UserGuid == currentUserGuid).Missed = missedCount += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (record.IsAttedance)
|
|
||||||
{
|
|
||||||
attendanceSummaryList.First(a => a.UserGuid == currentUserGuid).Attended = attendedCount += 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
attendanceSummaryList.First(a => a.UserGuid == currentUserGuid).Missed = missedCount += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var summary in attendanceSummaryList)
|
|
||||||
{
|
|
||||||
double attendancePercentage = summary.Attended / (summary.Missed + summary.Attended) * 100;
|
|
||||||
|
|
||||||
if (attendancePercentage < 40)
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = ConsoleColor.Red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.WriteLine($"ID Пользователя: {summary.UserGuid}, " +
|
|
||||||
$"Посетил: {summary.Attended}, " +
|
|
||||||
$"Пропустил: {summary.Missed}, " +
|
|
||||||
$"Процент посещаемости: {attendancePercentage}%");
|
|
||||||
Console.ForegroundColor = ConsoleColor.White;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class AttendanceSummary
|
|
||||||
{
|
|
||||||
public Guid UserGuid { get; set; }
|
|
||||||
public double Attended { get; set; }
|
|
||||||
public double Missed { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,61 +0,0 @@
|
|||||||
using Demo.Data.Exceptions;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.domain.Models;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Demo.Data.Repository
|
|
||||||
{
|
|
||||||
public class SQLUserRepositoryImpl : IUserRepository
|
|
||||||
{
|
|
||||||
private readonly RemoteDatabaseContext _remoteDatabaseContext;
|
|
||||||
|
|
||||||
public SQLUserRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
|
|
||||||
{
|
|
||||||
_remoteDatabaseContext = remoteDatabaseContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool RemoveUserById(Guid UserGuid)
|
|
||||||
{
|
|
||||||
var user = _remoteDatabaseContext.Users.FirstOrDefault(u => u.UserGuid == UserGuid);
|
|
||||||
if (user == null) throw new UserNotFoundException(UserGuid);
|
|
||||||
|
|
||||||
_remoteDatabaseContext.Users.Remove(user);
|
|
||||||
_remoteDatabaseContext.SaveChanges();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UserDao? UpdateUser(UserDao user)
|
|
||||||
{
|
|
||||||
var existingUser = _remoteDatabaseContext.Users.FirstOrDefault(u => u.UserGuid == user.UserGuid);
|
|
||||||
if (existingUser == null) throw new UserNotFoundException(user.UserGuid);
|
|
||||||
|
|
||||||
// Обновляем поля существующего пользователя
|
|
||||||
existingUser.FIO = user.FIO;
|
|
||||||
existingUser.GroupId = user.GroupId;
|
|
||||||
_remoteDatabaseContext.SaveChanges();
|
|
||||||
|
|
||||||
return existingUser;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<UserDao> GetAllUsers()
|
|
||||||
{
|
|
||||||
// Возвращаем пользователей, отсортированных по UserId
|
|
||||||
return _remoteDatabaseContext.Users.OrderBy(u => u.UserGuid).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<UserDao> GetUserNames()
|
|
||||||
{
|
|
||||||
var users = GetAllUsers();
|
|
||||||
List<UserDao> names = new List<UserDao>();
|
|
||||||
foreach (var user in users)
|
|
||||||
{
|
|
||||||
names.Add(new UserDao{ UserGuid = user.UserGuid, FIO=user.FIO });
|
|
||||||
}
|
|
||||||
return names;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
using Demo.Data.Exceptions;
|
|
||||||
using Demo.Data.LocalData;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.domain.Models;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace Demo.Data.Repository
|
|
||||||
{
|
|
||||||
public class UserRepositoryImpl
|
|
||||||
{
|
|
||||||
private List<UserLocalEnity> _users;
|
|
||||||
|
|
||||||
public UserRepositoryImpl()
|
|
||||||
{
|
|
||||||
_users = LocalStaticData.users;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<UserLocalEnity> GetAllUsers => _users;
|
|
||||||
|
|
||||||
|
|
||||||
public bool RemoveUserById(Guid UserGuid)
|
|
||||||
{
|
|
||||||
var user = _users.FirstOrDefault(u => u.Guid == UserGuid);
|
|
||||||
if (user == null) throw new UserNotFoundException(UserGuid);
|
|
||||||
|
|
||||||
_users.Remove(user);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UserDao? UpdateUser(UserDao user)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,210 +0,0 @@
|
|||||||
using ClosedXML.Excel;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.Data.Repository;
|
|
||||||
using Demo.domain.Models;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Demo.Domain.UseCase
|
|
||||||
{
|
|
||||||
public class UseCaseGeneratePresence
|
|
||||||
{
|
|
||||||
public readonly IUserRepository _userRepository;
|
|
||||||
public readonly IPresenceRepository _presenceRepository;
|
|
||||||
private readonly IGroupRepository _groupRepository;
|
|
||||||
|
|
||||||
public UseCaseGeneratePresence(IUserRepository userRepository, IPresenceRepository presenceRepository, IGroupRepository groupRepository)
|
|
||||||
{
|
|
||||||
_userRepository = userRepository;
|
|
||||||
_presenceRepository = presenceRepository;
|
|
||||||
_groupRepository = groupRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Dictionary<string, List<AttendanceRecord>> GetAllAttendanceByGroups()
|
|
||||||
{
|
|
||||||
var attendanceByGroup = new Dictionary<string, List<AttendanceRecord>>();
|
|
||||||
var allGroups = _groupRepository.GetAllGroups();
|
|
||||||
|
|
||||||
foreach (var group in allGroups)
|
|
||||||
{
|
|
||||||
var groupAttendance = _presenceRepository.GetAttendanceByGroup(group.Id);
|
|
||||||
var attendanceRecords = new List<AttendanceRecord>();
|
|
||||||
|
|
||||||
foreach (var record in groupAttendance)
|
|
||||||
{
|
|
||||||
var names = _userRepository.GetUserNames().Where(u => u.UserGuid == record.UserGuid);
|
|
||||||
foreach (var name in names)
|
|
||||||
{
|
|
||||||
attendanceRecords.Add(new AttendanceRecord
|
|
||||||
{
|
|
||||||
UserName = name.FIO,
|
|
||||||
UserGuid = name.UserGuid,
|
|
||||||
Date = record.Date,
|
|
||||||
IsAttedance = record.IsAttedance,
|
|
||||||
LessonNumber = record.LessonNumber,
|
|
||||||
GroupName = group.Name
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
attendanceByGroup.Add(group.Name, attendanceRecords);
|
|
||||||
}
|
|
||||||
|
|
||||||
return attendanceByGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ExportAttendanceToExcel()
|
|
||||||
{
|
|
||||||
var attendanceByGroup = GetAllAttendanceByGroups();
|
|
||||||
string projectDirectory = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName;
|
|
||||||
string reportsFolderPath = Path.Combine(projectDirectory, "Reports");
|
|
||||||
string filePath = Path.Combine(reportsFolderPath, "AttendanceReport.xlsx");
|
|
||||||
|
|
||||||
// Создаем папку, если она не существует
|
|
||||||
if (!Directory.Exists(reportsFolderPath))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(reportsFolderPath);
|
|
||||||
}
|
|
||||||
using (var workbook = new XLWorkbook())
|
|
||||||
{
|
|
||||||
foreach (var group in attendanceByGroup)
|
|
||||||
{
|
|
||||||
var worksheet = workbook.Worksheets.Add($"{group.Key}");
|
|
||||||
worksheet.Cell(1, 1).Value = "ФИО";
|
|
||||||
worksheet.Cell(1, 2).Value = "Группа";
|
|
||||||
worksheet.Cell(1, 3).Value = "Дата";
|
|
||||||
worksheet.Cell(1, 4).Value = "Занятие";
|
|
||||||
worksheet.Cell(1, 5).Value = "Статус";
|
|
||||||
|
|
||||||
int row = 2;
|
|
||||||
int lesNum = 1;
|
|
||||||
foreach (var record in group.Value.OrderBy(r => r.Date).ThenBy(r => r.LessonNumber).ThenBy(r => r.UserGuid))
|
|
||||||
{
|
|
||||||
if (lesNum != record.LessonNumber)
|
|
||||||
{
|
|
||||||
row++;
|
|
||||||
}
|
|
||||||
worksheet.Cell(row, 1).Value = record.UserName;
|
|
||||||
worksheet.Cell(row, 2).Value = record.GroupName;
|
|
||||||
worksheet.Cell(row, 3).Value = record.Date.ToString("dd.MM.yyyy");
|
|
||||||
worksheet.Cell(row, 4).Value = record.LessonNumber;
|
|
||||||
worksheet.Cell(row, 5).Value = record.IsAttedance ? "Присутствует" : "Отсутствует";
|
|
||||||
row++;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
lesNum = record.LessonNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
worksheet.Columns().AdjustToContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
workbook.SaveAs(filePath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public List<PresenceDao> GetPresenceByDateAndGroup(DateTime date, int groupId)
|
|
||||||
{
|
|
||||||
return _presenceRepository.GetPresenceByDateAndGroup(date, groupId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void GeneratePresenceDaily(int firstLesson, int lastLesson, int groupId)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var users = _userRepository.GetAllUsers().Where(u => u.GroupId == groupId).ToList();
|
|
||||||
|
|
||||||
// Находим последнюю дату посещаемости для данной группы
|
|
||||||
DateOnly startDate = _presenceRepository.GetLastDateByGroupId(groupId)?.AddDays(1)
|
|
||||||
?? DateOnly.FromDateTime(DateTime.Today);
|
|
||||||
|
|
||||||
List<PresenceDao> presences = new List<PresenceDao>();
|
|
||||||
for (int lessonNumber = firstLesson; lessonNumber <= lastLesson; lessonNumber++)
|
|
||||||
{
|
|
||||||
foreach (var user in users)
|
|
||||||
{
|
|
||||||
var presence = new PresenceDao
|
|
||||||
{
|
|
||||||
UserGuid = user.UserGuid,
|
|
||||||
GroupId = user.GroupId,
|
|
||||||
Date = startDate,
|
|
||||||
LessonNumber = lessonNumber,
|
|
||||||
IsAttedance = true
|
|
||||||
};
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_presenceRepository.SavePresence(new List<PresenceDao> { presence });
|
|
||||||
Console.WriteLine($"Посещаемость добавлена для UserId = {user.UserGuid}, LessonNumber = {lessonNumber} на дату {startDate}");
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Ошибка при добавлении посещаемости для UserId = {user.UserGuid}: {ex.Message}");
|
|
||||||
if (ex.InnerException != null)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Inner exception: {ex.InnerException.Message}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}");
|
|
||||||
if (ex.InnerException != null)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Inner exception: {ex.InnerException.Message}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void GenerateWeeklyPresence(int firstLesson, int lastLesson, int groupId, DateTime startTime)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < 7; i++)
|
|
||||||
{
|
|
||||||
DateTime currentTime = startTime.AddDays(i);
|
|
||||||
GeneratePresenceDaily(firstLesson, lastLesson, groupId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Отметить пользователя как отсутствующего на диапазоне занятий
|
|
||||||
public void MarkUserAbsentForLessons(Guid UserGuid, int groupId, int firstLesson, int lastLesson, DateTime date)
|
|
||||||
{
|
|
||||||
List<PresenceDao> presences = _presenceRepository.GetPresenceForAbsent(date, groupId);
|
|
||||||
|
|
||||||
// Обновляем состояние присутствия для указанных занятий
|
|
||||||
foreach (var presence in presences.Where(p => p.UserGuid == UserGuid && p.LessonNumber >= firstLesson && p.LessonNumber <= lastLesson))
|
|
||||||
{
|
|
||||||
presence.IsAttedance = false; // Устанавливаем отсутствие
|
|
||||||
Console.WriteLine($"PresenceId: {presence.PresenceId}, UserId: {presence.UserGuid}, Lesson Num: {presence.LessonNumber}, Att: {presence.IsAttedance}");
|
|
||||||
}
|
|
||||||
// Сохраняем изменения в репозитории
|
|
||||||
_presenceRepository.UpdateAtt(UserGuid, groupId, firstLesson, lastLesson, DateOnly.FromDateTime(date), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<PresenceDao> GetAllPresenceByGroup(int groupId)
|
|
||||||
{
|
|
||||||
return _presenceRepository.GetPresenceByGroup(groupId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void GetGeneralPresence(int groupId)
|
|
||||||
{
|
|
||||||
_presenceRepository.GetGeneralPresenceForGroup(groupId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,166 +0,0 @@
|
|||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.domain.Models;
|
|
||||||
using Demo.Domain.UseCase;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Demo.UI
|
|
||||||
{
|
|
||||||
public class PresenceConsole
|
|
||||||
{
|
|
||||||
private readonly UseCaseGeneratePresence _presenceUseCase;
|
|
||||||
|
|
||||||
public PresenceConsole(UseCaseGeneratePresence presenceUseCase)
|
|
||||||
{
|
|
||||||
_presenceUseCase = presenceUseCase;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ExportAttendanceToExcel()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_presenceUseCase.ExportAttendanceToExcel();
|
|
||||||
Console.WriteLine("Данные посещаемости успешно экспортированы в Excel.");
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Ошибка при экспорте посещаемости: {ex.Message}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Метод для генерации посещаемости на день
|
|
||||||
public void GeneratePresenceForDay(DateTime date, int groupId, int firstLesson, int lastLesson)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_presenceUseCase.GeneratePresenceDaily(firstLesson, lastLesson, groupId);
|
|
||||||
Console.WriteLine("Посещаемость на день успешно сгенерирована.");
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Метод для генерации посещаемости на неделю
|
|
||||||
public void GeneratePresenceForWeek(DateTime date, int groupId, int firstLesson, int lastLesson)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_presenceUseCase.GenerateWeeklyPresence(firstLesson, lastLesson, groupId, date);
|
|
||||||
Console.WriteLine("Посещаемость на неделю успешно сгенерирована.");
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Метод для отображения посещаемости на конкретную дату и группу
|
|
||||||
public void DisplayPresence(DateTime date, int groupId)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
List<PresenceDao> presences = _presenceUseCase.GetPresenceByDateAndGroup(date, groupId);
|
|
||||||
|
|
||||||
if (presences == null || presences.Count == 0)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Посещаемость на выбранную дату отсутствует.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Сортируем присутствия по номеру занятия и ID пользователя
|
|
||||||
var sortedPresences = presences.OrderBy(p => p.LessonNumber)
|
|
||||||
.ThenBy(p => p.UserGuid);
|
|
||||||
|
|
||||||
Console.WriteLine($"\nПосещаемость на {date.ToShortDateString()} для группы с ID {groupId}:");
|
|
||||||
Console.WriteLine("---------------------------------------------");
|
|
||||||
|
|
||||||
int previousLessonNumber = -1; // Инициализация для сравнения
|
|
||||||
foreach (var presence in sortedPresences)
|
|
||||||
{
|
|
||||||
if (previousLessonNumber != presence.LessonNumber)
|
|
||||||
{
|
|
||||||
Console.WriteLine("---------------------------------------------");
|
|
||||||
previousLessonNumber = presence.LessonNumber;
|
|
||||||
}
|
|
||||||
string status = presence.IsAttedance ? "Присутствует" : "Отсутствует";
|
|
||||||
Console.WriteLine($"Пользователь ID: {presence.UserGuid}, Занятие {presence.LessonNumber}: {status}");
|
|
||||||
}
|
|
||||||
Console.WriteLine("---------------------------------------------");
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Ошибка при выводе посещаемости: {ex.Message}");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void MarkUserAbsent(DateTime date, int groupId, Guid UserGuid, int firstLesson, int lastLesson)
|
|
||||||
{
|
|
||||||
_presenceUseCase.MarkUserAbsentForLessons(UserGuid, groupId, firstLesson, lastLesson, date);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DisplayGeneralPresence(int groupId)
|
|
||||||
{
|
|
||||||
_presenceUseCase.GetGeneralPresence(groupId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void DisplayAllPresenceByGroup(int groupId)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Получаем все посещения для группы
|
|
||||||
var presences = _presenceUseCase.GetAllPresenceByGroup(groupId);
|
|
||||||
|
|
||||||
if (presences == null || presences.Count == 0)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Посещаемость для группы с ID {groupId} отсутствует.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Группируем по дате
|
|
||||||
var groupedPresences = presences.GroupBy(p => p.Date);
|
|
||||||
|
|
||||||
foreach (var group in groupedPresences)
|
|
||||||
{
|
|
||||||
Console.WriteLine("===================================================");
|
|
||||||
Console.WriteLine($"Дата: {group.Key.ToString("dd.MM.yyyy")}");
|
|
||||||
Console.WriteLine("===================================================");
|
|
||||||
|
|
||||||
// Группируем по занятию
|
|
||||||
var groupedByLesson = group.GroupBy(p => p.LessonNumber);
|
|
||||||
|
|
||||||
foreach (var lessonGroup in groupedByLesson)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Занятие {lessonGroup.Key}:");
|
|
||||||
|
|
||||||
// Создаем HashSet для уникальных пользователей
|
|
||||||
var UserGuid = new HashSet<Guid>();
|
|
||||||
|
|
||||||
foreach (var presence in lessonGroup)
|
|
||||||
{
|
|
||||||
// Проверяем, добавляется ли пользователь в HashSet
|
|
||||||
if (UserGuid.Add(presence.UserGuid))
|
|
||||||
{
|
|
||||||
string status = presence.IsAttedance ? "Присутствует" : "Отсутствует";
|
|
||||||
Console.WriteLine($"Пользователь ID: {presence.UserGuid}, Статус: {status}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.WriteLine("---------------------------------------------------");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Ошибка при выводе посещаемости: {ex.Message}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
|||||||
c416a42e3e313e9480af46c25edbb75fd3e061bad114e61913f56d1300225cc9
|
|
@ -1 +0,0 @@
|
|||||||
4cf106e8bf2ecf3ef568187aa2d8c82425253591b5ef35bc0d4895e000978a11
|
|
@ -1,632 +0,0 @@
|
|||||||
C:\Users\adm\Source\Repos\presence_new\Demo\bin\Debug\net8.0\Demo.exe
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\bin\Debug\net8.0\Demo.deps.json
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\bin\Debug\net8.0\Demo.runtimeconfig.json
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\bin\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\bin\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.GeneratedMSBuildEditorConfig.editorconfig
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.AssemblyInfoInputs.cache
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.AssemblyInfo.cs
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.csproj.CoreCompileInputs.cache
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\obj\Debug\net8.0\refint\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.genruntimeconfig.cache
|
|
||||||
C:\Users\adm\Source\Repos\presence_new\Demo\obj\Debug\net8.0\ref\Demo.dll
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.GeneratedMSBuildEditorConfig.editorconfig
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.AssemblyInfoInputs.cache
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.AssemblyInfo.cs
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.csproj.CoreCompileInputs.cache
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\obj\Debug\net8.0\refint\Demo.dll
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\bin\Debug\net8.0\Demo.exe
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\bin\Debug\net8.0\Demo.deps.json
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\bin\Debug\net8.0\Demo.runtimeconfig.json
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\bin\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\bin\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\obj\Debug\net8.0\Demo.genruntimeconfig.cache
|
|
||||||
C:\Users\prdb\Source\Repos\presence_new\Demo\obj\Debug\net8.0\ref\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\bin\Debug\net8.0\Demo.exe
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\bin\Debug\net8.0\Demo.deps.json
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\bin\Debug\net8.0\Demo.runtimeconfig.json
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\bin\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\bin\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\obj\Debug\net8.0\Demo.GeneratedMSBuildEditorConfig.editorconfig
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\obj\Debug\net8.0\Demo.AssemblyInfoInputs.cache
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\obj\Debug\net8.0\Demo.AssemblyInfo.cs
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\obj\Debug\net8.0\Demo.csproj.CoreCompileInputs.cache
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\obj\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\obj\Debug\net8.0\refint\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\obj\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\obj\Debug\net8.0\Demo.genruntimeconfig.cache
|
|
||||||
C:\Users\adm\Source\Repos\presence1\Demo\obj\Debug\net8.0\ref\Demo.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Humanizer.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Bcl.AsyncInterfaces.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.Workspaces.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Abstractions.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Design.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Relational.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Abstractions.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Memory.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyModel.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Extensions.Options.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Microsoft.Extensions.Primitives.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Mono.TextTemplating.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Npgsql.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\System.CodeDom.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\System.Composition.AttributedModel.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\System.Composition.Convention.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\System.Composition.Hosting.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\System.Composition.Runtime.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\System.Composition.TypedParts.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\System.IO.Pipelines.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\obj\Debug\net8.0\Demo.csproj.AssemblyReference.cache
|
|
||||||
C:\Users\adm\source\repos\presence1\Demo\obj\Debug\net8.0\Demo.csproj.Up2Date
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Demo.exe
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Demo.deps.json
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Demo.runtimeconfig.json
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Humanizer.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Bcl.AsyncInterfaces.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.Workspaces.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Abstractions.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Design.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Relational.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Abstractions.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Memory.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyModel.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Extensions.Options.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Microsoft.Extensions.Primitives.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Mono.TextTemplating.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Npgsql.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\System.CodeDom.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\System.Composition.AttributedModel.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\System.Composition.Convention.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\System.Composition.Hosting.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\System.Composition.Runtime.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\System.Composition.TypedParts.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\System.IO.Pipelines.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\Demo.csproj.AssemblyReference.cache
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\Demo.GeneratedMSBuildEditorConfig.editorconfig
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\Demo.AssemblyInfoInputs.cache
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\Demo.AssemblyInfo.cs
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\Demo.csproj.CoreCompileInputs.cache
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\Demo.csproj.Up2Date
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\refint\Demo.dll
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\Demo.genruntimeconfig.cache
|
|
||||||
C:\Users\sokol\source\repos\presence123\Demo\obj\Debug\net8.0\ref\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Demo.exe
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Demo.deps.json
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Demo.runtimeconfig.json
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Humanizer.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Bcl.AsyncInterfaces.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.Workspaces.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Abstractions.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Design.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Relational.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Abstractions.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Memory.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyModel.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Options.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Primitives.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Mono.TextTemplating.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Npgsql.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\System.CodeDom.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\System.Composition.AttributedModel.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\System.Composition.Convention.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\System.Composition.Hosting.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\System.Composition.Runtime.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\System.Composition.TypedParts.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\System.IO.Pipelines.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.csproj.AssemblyReference.cache
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.GeneratedMSBuildEditorConfig.editorconfig
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.AssemblyInfoInputs.cache
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.AssemblyInfo.cs
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.csproj.CoreCompileInputs.cache
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.csproj.Up2Date
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\refint\Demo.dll
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.genruntimeconfig.cache
|
|
||||||
C:\Users\adm\Source\Repos\presence\Demo\obj\Debug\net8.0\ref\Demo.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Demo.exe
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Demo.deps.json
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Demo.runtimeconfig.json
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Humanizer.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Bcl.AsyncInterfaces.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.Workspaces.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Abstractions.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Design.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Relational.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Abstractions.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Memory.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyModel.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Options.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Primitives.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Mono.TextTemplating.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Npgsql.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\System.CodeDom.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\System.Composition.AttributedModel.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\System.Composition.Convention.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\System.Composition.Hosting.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\System.Composition.Runtime.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\System.Composition.TypedParts.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\System.IO.Pipelines.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\Demo.csproj.AssemblyReference.cache
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\Demo.GeneratedMSBuildEditorConfig.editorconfig
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\Demo.AssemblyInfoInputs.cache
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\Demo.AssemblyInfo.cs
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\Demo.csproj.CoreCompileInputs.cache
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\Demo.csproj.Up2Date
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\refint\Demo.dll
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\Demo.genruntimeconfig.cache
|
|
||||||
C:\Users\sokol\OneDrive\Desktop\presence\Demo\obj\Debug\net8.0\ref\Demo.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Demo.exe
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Demo.deps.json
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Demo.runtimeconfig.json
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Humanizer.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Bcl.AsyncInterfaces.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.Workspaces.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Abstractions.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Design.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Relational.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Abstractions.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Memory.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyModel.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Extensions.Options.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Microsoft.Extensions.Primitives.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Mono.TextTemplating.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Npgsql.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\System.CodeDom.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\System.Composition.AttributedModel.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\System.Composition.Convention.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\System.Composition.Hosting.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\System.Composition.Runtime.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\System.Composition.TypedParts.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\System.IO.Pipelines.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\Demo.csproj.AssemblyReference.cache
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\Demo.GeneratedMSBuildEditorConfig.editorconfig
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\Demo.AssemblyInfoInputs.cache
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\Demo.AssemblyInfo.cs
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\Demo.csproj.CoreCompileInputs.cache
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\Demo.csproj.Up2Date
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\refint\Demo.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\Demo.genruntimeconfig.cache
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\obj\Debug\net8.0\ref\Demo.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ClosedXML.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ClosedXML.Parser.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\DocumentFormat.OpenXml.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\DocumentFormat.OpenXml.Framework.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\ExcelNumberFormat.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\RBush.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\SixLabors.Fonts.dll
|
|
||||||
C:\Users\sokol\Source\Repos\presenceSQL\Demo\bin\Debug\net8.0\System.IO.Packaging.dll
|
|
||||||
C:\Users\IVAN\source\repos\presence\Demo\obj\Debug\net8.0\Demo.csproj.AssemblyReference.cache
|
|
||||||
C:\Users\IVAN\source\repos\presence\Demo\obj\Debug\net8.0\Demo.GeneratedMSBuildEditorConfig.editorconfig
|
|
||||||
C:\Users\IVAN\source\repos\presence\Demo\obj\Debug\net8.0\Demo.AssemblyInfoInputs.cache
|
|
||||||
C:\Users\IVAN\source\repos\presence\Demo\obj\Debug\net8.0\Demo.AssemblyInfo.cs
|
|
||||||
C:\Users\IVAN\source\repos\presence\Demo\obj\Debug\net8.0\Demo.csproj.CoreCompileInputs.cache
|
|
||||||
C:\Users\IVAN\source\repos\presence\Demo\obj\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\IVAN\source\repos\presence\Demo\obj\Debug\net8.0\refint\Demo.dll
|
|
||||||
C:\Users\IVAN\source\repos\presence\Demo\obj\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Demo.exe
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Demo.deps.json
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Demo.runtimeconfig.json
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Demo.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Demo.pdb
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ClosedXML.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ClosedXML.Parser.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\DocumentFormat.OpenXml.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\DocumentFormat.OpenXml.Framework.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ExcelNumberFormat.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Humanizer.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Bcl.AsyncInterfaces.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.CodeAnalysis.Workspaces.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Abstractions.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Design.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Relational.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Abstractions.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Caching.Memory.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.DependencyModel.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Options.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Microsoft.Extensions.Primitives.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Mono.TextTemplating.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Npgsql.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\RBush.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\SixLabors.Fonts.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\System.CodeDom.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\System.Composition.AttributedModel.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\System.Composition.Convention.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\System.Composition.Hosting.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\System.Composition.Runtime.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\System.Composition.TypedParts.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\System.IO.Packaging.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\System.IO.Pipelines.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.csproj.Up2Date
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\obj\Debug\net8.0\Demo.genruntimeconfig.cache
|
|
||||||
C:\Users\IVAN\Source\Repos\presence\Demo\obj\Debug\net8.0\ref\Demo.dll
|
|
Binary file not shown.
@ -1 +0,0 @@
|
|||||||
2d122b7bae2fdca3d62caefdfe3c7effd9444703ab570dfa39dc7dc8d617e61d
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
10
presence_new/Data/Exceptions/UserNotFoundException.cs
Normal file
10
presence_new/Data/Exceptions/UserNotFoundException.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Demo.Data.Exceptions
|
||||||
|
{
|
||||||
|
public class UserNotFoundException : RepositoryException
|
||||||
|
{
|
||||||
|
public UserNotFoundException(Guid userGuid)
|
||||||
|
: base($"Пользователь с GUID {userGuid} не найден.") { }
|
||||||
|
}
|
||||||
|
}
|
@ -8,10 +8,8 @@ namespace Demo.domain.Models
|
|||||||
{
|
{
|
||||||
public class GroupLocalEntity
|
public class GroupLocalEntity
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public required int Id { get; set; }
|
||||||
public required string Name { get; set; }
|
public required string Name { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
8
presence_new/Data/LocalData/Entity/Presence.cs
Normal file
8
presence_new/Data/LocalData/Entity/Presence.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
public class PresenceLocalEntity
|
||||||
|
{
|
||||||
|
public Guid UserGuid { get; set; } // Замените int на Guid
|
||||||
|
public int GroupId { get; set; }
|
||||||
|
public int LessonNumber { get; set; }
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
public bool IsAttedance { get; set; }
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Demo.Data.RemoteData.RemoteDataBase.DAO
|
namespace Demo.Data.RemoteData.RemoteDataBase.DAO
|
||||||
{
|
{
|
||||||
public class AttendanceRecord
|
public class Excel
|
||||||
{
|
{
|
||||||
public Guid UserGuid { get; set; }
|
public Guid UserGuid { get; set; }
|
||||||
public string UserName { get; set; }
|
public string UserName { get; set; }
|
@ -1,5 +1,4 @@
|
|||||||
using Demo.domain.Models;
|
using System;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -10,7 +9,7 @@ namespace Demo.Data.RemoteData.RemoteDataBase.DAO
|
|||||||
public class GroupDao
|
public class GroupDao
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public required string Name { get; set; }
|
||||||
public List<UserDao> Users { get; set; }
|
public virtual IEnumerable<UserDao> Users { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,11 +8,14 @@ namespace Demo.Data.RemoteData.RemoteDataBase.DAO
|
|||||||
{
|
{
|
||||||
public class PresenceDao
|
public class PresenceDao
|
||||||
{
|
{
|
||||||
public int PresenceId { get; set; }
|
public int Id { get; set; }
|
||||||
public Guid UserGuid { get; set; }
|
public Guid UserGuid { get; set; }
|
||||||
public bool IsAttedance { get; set; } = true;
|
public bool IsAttedance { get; set; } = true;
|
||||||
public DateOnly Date { get; set; }
|
public DateOnly Date { get; set; }
|
||||||
public int LessonNumber { get; set; }
|
public int LessonNumber { get; set; }
|
||||||
|
public virtual UserDao UserDao { get; set; }
|
||||||
|
|
||||||
public int GroupId { get; set; }
|
public int GroupId { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,8 +9,10 @@ namespace Demo.Data.RemoteData.RemoteDataBase.DAO
|
|||||||
public class UserDao
|
public class UserDao
|
||||||
{
|
{
|
||||||
public required string FIO { get; set; }
|
public required string FIO { get; set; }
|
||||||
public required Guid UserGuid { get; set; }
|
public Guid Guid { get; set; }
|
||||||
public int GroupId { get; set; }
|
|
||||||
public GroupDao? Group { get; set; }
|
public required int GroupID { get; set; }
|
||||||
|
|
||||||
|
public GroupDao Group { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
public class UserAttendance
|
||||||
|
{
|
||||||
|
public Guid UserGuid { get; set; }
|
||||||
|
public double Attended { get; set; }
|
||||||
|
public double Missed { get; set; }
|
||||||
|
public double AttendanceRate { get; set; }
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace Demo.Data.RemoteData.RemoteDataBase
|
||||||
|
{
|
||||||
|
public class RemoteDatabaseContext : DbContext
|
||||||
|
{
|
||||||
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
{
|
||||||
|
optionsBuilder.UseNpgsql("Host=45.67.56.214;Port=5421;Username=user15;Database=user15;Password=3XkvwMOb");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
// Настройка ключа и автоматической генерации для GroupDao
|
||||||
|
modelBuilder.Entity<GroupDao>().HasKey(group => group.Id);
|
||||||
|
modelBuilder.Entity<GroupDao>().Property(group => group.Id).ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
// Настройка ключа и автоматической генерации для UserDao
|
||||||
|
modelBuilder.Entity<UserDao>().HasKey(user => user.Guid);
|
||||||
|
modelBuilder.Entity<UserDao>().Property(user => user.Guid).ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
// Настройка составного ключа для PresenceDao
|
||||||
|
modelBuilder.Entity<PresenceDao>().HasKey(presense => new
|
||||||
|
{
|
||||||
|
presense.Id
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// Настройка связи UserDao с PresenceDao
|
||||||
|
modelBuilder.Entity<PresenceDao>()
|
||||||
|
.Property(presence => presence.Id)
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public DbSet<GroupDao> Groups { get; set; }
|
||||||
|
public DbSet<UserDao> Users { get; set; }
|
||||||
|
public DbSet<PresenceDao> PresenceDaos { get; set; }
|
||||||
|
}
|
||||||
|
}
|
53
presence_new/Data/Repository/GroupRepositoryImpl.cs
Normal file
53
presence_new/Data/Repository/GroupRepositoryImpl.cs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
using Demo.Data.Exceptions;
|
||||||
|
using Demo.Data.LocalData;
|
||||||
|
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
||||||
|
using Demo.Data.Repository;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
public class GroupRepositoryImpl : IGroupRepository
|
||||||
|
{
|
||||||
|
private List<GroupLocalEntity> _groups = LocalStaticData.groups;
|
||||||
|
|
||||||
|
public GroupLocalEntity? GetGroupById(int groupId)
|
||||||
|
{
|
||||||
|
return _groups.FirstOrDefault(g => g.Id == groupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для получения всех групп
|
||||||
|
public List<GroupLocalEntity> GetAllGroup() => _groups;
|
||||||
|
|
||||||
|
// Метод для добавления новой группы
|
||||||
|
public bool AddGroup(GroupLocalEntity group)
|
||||||
|
{
|
||||||
|
if (_groups.Any(g => g.Id == group.Id))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
group.Id = _groups.Any() ? _groups.Max(g => g.Id) + 1 : 1;
|
||||||
|
_groups.Add(group);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для обновления существующей группы
|
||||||
|
public bool UpdateGroupById(int groupID, GroupLocalEntity updatedGroup)
|
||||||
|
{
|
||||||
|
var existingGroup = GetGroupById(groupID);
|
||||||
|
if (existingGroup == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
existingGroup.Name = updatedGroup.Name;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public bool RemoveGroupById(int groupID)
|
||||||
|
{
|
||||||
|
var existingGroup = GetGroupById(groupID);
|
||||||
|
if (existingGroup == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
_groups.Remove(existingGroup);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
19
presence_new/Data/Repository/IGroupRepository.cs
Normal file
19
presence_new/Data/Repository/IGroupRepository.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Demo.Data.Repository
|
||||||
|
{
|
||||||
|
public interface IGroupRepository
|
||||||
|
{
|
||||||
|
List<GroupLocalEntity> GetAllGroup();
|
||||||
|
bool RemoveGroupById(int groupID);
|
||||||
|
bool UpdateGroupById(int groupID, GroupLocalEntity updatedGroup);
|
||||||
|
GroupLocalEntity GetGroupById(int groupID);
|
||||||
|
bool AddGroup(GroupLocalEntity newGroup);
|
||||||
|
}
|
||||||
|
}
|
19
presence_new/Data/Repository/IPresenceRepository.cs
Normal file
19
presence_new/Data/Repository/IPresenceRepository.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo.Data.Repository
|
||||||
|
{
|
||||||
|
public interface IPresenceRepository
|
||||||
|
{
|
||||||
|
void SavePresence(List<PresenceLocalEntity> presences);
|
||||||
|
List<PresenceLocalEntity> GetPresenceByGroup(int groupId);
|
||||||
|
List<PresenceLocalEntity> GetPresenceByGroupAndDate(int groupId, DateTime date);
|
||||||
|
DateOnly? GetLastDateByGroupId(int groupId);
|
||||||
|
void GetGeneralPresenceForGroup(int groupId);
|
||||||
|
void UpdateAtt(Guid UserGuid, int groupId, int firstLesson, int lastLesson, DateOnly date, bool isAttendance);
|
||||||
|
void MarkUserAsAbsent(Guid userGuid, int firstLessonNumber, int lastLessonNumber);
|
||||||
|
void AddPresence(PresenceLocalEntity presence);
|
||||||
|
}
|
||||||
|
}
|
@ -8,11 +8,11 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Demo.Data.Repository
|
namespace Demo.Data.Repository
|
||||||
{
|
{
|
||||||
public interface IGroupRepository
|
public interface IUserRepository
|
||||||
{
|
{
|
||||||
List<GroupDao> GetAllGroups();
|
IEnumerable<UserLocalEnity> GetAllUsers { get; }
|
||||||
bool UpdateGroupById(int groupID, GroupDao updatedGroup);
|
bool RemoveUserById(Guid userGuid);
|
||||||
GroupDao GetGroupById(int groupID);
|
UserLocalEnity? UpdateUser(UserLocalEnity user);
|
||||||
bool AddGroup(string Name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
62
presence_new/Data/Repository/PresenceRepositoryImpl.cs
Normal file
62
presence_new/Data/Repository/PresenceRepositoryImpl.cs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Demo.Data.Repository
|
||||||
|
{
|
||||||
|
public class PresenceRepositoryImpl
|
||||||
|
{
|
||||||
|
private readonly List<PresenceLocalEntity> _presences = new List<PresenceLocalEntity>();
|
||||||
|
|
||||||
|
public void SavePresence(List<PresenceLocalEntity> presences)
|
||||||
|
{
|
||||||
|
foreach (var presence in presences)
|
||||||
|
{
|
||||||
|
var existing = _presences.FirstOrDefault(p =>
|
||||||
|
p.Date == presence.Date &&
|
||||||
|
p.UserGuid == presence.UserGuid &&
|
||||||
|
p.LessonNumber == presence.LessonNumber);
|
||||||
|
|
||||||
|
if (existing == null)
|
||||||
|
{
|
||||||
|
_presences.Add(presence);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
existing.IsAttedance = presence.IsAttedance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddPresence(PresenceLocalEntity presence)
|
||||||
|
{
|
||||||
|
if (presence == null) throw new ArgumentNullException(nameof(presence));
|
||||||
|
|
||||||
|
_presences.Add(presence);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PresenceLocalEntity> GetPresenceByGroup(int groupId)
|
||||||
|
{
|
||||||
|
return _presences.Where(p => p.GroupId == groupId).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PresenceLocalEntity> GetPresenceByGroupAndDate(int groupId, DateTime date)
|
||||||
|
{
|
||||||
|
return _presences.Where(p => p.GroupId == groupId && p.Date.Date == date.Date).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MarkUserAsAbsent(Guid userGuid, int firstLessonNumber, int lastLessonNumber)
|
||||||
|
{
|
||||||
|
foreach (var lesson in Enumerable.Range(firstLessonNumber, lastLessonNumber - firstLessonNumber + 1))
|
||||||
|
{
|
||||||
|
var presence = _presences.FirstOrDefault(p => p.UserGuid == userGuid && p.LessonNumber == lesson);
|
||||||
|
if (presence != null)
|
||||||
|
{
|
||||||
|
presence.IsAttedance = false; // Помечаем как отсутствующего
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
69
presence_new/Data/Repository/SQLGroupRepositoryImpl.cs
Normal file
69
presence_new/Data/Repository/SQLGroupRepositoryImpl.cs
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
using Demo.Data.Exceptions;
|
||||||
|
using Demo.Data.LocalData;
|
||||||
|
using Demo.Data.RemoteData.RemoteDataBase;
|
||||||
|
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
||||||
|
using Demo.Data.Repository;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
public class SQLGroupRepositoryImpl : IGroupRepository
|
||||||
|
{
|
||||||
|
private readonly RemoteDatabaseContext _remoteDatabaseContext;
|
||||||
|
|
||||||
|
public SQLGroupRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
|
||||||
|
{
|
||||||
|
_remoteDatabaseContext = remoteDatabaseContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для получения группы по ID
|
||||||
|
public GroupLocalEntity? GetGroupById(int groupId)
|
||||||
|
{
|
||||||
|
var groupDao = _remoteDatabaseContext.Groups.FirstOrDefault(g => g.Id == groupId);
|
||||||
|
return groupDao != null ? new GroupLocalEntity { Id = groupDao.Id, Name = groupDao.Name } : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для получения всех групп
|
||||||
|
public List<GroupLocalEntity> GetAllGroup()
|
||||||
|
{
|
||||||
|
return _remoteDatabaseContext.Groups
|
||||||
|
.Select(g => new GroupLocalEntity { Id = g.Id, Name = g.Name })
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для добавления новой группы
|
||||||
|
public bool AddGroup(GroupLocalEntity group)
|
||||||
|
{
|
||||||
|
if (_remoteDatabaseContext.Groups.Any(g => g.Id == group.Id))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var groupDao = new GroupDao { Id = group.Id, Name = group.Name };
|
||||||
|
_remoteDatabaseContext.Groups.Add(groupDao);
|
||||||
|
_remoteDatabaseContext.SaveChanges();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для обновления существующей группы
|
||||||
|
public bool UpdateGroupById(int groupID, GroupLocalEntity updatedGroup)
|
||||||
|
{
|
||||||
|
var existingGroup = _remoteDatabaseContext.Groups.FirstOrDefault(g => g.Id == groupID);
|
||||||
|
if (existingGroup == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
existingGroup.Name = updatedGroup.Name;
|
||||||
|
_remoteDatabaseContext.SaveChanges();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для удаления группы по ID
|
||||||
|
public bool RemoveGroupById(int groupID)
|
||||||
|
{
|
||||||
|
var existingGroup = _remoteDatabaseContext.Groups.FirstOrDefault(g => g.Id == groupID);
|
||||||
|
if (existingGroup == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
_remoteDatabaseContext.Groups.Remove(existingGroup);
|
||||||
|
_remoteDatabaseContext.SaveChanges();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
200
presence_new/Data/Repository/SQLPresenceRepositoryImpl.cs
Normal file
200
presence_new/Data/Repository/SQLPresenceRepositoryImpl.cs
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
using Demo.Data.RemoteData.RemoteDataBase;
|
||||||
|
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
|
||||||
|
namespace Demo.Data.Repository
|
||||||
|
{
|
||||||
|
public class SQLPresenceRepositoryImpl : IPresenceRepository
|
||||||
|
{
|
||||||
|
private readonly RemoteDatabaseContext _remoteDatabaseContext;
|
||||||
|
|
||||||
|
public SQLPresenceRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
|
||||||
|
{
|
||||||
|
_remoteDatabaseContext = remoteDatabaseContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SavePresence(List<PresenceLocalEntity> presences)
|
||||||
|
{
|
||||||
|
_remoteDatabaseContext.PresenceDaos.AddRange(presences.Select(it => new PresenceDao {
|
||||||
|
Date = DateOnly.FromDateTime(it.Date),
|
||||||
|
IsAttedance = it.IsAttedance,
|
||||||
|
LessonNumber = it.LessonNumber,
|
||||||
|
UserGuid = it.UserGuid }));
|
||||||
|
_remoteDatabaseContext.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddPresence(PresenceLocalEntity presence)
|
||||||
|
{
|
||||||
|
if (presence == null) throw new ArgumentNullException(nameof(presence));
|
||||||
|
|
||||||
|
var newPresence = new PresenceDao
|
||||||
|
{
|
||||||
|
Date = DateOnly.FromDateTime(presence.Date),
|
||||||
|
UserGuid = presence.UserGuid,
|
||||||
|
LessonNumber = presence.LessonNumber,
|
||||||
|
IsAttedance = presence.IsAttedance
|
||||||
|
};
|
||||||
|
_remoteDatabaseContext.PresenceDaos.Add(newPresence);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PresenceLocalEntity> GetPresenceByGroup(int groupId)
|
||||||
|
{
|
||||||
|
return _remoteDatabaseContext.PresenceDaos
|
||||||
|
.Where(p => p.UserDao != null && p.UserDao.GroupID == groupId) // Проверяем на null перед использованием
|
||||||
|
.Select(p => new PresenceLocalEntity
|
||||||
|
{
|
||||||
|
Date = p.Date.ToDateTime(TimeOnly.MinValue),
|
||||||
|
UserGuid = p.UserGuid,
|
||||||
|
LessonNumber = p.LessonNumber,
|
||||||
|
IsAttedance = p.IsAttedance
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PresenceLocalEntity> GetPresenceByGroupAndDate(int groupId, DateTime date)
|
||||||
|
{
|
||||||
|
return _remoteDatabaseContext.PresenceDaos
|
||||||
|
.Where(p => p.UserDao != null && p.UserDao.GroupID == groupId && p.Date == DateOnly.FromDateTime(date))
|
||||||
|
.Select(p => new PresenceLocalEntity
|
||||||
|
{
|
||||||
|
Date = p.Date.ToDateTime(TimeOnly.MinValue),
|
||||||
|
UserGuid = p.UserGuid,
|
||||||
|
LessonNumber = p.LessonNumber,
|
||||||
|
IsAttedance = p.IsAttedance
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MarkUserAsAbsent(Guid userGuid, int firstLessonNumber, int lastLessonNumber)
|
||||||
|
{
|
||||||
|
foreach (var lesson in Enumerable.Range(firstLessonNumber, lastLessonNumber - firstLessonNumber + 1))
|
||||||
|
{
|
||||||
|
var presence = _remoteDatabaseContext.PresenceDaos.FirstOrDefault(p =>
|
||||||
|
p.UserGuid == userGuid &&
|
||||||
|
p.LessonNumber == lesson);
|
||||||
|
|
||||||
|
if (presence != null)
|
||||||
|
{
|
||||||
|
presence.IsAttedance = false; // Помечаем как отсутствующего
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DateOnly? GetLastDateByGroupId(int groupId)
|
||||||
|
{
|
||||||
|
// Проверяем наличие записей о посещаемости в базе данных для данной группы.
|
||||||
|
var lastDate = _remoteDatabaseContext.PresenceDaos
|
||||||
|
.Where(p => p.GroupId == groupId)
|
||||||
|
.OrderByDescending(p => p.Date)
|
||||||
|
.Select(p => p.Date)
|
||||||
|
.FirstOrDefault();
|
||||||
|
|
||||||
|
return lastDate == default ? (DateOnly?)null : lastDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GetGeneralPresenceForGroup(int groupId)
|
||||||
|
{
|
||||||
|
var presences = _remoteDatabaseContext.PresenceDaos
|
||||||
|
.Where(p => p.GroupId == groupId)
|
||||||
|
.OrderBy(p => p.LessonNumber)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var distinctDates = presences
|
||||||
|
.Select(p => p.Date)
|
||||||
|
.Distinct()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
int lessonCount = 0;
|
||||||
|
double totalAttendance = 0;
|
||||||
|
DateOnly previousDate = DateOnly.MinValue;
|
||||||
|
|
||||||
|
HashSet<Guid> userGuids = new HashSet<Guid>();
|
||||||
|
|
||||||
|
foreach (var presence in presences)
|
||||||
|
{
|
||||||
|
userGuids.Add(presence.UserGuid);
|
||||||
|
|
||||||
|
if (presence.Date != previousDate)
|
||||||
|
{
|
||||||
|
previousDate = presence.Date;
|
||||||
|
lessonCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (presence.IsAttedance)
|
||||||
|
{
|
||||||
|
totalAttendance++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine($"Человек в группе: {userGuids.Count}, " +
|
||||||
|
$"Количество проведённых занятий: {lessonCount}, " +
|
||||||
|
$"Общий процент посещаемости группы: {totalAttendance / (userGuids.Count * distinctDates.Count) * 100}%");
|
||||||
|
|
||||||
|
// Подготовка для расчета посещаемости каждого пользователя
|
||||||
|
List<UserAttendance> userAttendances = new List<UserAttendance>();
|
||||||
|
|
||||||
|
foreach (var userGuid in userGuids)
|
||||||
|
{
|
||||||
|
var userPresences = presences.Where(p => p.UserGuid == userGuid);
|
||||||
|
double attended = userPresences.Count(p => p.IsAttedance);
|
||||||
|
double missed = userPresences.Count(p => !p.IsAttedance);
|
||||||
|
|
||||||
|
userAttendances.Add(new UserAttendance
|
||||||
|
{
|
||||||
|
UserGuid = userGuid,
|
||||||
|
Attended = attended,
|
||||||
|
Missed = missed,
|
||||||
|
AttendanceRate = attended / (attended + missed) * 100
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Вывод информации по каждому пользователю
|
||||||
|
foreach (var user in userAttendances)
|
||||||
|
{
|
||||||
|
if (user.AttendanceRate < 40)
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine($"GUID Пользователя: {user.UserGuid}, " +
|
||||||
|
$"Посетил: {user.Attended}, " +
|
||||||
|
$"Пропустил: {user.Missed}, " +
|
||||||
|
$"Процент посещаемости: {user.AttendanceRate}%");
|
||||||
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void UpdateAtt(Guid UserGuid, int groupId, int firstLesson, int lastLesson, DateOnly date, bool isAttendance)
|
||||||
|
{
|
||||||
|
// Находим все записи по UserId, GroupId, LessonNumber (в диапазоне) и дате
|
||||||
|
var presences = _remoteDatabaseContext.PresenceDaos
|
||||||
|
.Where(p => p.UserGuid == UserGuid
|
||||||
|
&& p.GroupId == groupId
|
||||||
|
&& p.LessonNumber >= firstLesson
|
||||||
|
&& p.LessonNumber <= lastLesson
|
||||||
|
&& p.Date == date)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
if (presences.Any())
|
||||||
|
{
|
||||||
|
// Обновляем значение IsAttendance для всех найденных записей
|
||||||
|
foreach (var presence in presences)
|
||||||
|
{
|
||||||
|
presence.IsAttedance = isAttendance;
|
||||||
|
}
|
||||||
|
|
||||||
|
_remoteDatabaseContext.SaveChanges(); // Сохраняем изменения в базе данных
|
||||||
|
Console.WriteLine($"Статус посещаемости для пользователя {UserGuid} с {firstLesson} по {lastLesson} урок обновлён.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Посещаемость для пользователя ID: {UserGuid} на дату {date.ToShortDateString()} с {firstLesson} по {lastLesson} уроки не найдена.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
63
presence_new/Data/Repository/SQLUserRepositoryImpl.cs
Normal file
63
presence_new/Data/Repository/SQLUserRepositoryImpl.cs
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
using Demo.Data.Exceptions;
|
||||||
|
using Demo.Data.RemoteData.RemoteDataBase;
|
||||||
|
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Demo.Data.Repository
|
||||||
|
{
|
||||||
|
public class SQLUserRepositoryImpl : IUserRepository
|
||||||
|
{
|
||||||
|
private readonly RemoteDatabaseContext _remoteDatabaseContext;
|
||||||
|
|
||||||
|
public SQLUserRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
|
||||||
|
{
|
||||||
|
_remoteDatabaseContext = remoteDatabaseContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для получения всех пользователей
|
||||||
|
public IEnumerable<UserLocalEnity> GetAllUsers => _remoteDatabaseContext.Users
|
||||||
|
.Select(u => new UserLocalEnity
|
||||||
|
{
|
||||||
|
Guid = u.Guid,
|
||||||
|
FIO = u.FIO,
|
||||||
|
GroupID = u.GroupID
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// Метод для удаления пользователя по GUID
|
||||||
|
public bool RemoveUserById(Guid userGuid)
|
||||||
|
{
|
||||||
|
var user = _remoteDatabaseContext.Users.FirstOrDefault(u => u.Guid == userGuid);
|
||||||
|
if (user == null) throw new UserNotFoundException(userGuid);
|
||||||
|
|
||||||
|
_remoteDatabaseContext.Users.Remove(user);
|
||||||
|
_remoteDatabaseContext.SaveChanges(); // Сохранение изменений в базе данных
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для обновления данных пользователя
|
||||||
|
public UserLocalEnity? UpdateUser(UserLocalEnity user)
|
||||||
|
{
|
||||||
|
var existingUser = _remoteDatabaseContext.Users.FirstOrDefault(u => u.Guid == user.Guid);
|
||||||
|
if (existingUser == null) throw new UserNotFoundException(user.Guid);
|
||||||
|
|
||||||
|
existingUser.FIO = user.FIO;
|
||||||
|
existingUser.GroupID = user.GroupID;
|
||||||
|
_remoteDatabaseContext.SaveChanges(); // Сохранение изменений в базе данных
|
||||||
|
|
||||||
|
// Возвращаем обновленный объект UserLocalEnity
|
||||||
|
return new UserLocalEnity
|
||||||
|
{
|
||||||
|
Guid = existingUser.Guid,
|
||||||
|
FIO = existingUser.FIO,
|
||||||
|
GroupID = existingUser.GroupID
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Дополнительный метод для DAO, если требуется
|
||||||
|
public IEnumerable<RemoteData.RemoteDataBase.DAO.UserDao> GetAllUsersDao => _remoteDatabaseContext.Users.ToList();
|
||||||
|
}
|
||||||
|
}
|
41
presence_new/Data/Repository/UserRepositoryImpl.cs
Normal file
41
presence_new/Data/Repository/UserRepositoryImpl.cs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
using Demo.Data.Exceptions;
|
||||||
|
using Demo.Data.LocalData;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Demo.Data.Repository
|
||||||
|
{
|
||||||
|
public class UserRepositoryImpl : IUserRepository
|
||||||
|
{
|
||||||
|
private List<UserLocalEnity> _users;
|
||||||
|
|
||||||
|
public UserRepositoryImpl()
|
||||||
|
{
|
||||||
|
_users = LocalStaticData.users;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<UserLocalEnity> GetAllUsers => _users;
|
||||||
|
|
||||||
|
public bool RemoveUserById(Guid userGuid) // Оставил Guid
|
||||||
|
{
|
||||||
|
var user = _users.FirstOrDefault(u => u.Guid == userGuid);
|
||||||
|
if (user == null) throw new UserNotFoundException(userGuid);
|
||||||
|
|
||||||
|
_users.Remove(user);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserLocalEnity? UpdateUser(UserLocalEnity user)
|
||||||
|
{
|
||||||
|
var existingUser = _users.FirstOrDefault(u => u.Guid == user.Guid);
|
||||||
|
if (existingUser == null) throw new UserNotFoundException(user.Guid);
|
||||||
|
|
||||||
|
existingUser.FIO = user.FIO;
|
||||||
|
existingUser.GroupID = user.GroupID;
|
||||||
|
|
||||||
|
return existingUser;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -21,7 +21,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="Data\RemoteData\RemoteApi\" />
|
<Folder Include="Data\RemoteData\RemoteApi\" />
|
||||||
<Folder Include="Migrations\" />
|
<Folder Include="Migrations\" />
|
||||||
<Folder Include="Reports\" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
@ -13,6 +13,7 @@ namespace Demo.domain.Models
|
|||||||
public required int GroupId { get; set; }
|
public required int GroupId { get; set; }
|
||||||
public bool IsAttedance { get; set; } = true;
|
public bool IsAttedance { get; set; } = true;
|
||||||
public required DateTime Date { get; set; }
|
public required DateTime Date { get; set; }
|
||||||
|
|
||||||
public required int LessonNumber { get; set; }
|
public required int LessonNumber { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,4 @@
|
|||||||
using Demo.Data.LocalData;
|
using Demo.Data.LocalData;
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.Data.Repository;
|
using Demo.Data.Repository;
|
||||||
using Demo.domain.Models;
|
using Demo.domain.Models;
|
||||||
|
|
||||||
@ -32,9 +31,9 @@ namespace Demo.Domain.UseCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Приватный метод для валидации существования группы по ID
|
// Приватный метод для валидации существования группы по ID
|
||||||
private GroupDao ValidateGroupExistence(int groupId)
|
private GroupLocalEntity ValidateGroupExistence(int groupId)
|
||||||
{
|
{
|
||||||
var existingGroup = _repositoryGroupImpl.GetAllGroups()
|
var existingGroup = _repositoryGroupImpl.GetAllGroup()
|
||||||
.FirstOrDefault(g => g.Id == groupId);
|
.FirstOrDefault(g => g.Id == groupId);
|
||||||
|
|
||||||
if (existingGroup == null)
|
if (existingGroup == null)
|
||||||
@ -49,7 +48,7 @@ namespace Demo.Domain.UseCase
|
|||||||
// Метод для получения списка всех групп
|
// Метод для получения списка всех групп
|
||||||
public List<Group> GetAllGroups()
|
public List<Group> GetAllGroups()
|
||||||
{
|
{
|
||||||
return [.. _repositoryGroupImpl.GetAllGroups()
|
return [.. _repositoryGroupImpl.GetAllGroup()
|
||||||
.Select(it => new Group { Id = it.Id, Name = it.Name })];
|
.Select(it => new Group { Id = it.Id, Name = it.Name })];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +58,7 @@ namespace Demo.Domain.UseCase
|
|||||||
List<Group> GetAllGroups()
|
List<Group> GetAllGroups()
|
||||||
{
|
{
|
||||||
return [.. _repositoryGroupImpl
|
return [.. _repositoryGroupImpl
|
||||||
.GetAllGroups()
|
.GetAllGroup()
|
||||||
.Select(
|
.Select(
|
||||||
it => new Group
|
it => new Group
|
||||||
{ Id = it.Id, Name = it.Name }
|
{ Id = it.Id, Name = it.Name }
|
||||||
@ -81,14 +80,37 @@ namespace Demo.Domain.UseCase
|
|||||||
{
|
{
|
||||||
ValidateGroupName(groupName);
|
ValidateGroupName(groupName);
|
||||||
|
|
||||||
|
var newId = _repositoryGroupImpl.GetAllGroup().Any()
|
||||||
|
? _repositoryGroupImpl.GetAllGroup().Max(g => g.Id) + 1
|
||||||
|
: 1;
|
||||||
|
|
||||||
GroupLocalEntity newGroup = new GroupLocalEntity
|
GroupLocalEntity newGroup = new GroupLocalEntity
|
||||||
{
|
{
|
||||||
|
Id = newId,
|
||||||
Name = groupName
|
Name = groupName
|
||||||
};
|
};
|
||||||
|
|
||||||
_repositoryGroupImpl.AddGroup(newGroup.Name);
|
_repositoryGroupImpl.AddGroup(newGroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveGroupById(int groupId)
|
||||||
|
{
|
||||||
|
ValidateGroupId(groupId);
|
||||||
|
var existingGroup = ValidateGroupExistence(groupId);
|
||||||
|
List<Group> _groups = GetAllGroups();
|
||||||
|
|
||||||
|
// Находим группу по ID и удаляем ее
|
||||||
|
var groupToRemove = _groups.FirstOrDefault(g => g.Id == existingGroup.Id);
|
||||||
|
if (groupToRemove != null)
|
||||||
|
{
|
||||||
|
_groups.Remove(groupToRemove);
|
||||||
|
_repositoryGroupImpl.RemoveGroupById(existingGroup.Id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new ArgumentException("Группа не найдена.");
|
||||||
|
// Обработка случая, если группа не найдена (например, выброс исключения)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -99,7 +121,9 @@ namespace Demo.Domain.UseCase
|
|||||||
var existingGroup = ValidateGroupExistence(groupId);
|
var existingGroup = ValidateGroupExistence(groupId);
|
||||||
|
|
||||||
existingGroup.Name = newGroupName;
|
existingGroup.Name = newGroupName;
|
||||||
_repositoryGroupImpl.UpdateGroupById(groupId,existingGroup);
|
_repositoryGroupImpl.UpdateGroupById(existingGroup.Id, existingGroup);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
89
presence_new/Domain/UseCase/UseCaseGeneratePresence.cs
Normal file
89
presence_new/Domain/UseCase/UseCaseGeneratePresence.cs
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
using ClosedXML.Excel;
|
||||||
|
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
||||||
|
using Demo.Data.Repository;
|
||||||
|
using Demo.domain.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Demo.Domain.UseCase
|
||||||
|
{
|
||||||
|
public class UseCaseGeneratePresence
|
||||||
|
{
|
||||||
|
public readonly IUserRepository _userRepository;
|
||||||
|
public readonly IPresenceRepository _presenceRepository;
|
||||||
|
private readonly IGroupRepository _groupRepository;
|
||||||
|
|
||||||
|
public UseCaseGeneratePresence(IUserRepository userRepository, IPresenceRepository presenceRepository, IGroupRepository groupRepository)
|
||||||
|
{
|
||||||
|
_userRepository = userRepository;
|
||||||
|
_presenceRepository = presenceRepository;
|
||||||
|
_groupRepository = groupRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PresenceLocalEntity> GetPresenceByGroupAndDate(int groupId, DateTime date)
|
||||||
|
{
|
||||||
|
return _presenceRepository.GetPresenceByGroupAndDate(groupId, date);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void GeneratePresenceDaily(int firstLesson, int lastLesson, int groupId, DateTime currentDate)
|
||||||
|
{
|
||||||
|
var users = _userRepository.GetAllUsers.Where(u => u.GroupID == groupId).ToList();
|
||||||
|
List<PresenceLocalEntity> presences = new List<PresenceLocalEntity>();
|
||||||
|
for (int lessonNumber = firstLesson; lessonNumber <= lastLesson; lessonNumber++)
|
||||||
|
{
|
||||||
|
foreach (var user in users)
|
||||||
|
{
|
||||||
|
presences.Add(new PresenceLocalEntity
|
||||||
|
{
|
||||||
|
UserGuid = user.Guid,
|
||||||
|
Date = currentDate,
|
||||||
|
LessonNumber = lessonNumber,
|
||||||
|
IsAttedance = true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_presenceRepository.SavePresence(presences);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GenerateWeeklyPresence(int firstLesson, int lastLesson, int groupId, DateTime startTime)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 7; i++)
|
||||||
|
{
|
||||||
|
DateTime currentTime = startTime.AddDays(i);
|
||||||
|
GeneratePresenceDaily(firstLesson, lastLesson, groupId, currentTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Отметить пользователя как отсутствующего на диапазоне занятий
|
||||||
|
public void MarkUserAsAbsent(Guid userGuid, int groupId, int firstLesson, int lastLesson, DateTime date)
|
||||||
|
{
|
||||||
|
var presences = _presenceRepository.GetPresenceByGroupAndDate(groupId, date);
|
||||||
|
foreach (var presence in presences.Where(p => p.UserGuid == userGuid && p.LessonNumber >= firstLesson && p.LessonNumber <= lastLesson))
|
||||||
|
{
|
||||||
|
presence.IsAttedance = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
_presenceRepository.SavePresence(presences);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public List<PresenceLocalEntity> GetAllPresenceByGroup(int groupId)
|
||||||
|
{
|
||||||
|
return _presenceRepository.GetPresenceByGroup(groupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,4 @@
|
|||||||
using Demo.Data.Exceptions;
|
using Demo.Data.Exceptions;
|
||||||
using Demo.Data.RemoteData.RemoteDataBase;
|
|
||||||
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|
||||||
using Demo.Data.Repository;
|
using Demo.Data.Repository;
|
||||||
using Demo.domain.Models;
|
using Demo.domain.Models;
|
||||||
|
|
||||||
@ -10,12 +8,11 @@ namespace Demo.Domain.UseCase
|
|||||||
{
|
{
|
||||||
private readonly IUserRepository _repositoryUserImpl;
|
private readonly IUserRepository _repositoryUserImpl;
|
||||||
private readonly IGroupRepository _repositoryGroupImpl;
|
private readonly IGroupRepository _repositoryGroupImpl;
|
||||||
private readonly IPresenceRepository _repositoryPresenceImpl;
|
|
||||||
public UserUseCase(IUserRepository repositoryImpl, IGroupRepository repositoryGroupImpl, IPresenceRepository presenceRepository)
|
public UserUseCase(IUserRepository repositoryImpl, IGroupRepository repositoryGroupImpl)
|
||||||
{
|
{
|
||||||
_repositoryUserImpl = repositoryImpl;
|
_repositoryUserImpl = repositoryImpl;
|
||||||
_repositoryGroupImpl = repositoryGroupImpl;
|
_repositoryGroupImpl = repositoryGroupImpl;
|
||||||
_repositoryPresenceImpl = presenceRepository;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Приватный метод для валидации ФИО пользователя
|
// Приватный метод для валидации ФИО пользователя
|
||||||
@ -27,21 +24,11 @@ namespace Demo.Domain.UseCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemovePresenceByUserId(Guid UserGuid)
|
|
||||||
{
|
|
||||||
using (var context = new RemoteDatabaseContext())
|
|
||||||
{
|
|
||||||
var presences = context.PresenceDaos.Where(p => p.UserGuid == UserGuid).ToList();
|
|
||||||
context.PresenceDaos.RemoveRange(presences);
|
|
||||||
context.SaveChanges();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Приватный метод для валидации существования пользователя по ID
|
// Приватный метод для валидации существования пользователя по ID
|
||||||
private UserDao ValidateUserExistence(Guid UserGuid)
|
private UserLocalEnity ValidateUserExistence(Guid userGuid)
|
||||||
{
|
{
|
||||||
var user = _repositoryUserImpl.GetAllUsers()
|
var user = _repositoryUserImpl.GetAllUsers
|
||||||
.FirstOrDefault(u => u.UserGuid == UserGuid);
|
.FirstOrDefault(u => u.Guid == userGuid);
|
||||||
|
|
||||||
if (user == null)
|
if (user == null)
|
||||||
{
|
{
|
||||||
@ -52,9 +39,9 @@ namespace Demo.Domain.UseCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Приватный метод для валидации существования группы по ID
|
// Приватный метод для валидации существования группы по ID
|
||||||
private GroupDao ValidateGroupExistence(int groupId)
|
private GroupLocalEntity ValidateGroupExistence(int groupId)
|
||||||
{
|
{
|
||||||
var group = _repositoryGroupImpl.GetAllGroups()
|
var group = _repositoryGroupImpl.GetAllGroup()
|
||||||
.FirstOrDefault(g => g.Id == groupId);
|
.FirstOrDefault(g => g.Id == groupId);
|
||||||
|
|
||||||
if (group == null)
|
if (group == null)
|
||||||
@ -66,24 +53,24 @@ namespace Demo.Domain.UseCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Вывести всех пользователей
|
// Вывести всех пользователей
|
||||||
public List<User> GetAllUsers() => _repositoryUserImpl.GetAllUsers()
|
public List<User> GetAllUsers() => _repositoryUserImpl.GetAllUsers
|
||||||
.Join(_repositoryGroupImpl.GetAllGroups(),
|
.Join(_repositoryGroupImpl.GetAllGroup(),
|
||||||
user => user.GroupId, // Ключ для пользователей
|
user => user.GroupID,
|
||||||
group => group.Id, // Ключ для групп
|
group => group.Id,
|
||||||
(user, group) => // Результирующий объект
|
(user, group) =>
|
||||||
new User
|
new User
|
||||||
{
|
{
|
||||||
Guid = user.UserGuid,
|
|
||||||
FIO = user.FIO,
|
FIO = user.FIO,
|
||||||
|
Guid = user.Guid,
|
||||||
Group = new Group { Id = group.Id, Name = group.Name }
|
Group = new Group { Id = group.Id, Name = group.Name }
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
// Удалить пользователя по id
|
// Удалить пользователя по id
|
||||||
public bool RemoveUserById(Guid UserGuid)
|
public bool RemoveUserById(Guid userGuid)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return _repositoryUserImpl.RemoveUserById(UserGuid);
|
return _repositoryUserImpl.RemoveUserById(userGuid);
|
||||||
}
|
}
|
||||||
catch (UserNotFoundException ex)
|
catch (UserNotFoundException ex)
|
||||||
{
|
{
|
||||||
@ -97,48 +84,51 @@ namespace Demo.Domain.UseCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Обновить пользователя по id
|
// Обновить пользователя по guid
|
||||||
public UserDao UpdateUser(UserDao user)
|
public User UpdateUser(User user)
|
||||||
{
|
{
|
||||||
ValidateUserFIO(user.FIO);
|
ValidateUserFIO(user.FIO);
|
||||||
ValidateGroupExistence(user.GroupId);
|
ValidateGroupExistence(user.Group.Id);
|
||||||
|
|
||||||
UserDao userDao = new UserDao
|
UserLocalEnity userLocalEnity = new UserLocalEnity
|
||||||
{
|
{
|
||||||
UserGuid = user.UserGuid,
|
|
||||||
FIO = user.FIO,
|
FIO = user.FIO,
|
||||||
GroupId = user.GroupId
|
GroupID = user.Group.Id,
|
||||||
|
Guid = user.Guid
|
||||||
};
|
};
|
||||||
|
|
||||||
UserDao? result = _repositoryUserImpl.UpdateUser(userDao);
|
UserLocalEnity? result = _repositoryUserImpl.UpdateUser(userLocalEnity);
|
||||||
|
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
throw new Exception("Ошибка при обновлении пользователя.");
|
throw new Exception("Ошибка при обновлении пользователя.");
|
||||||
}
|
}
|
||||||
|
|
||||||
var groupEntity = ValidateGroupExistence(result.GroupId);
|
var groupEntity = ValidateGroupExistence(result.GroupID);
|
||||||
|
|
||||||
return new UserDao
|
return new User
|
||||||
{
|
{
|
||||||
UserGuid =user.UserGuid,
|
|
||||||
FIO = result.FIO,
|
FIO = result.FIO,
|
||||||
GroupId = result.GroupId
|
Guid = result.Guid,
|
||||||
|
Group = new Group
|
||||||
|
{
|
||||||
|
Id = groupEntity.Id,
|
||||||
|
Name = groupEntity.Name
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Найти пользователя по id
|
// Найти пользователя по id
|
||||||
public UserDao FindUserById(Guid UserGuid)
|
public User FindUserById(Guid userGuid)
|
||||||
{
|
{
|
||||||
var user = ValidateUserExistence(UserGuid);
|
var user = ValidateUserExistence(userGuid);
|
||||||
var group = ValidateGroupExistence(user.GroupId);
|
var group = ValidateGroupExistence(user.GroupID);
|
||||||
|
|
||||||
return new UserDao
|
return new User
|
||||||
{
|
{
|
||||||
UserGuid = user.UserGuid,
|
|
||||||
FIO = user.FIO,
|
FIO = user.FIO,
|
||||||
Group = new GroupDao { Id = group.Id, Name=group.Name }
|
Guid = user.Guid,
|
||||||
|
Group = new Group { Id = group.Id, Name = group.Name }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,8 +12,8 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
namespace Demo.Migrations
|
namespace Demo.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(RemoteDatabaseContext))]
|
[DbContext(typeof(RemoteDatabaseContext))]
|
||||||
[Migration("20241104200529_db")]
|
[Migration("20241104183721_createbase")]
|
||||||
partial class db
|
partial class createbase
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
@ -44,35 +44,29 @@ namespace Demo.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.PresenceDao", b =>
|
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.PresenceDao", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("PresenceId")
|
b.Property<Guid>("UserGuid")
|
||||||
.ValueGeneratedOnAdd()
|
.HasColumnType("uuid");
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("PresenceId"));
|
|
||||||
|
|
||||||
b.Property<DateOnly>("Date")
|
b.Property<DateOnly>("Date")
|
||||||
.HasColumnType("date");
|
.HasColumnType("date");
|
||||||
|
|
||||||
b.Property<int>("GroupId")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<bool>("IsAttedance")
|
b.Property<bool>("IsAttedance")
|
||||||
.HasColumnType("boolean");
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
b.Property<int>("LessonNumber")
|
b.Property<int>("LessonNumber")
|
||||||
.HasColumnType("integer");
|
.HasColumnType("integer");
|
||||||
|
|
||||||
b.Property<Guid>("UserGuid")
|
b.Property<int>("GroupId")
|
||||||
.HasColumnType("uuid");
|
.HasColumnType("integer");
|
||||||
|
|
||||||
b.HasKey("PresenceId");
|
b.HasKey("UserGuid", "Date", "IsAttedance", "LessonNumber");
|
||||||
|
|
||||||
b.ToTable("PresenceDaos");
|
b.ToTable("PresenceDaos");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
||||||
{
|
{
|
||||||
b.Property<Guid>("UserGuid")
|
b.Property<Guid>("Guid")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
.HasColumnType("uuid");
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
@ -80,21 +74,32 @@ namespace Demo.Migrations
|
|||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("text");
|
.HasColumnType("text");
|
||||||
|
|
||||||
b.Property<int>("GroupId")
|
b.Property<int>("GroupID")
|
||||||
.HasColumnType("integer");
|
.HasColumnType("integer");
|
||||||
|
|
||||||
b.HasKey("UserGuid");
|
b.HasKey("Guid");
|
||||||
|
|
||||||
b.HasIndex("GroupId");
|
b.HasIndex("GroupID");
|
||||||
|
|
||||||
b.ToTable("Users");
|
b.ToTable("Users");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.PresenceDao", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo.Data.RemoteData.RemoteDataBase.DAO.UserDao", "UserDao")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("UserGuid")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("UserDao");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Demo.Data.RemoteData.RemoteDataBase.DAO.GroupDao", "Group")
|
b.HasOne("Demo.Data.RemoteData.RemoteDataBase.DAO.GroupDao", "Group")
|
||||||
.WithMany("Users")
|
.WithMany("Users")
|
||||||
.HasForeignKey("GroupId")
|
.HasForeignKey("GroupID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
@ -7,7 +7,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
namespace Demo.Migrations
|
namespace Demo.Migrations
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public partial class db : Migration
|
public partial class createbase : Migration
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
@ -25,12 +25,30 @@ namespace Demo.Migrations
|
|||||||
table.PrimaryKey("PK_Groups", x => x.Id);
|
table.PrimaryKey("PK_Groups", x => x.Id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Users",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Guid = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
|
FIO = table.Column<string>(type: "text", nullable: false),
|
||||||
|
GroupID = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Users", x => x.Guid);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Users_Groups_GroupID",
|
||||||
|
column: x => x.GroupID,
|
||||||
|
principalTable: "Groups",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "PresenceDaos",
|
name: "PresenceDaos",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
PresenceId = table.Column<int>(type: "integer", nullable: false)
|
Id = table.Column<int>(type: "integer", nullable: false).Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
||||||
UserGuid = table.Column<Guid>(type: "uuid", nullable: false),
|
UserGuid = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
IsAttedance = table.Column<bool>(type: "boolean", nullable: false),
|
IsAttedance = table.Column<bool>(type: "boolean", nullable: false),
|
||||||
Date = table.Column<DateOnly>(type: "date", nullable: false),
|
Date = table.Column<DateOnly>(type: "date", nullable: false),
|
||||||
@ -39,32 +57,13 @@ namespace Demo.Migrations
|
|||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_PresenceDaos", x => x.PresenceId);
|
table.PrimaryKey("PK_PresenceDaos", x => x.Id );
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "Users",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
UserGuid = table.Column<Guid>(type: "uuid", nullable: false),
|
|
||||||
FIO = table.Column<string>(type: "text", nullable: false),
|
|
||||||
GroupId = table.Column<int>(type: "integer", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_Users", x => x.UserGuid);
|
|
||||||
table.ForeignKey(
|
|
||||||
name: "FK_Users_Groups_GroupId",
|
|
||||||
column: x => x.GroupId,
|
|
||||||
principalTable: "Groups",
|
|
||||||
principalColumn: "Id",
|
|
||||||
onDelete: ReferentialAction.Cascade);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Users_GroupId",
|
name: "IX_Users_GroupID",
|
||||||
table: "Users",
|
table: "Users",
|
||||||
column: "GroupId");
|
column: "GroupID");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
@ -41,35 +41,31 @@ namespace Demo.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.PresenceDao", b =>
|
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.PresenceDao", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("PresenceId")
|
b.Property<int>("Id")
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType ("integer");
|
.HasColumnType ("integer");
|
||||||
|
b.Property<Guid>("UserGuid")
|
||||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("PresenceId"));
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
b.Property<DateOnly>("Date")
|
b.Property<DateOnly>("Date")
|
||||||
.HasColumnType("date");
|
.HasColumnType("date");
|
||||||
|
|
||||||
b.Property<int>("GroupId")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<bool>("IsAttedance")
|
b.Property<bool>("IsAttedance")
|
||||||
.HasColumnType("boolean");
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
b.Property<int>("LessonNumber")
|
b.Property<int>("LessonNumber")
|
||||||
.HasColumnType("integer");
|
.HasColumnType("integer");
|
||||||
|
|
||||||
b.Property<Guid>("UserGuid")
|
b.Property<int>("GroupId")
|
||||||
.HasColumnType("uuid");
|
.HasColumnType("integer");
|
||||||
|
|
||||||
b.HasKey("PresenceId");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.ToTable("PresenceDaos");
|
b.ToTable("PresenceDaos");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
||||||
{
|
{
|
||||||
b.Property<Guid>("UserGuid")
|
b.Property<Guid>("Guid")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
.HasColumnType("uuid");
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
@ -77,21 +73,32 @@ namespace Demo.Migrations
|
|||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("text");
|
.HasColumnType("text");
|
||||||
|
|
||||||
b.Property<int>("GroupId")
|
b.Property<int>("GroupID")
|
||||||
.HasColumnType("integer");
|
.HasColumnType("integer");
|
||||||
|
|
||||||
b.HasKey("UserGuid");
|
b.HasKey("Guid");
|
||||||
|
|
||||||
b.HasIndex("GroupId");
|
b.HasIndex("GroupID");
|
||||||
|
|
||||||
b.ToTable("Users");
|
b.ToTable("Users");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.PresenceDao", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo.Data.RemoteData.RemoteDataBase.DAO.UserDao", "UserDao")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("UserGuid")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("UserDao");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
modelBuilder.Entity("Demo.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Demo.Data.RemoteData.RemoteDataBase.DAO.GroupDao", "Group")
|
b.HasOne("Demo.Data.RemoteData.RemoteDataBase.DAO.GroupDao", "Group")
|
||||||
.WithMany("Users")
|
.WithMany("Users")
|
||||||
.HasForeignKey("GroupId")
|
.HasForeignKey("GroupID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
@ -16,10 +16,13 @@ services
|
|||||||
.AddSingleton<UserUseCase>()
|
.AddSingleton<UserUseCase>()
|
||||||
.AddSingleton<GroupUseCase>()
|
.AddSingleton<GroupUseCase>()
|
||||||
.AddSingleton<UseCaseGeneratePresence>()
|
.AddSingleton<UseCaseGeneratePresence>()
|
||||||
|
.AddSingleton<GroupConsoleUI>()
|
||||||
|
.AddSingleton<PresenceConsole>()
|
||||||
.AddSingleton<MainMenuUI>();
|
.AddSingleton<MainMenuUI>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var serviceProvider = services.BuildServiceProvider();
|
var serviceProvider = services.BuildServiceProvider();
|
||||||
// Создаем пользовательский интерфейс
|
// Создаем пользовательский интерфейс
|
||||||
MainMenuUI mainMenuUI = serviceProvider.GetService<MainMenuUI>();
|
MainMenuUI mainMenuUI = serviceProvider.GetService<MainMenuUI>();
|
@ -47,6 +47,13 @@ namespace Demo.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RemoveGroup(string groupIdStr)
|
||||||
|
{
|
||||||
|
int groupId = int.Parse(groupIdStr);
|
||||||
|
_groupUseCase.RemoveGroupById(groupId);
|
||||||
|
Console.WriteLine($"Группа с ID: {groupId} удалена");
|
||||||
|
}
|
||||||
|
|
||||||
// Метод для обновления названия группы
|
// Метод для обновления названия группы
|
||||||
public void UpdateGroupName(int groupId, string newGroupName)
|
public void UpdateGroupName(int groupId, string newGroupName)
|
||||||
{
|
{
|
@ -1,7 +1,6 @@
|
|||||||
using Demo.domain.Models;
|
using Demo.domain.Models;
|
||||||
using Demo.Domain.UseCase;
|
using Demo.Domain.UseCase;
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
|
||||||
|
|
||||||
namespace Demo.UI
|
namespace Demo.UI
|
||||||
{
|
{
|
||||||
@ -15,57 +14,58 @@ namespace Demo.UI
|
|||||||
{
|
{
|
||||||
_userConsoleUI = new UserConsoleUI(userUseCase);
|
_userConsoleUI = new UserConsoleUI(userUseCase);
|
||||||
_groupConsoleUI = new GroupConsoleUI(groupUseCase);
|
_groupConsoleUI = new GroupConsoleUI(groupUseCase);
|
||||||
_presenceConsoleUI = new PresenceConsole(presenceUseCase);
|
_presenceConsoleUI = new PresenceConsole(presenceUseCase); // Передаем GroupAttendanceService
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void DisplayMenu()
|
public void DisplayMenu()
|
||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Console.WriteLine("\n=-= Главное меню =-=\n");
|
Console.WriteLine("\n==================== Главная Панель ====================\n");
|
||||||
|
|
||||||
Console.WriteLine("=-= Команды с Пользователями =-=");
|
Console.WriteLine("~~~~~~~~~~~~~~~ УПРАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯМИ ~~~~~~~~~~~~~~~");
|
||||||
Console.WriteLine("1. Вывести всех пользователей");
|
Console.WriteLine("1. Показать список всех пользователей");
|
||||||
Console.WriteLine("2. Удалить пользователя по id");
|
Console.WriteLine("2. Удалить пользователя по его ID");
|
||||||
Console.WriteLine("3. Обновить пользователя по id");
|
Console.WriteLine("3. Обновить данные пользователя по ID");
|
||||||
Console.WriteLine("4. Найти пользователя по id");
|
Console.WriteLine("4. Найти пользователя по его ID");
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
|
|
||||||
Console.WriteLine("=-= Команды с Группами =-=");
|
Console.WriteLine("~~~~~~~~~~~~~~~ УПРАВЛЕНИЕ ГРУППАМИ ~~~~~~~~~~~~~~~");
|
||||||
Console.WriteLine("5. Вывести все группы");
|
Console.WriteLine("5. Показать список всех групп");
|
||||||
Console.WriteLine("6. Добавить группу");
|
Console.WriteLine("6. Создать новую группу");
|
||||||
Console.WriteLine("7. Изменить название группы");
|
Console.WriteLine("7. Удалить группу по ID");
|
||||||
Console.WriteLine("8. Поиск группы по ID");
|
Console.WriteLine("8. Изменить название существующей группы");
|
||||||
Console.WriteLine();
|
Console.WriteLine("9. Найти группу по ее ID");
|
||||||
Console.WriteLine("=-= Команды Presence =-=");
|
|
||||||
Console.WriteLine("9. Сгенерировать посещаемость на день");
|
|
||||||
Console.WriteLine("10. Сгенерировать посещаемость на неделю");
|
|
||||||
Console.WriteLine("11. Показать посещаемость");
|
|
||||||
Console.WriteLine("12. Отметить пользователя как отсутствующего");
|
|
||||||
Console.WriteLine("13. Вывести всю посещаемость группы");
|
|
||||||
Console.WriteLine("14. Вывести общую информацию об посещаемости по группе");
|
|
||||||
Console.WriteLine("15. Вывести отчётв Excel");
|
|
||||||
Console.WriteLine();
|
|
||||||
Console.WriteLine("0. Выход");
|
|
||||||
|
|
||||||
Console.Write("\nВаш выбор: ");
|
|
||||||
string comand = Console.ReadLine();
|
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
|
|
||||||
switch (comand)
|
Console.WriteLine("~~~~~~~~~~~~~~~ УПРАВЛЕНИЕ ПОСЕЩАЕМОСТЬЮ ~~~~~~~~~~~~~~~");
|
||||||
|
Console.WriteLine("10. Сгенерировать посещаемость на текущий день");
|
||||||
|
Console.WriteLine("11. Сгенерировать посещаемость на текущую неделю");
|
||||||
|
Console.WriteLine("12. Показать посещаемость всех пользователей");
|
||||||
|
Console.WriteLine("13. Отметить пользователя как отсутствующего");
|
||||||
|
Console.WriteLine("14. Вывести посещаемость группы по ID");
|
||||||
|
Console.WriteLine("15. Показать информацию о посещаемости группы");
|
||||||
|
Console.WriteLine();
|
||||||
|
|
||||||
|
Console.WriteLine("========================================================");
|
||||||
|
Console.WriteLine("0. Выход из программы");
|
||||||
|
|
||||||
|
Console.Write("\nВыберите команду: ");
|
||||||
|
string command = Console.ReadLine();
|
||||||
|
Console.WriteLine();
|
||||||
|
|
||||||
|
switch (command)
|
||||||
{
|
{
|
||||||
case "1":
|
case "1":
|
||||||
// Отображение всех пользователей
|
|
||||||
_userConsoleUI.DisplayAllUsers();
|
_userConsoleUI.DisplayAllUsers();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "2":
|
case "2":
|
||||||
// Удаление пользователя по ID
|
|
||||||
Console.Write("Введите ID пользователя для удаления: ");
|
Console.Write("Введите ID пользователя для удаления: ");
|
||||||
string inputGuid = Console.ReadLine();
|
if (Guid.TryParse(Console.ReadLine(), out Guid userGuid))
|
||||||
if (Guid.TryParse(inputGuid, out Guid UserGuid))
|
|
||||||
{
|
{
|
||||||
_userConsoleUI.RemoveUserById(UserGuid);
|
_userConsoleUI.RemoveUserById(userGuid);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -74,10 +74,8 @@ namespace Demo.UI
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case "3":
|
case "3":
|
||||||
// Обновление пользователя по ID
|
|
||||||
Console.Write("Введите ID пользователя для обновления: ");
|
Console.Write("Введите ID пользователя для обновления: ");
|
||||||
string updateGuidInput = Console.ReadLine();
|
if (Guid.TryParse(Console.ReadLine(), out Guid updateUserGuid))
|
||||||
if (Guid.TryParse(updateGuidInput, out Guid updateUserGuid))
|
|
||||||
{
|
{
|
||||||
_userConsoleUI.UpdateUserById(updateUserGuid);
|
_userConsoleUI.UpdateUserById(updateUserGuid);
|
||||||
}
|
}
|
||||||
@ -88,10 +86,8 @@ namespace Demo.UI
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case "4":
|
case "4":
|
||||||
// Поиск пользователя по ID
|
|
||||||
Console.Write("Введите ID пользователя для поиска: ");
|
Console.Write("Введите ID пользователя для поиска: ");
|
||||||
string findGuidInput = Console.ReadLine();
|
if (Guid.TryParse(Console.ReadLine(), out Guid findUserGuid))
|
||||||
if (Guid.TryParse(findGuidInput, out Guid findUserGuid))
|
|
||||||
{
|
{
|
||||||
_userConsoleUI.FindUserById(findUserGuid);
|
_userConsoleUI.FindUserById(findUserGuid);
|
||||||
}
|
}
|
||||||
@ -102,25 +98,21 @@ namespace Demo.UI
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case "5":
|
case "5":
|
||||||
// Отображение всех групп
|
|
||||||
_groupConsoleUI.DisplayAllGroups();
|
_groupConsoleUI.DisplayAllGroups();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "6":
|
case "6":
|
||||||
// Добавление новой группы
|
|
||||||
Console.Write("Введите название новой группы: ");
|
Console.Write("Введите название новой группы: ");
|
||||||
string newGroupName = Console.ReadLine();
|
string newGroupName = Console.ReadLine();
|
||||||
_groupConsoleUI.AddGroup(newGroupName);
|
_groupConsoleUI.AddGroup(newGroupName);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "7":
|
case "7":
|
||||||
// Изменение названия группы
|
Console.Write("Введите ID группы для удаления: ");
|
||||||
Console.Write("Введите ID группы для изменения: ");
|
string groupIdForDeleteStr = Console.ReadLine(); // Считываем ID как строку
|
||||||
if (int.TryParse(Console.ReadLine(), out int groupId))
|
if (!string.IsNullOrWhiteSpace(groupIdForDeleteStr) && int.TryParse(groupIdForDeleteStr, out int groupIdForDelete)) // Проверяем, что строка не пустая и может быть преобразована в int
|
||||||
{
|
{
|
||||||
Console.Write("Введите новое название группы: ");
|
_groupConsoleUI.RemoveGroup(groupIdForDeleteStr); // Передаем строку в метод
|
||||||
string newName = Console.ReadLine();
|
|
||||||
_groupConsoleUI.UpdateGroupName(groupId, newName);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -129,16 +121,32 @@ namespace Demo.UI
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case "8":
|
case "8":
|
||||||
// Поиск группы
|
Console.Write("Введите ID группы для изменения: ");
|
||||||
Console.Write("Введите ID группы для поиска : ");
|
if (int.TryParse(Console.ReadLine(), out int groupIdToUpdate))
|
||||||
if (int.TryParse(Console.ReadLine(), out int IdGroup))
|
|
||||||
{
|
{
|
||||||
_groupConsoleUI.FindGroupById(IdGroup);
|
Console.Write("Введите новое название группы: ");
|
||||||
|
string newName = Console.ReadLine();
|
||||||
|
_groupConsoleUI.UpdateGroupName(groupIdToUpdate, newName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Неверный формат ID группы");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "9":
|
case "9":
|
||||||
// Генерация посещаемости на день
|
Console.Write("Введите ID группы для поиска: ");
|
||||||
|
if (int.TryParse(Console.ReadLine(), out int idGroupToFind))
|
||||||
|
{
|
||||||
|
_groupConsoleUI.FindGroupById(idGroupToFind);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Неверный формат ID группы");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "10":
|
||||||
Console.Write("Введите номер первого занятия: ");
|
Console.Write("Введите номер первого занятия: ");
|
||||||
int firstLesson = int.Parse(Console.ReadLine());
|
int firstLesson = int.Parse(Console.ReadLine());
|
||||||
Console.Write("Введите номер последнего занятия: ");
|
Console.Write("Введите номер последнего занятия: ");
|
||||||
@ -150,8 +158,7 @@ namespace Demo.UI
|
|||||||
Console.WriteLine("Посещаемость на день сгенерирована.");
|
Console.WriteLine("Посещаемость на день сгенерирована.");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "10":
|
case "11":
|
||||||
// Генерация посещаемости на неделю
|
|
||||||
Console.Write("Введите номер первого занятия: ");
|
Console.Write("Введите номер первого занятия: ");
|
||||||
int firstLessonForWeek = int.Parse(Console.ReadLine());
|
int firstLessonForWeek = int.Parse(Console.ReadLine());
|
||||||
Console.Write("Введите номер последнего занятия: ");
|
Console.Write("Введите номер последнего занятия: ");
|
||||||
@ -163,8 +170,7 @@ namespace Demo.UI
|
|||||||
Console.WriteLine("Посещаемость на неделю сгенерирована.");
|
Console.WriteLine("Посещаемость на неделю сгенерирована.");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "11":
|
case "12":
|
||||||
// Отображение посещаемости
|
|
||||||
Console.Write("Введите дату (гггг-мм-дд): ");
|
Console.Write("Введите дату (гггг-мм-дд): ");
|
||||||
DateTime date = DateTime.Parse(Console.ReadLine());
|
DateTime date = DateTime.Parse(Console.ReadLine());
|
||||||
Console.Write("Введите ID группы: ");
|
Console.Write("Введите ID группы: ");
|
||||||
@ -173,10 +179,9 @@ namespace Demo.UI
|
|||||||
_presenceConsoleUI.DisplayPresence(date, groupForPresenceView);
|
_presenceConsoleUI.DisplayPresence(date, groupForPresenceView);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "12":
|
case "13":
|
||||||
// Отметить пользователя как отсутствующего
|
|
||||||
Console.Write("Введите ID пользователя: ");
|
Console.Write("Введите ID пользователя: ");
|
||||||
UserGuid = Guid.Parse(Console.ReadLine());
|
userGuid = Guid.Parse(Console.ReadLine());
|
||||||
Console.Write("Введите номер первого занятия: ");
|
Console.Write("Введите номер первого занятия: ");
|
||||||
int firstAbsLesson = int.Parse(Console.ReadLine());
|
int firstAbsLesson = int.Parse(Console.ReadLine());
|
||||||
Console.Write("Введите номер последнего занятия: ");
|
Console.Write("Введите номер последнего занятия: ");
|
||||||
@ -184,32 +189,28 @@ namespace Demo.UI
|
|||||||
Console.Write("Введите ID группы: ");
|
Console.Write("Введите ID группы: ");
|
||||||
int absGroupId = int.Parse(Console.ReadLine());
|
int absGroupId = int.Parse(Console.ReadLine());
|
||||||
|
|
||||||
Console.Write("Введите дату (дд.мм.гггг): ");
|
_presenceConsoleUI.MarkUserAsAbsent(DateTime.Now, absGroupId, userGuid, firstAbsLesson, lastAbsLesson);
|
||||||
string dateInput = Console.ReadLine();
|
|
||||||
DateTime absenceDate;
|
|
||||||
|
|
||||||
if (!DateTime.TryParseExact(dateInput, "d.M.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out absenceDate))
|
|
||||||
{
|
|
||||||
Console.WriteLine("Ошибка: Введен некорректный формат даты. Пожалуйста, используйте формат дд.мм.гггг.");
|
|
||||||
return; // Завершает выполнение, если дата некорректна
|
|
||||||
}
|
|
||||||
_presenceConsoleUI.MarkUserAbsent(absenceDate, absGroupId, UserGuid, firstAbsLesson, lastAbsLesson);
|
|
||||||
Console.WriteLine("Пользователь отмечен как отсутствующий.");
|
Console.WriteLine("Пользователь отмечен как отсутствующий.");
|
||||||
break;
|
break;
|
||||||
case "13":
|
|
||||||
|
case "14":
|
||||||
Console.Write("Введите ID группы: ");
|
Console.Write("Введите ID группы: ");
|
||||||
int groupIdForAllPresence = int.Parse(Console.ReadLine());
|
int groupIdForAllPresence = int.Parse(Console.ReadLine());
|
||||||
_presenceConsoleUI.DisplayAllPresenceByGroup(groupIdForAllPresence);
|
_presenceConsoleUI.DisplayAllPresenceByGroup(groupIdForAllPresence);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "14":
|
|
||||||
Console.Write("Введите ID группы: ");
|
|
||||||
int searchGroupId= int.Parse(Console.ReadLine());
|
|
||||||
_presenceConsoleUI.DisplayGeneralPresence(searchGroupId);
|
|
||||||
break;
|
|
||||||
case "15":
|
case "15":
|
||||||
_presenceConsoleUI.ExportAttendanceToExcel();
|
Console.Write("Введите ID группы для отображения информации о посещаемости: ");
|
||||||
|
if (int.TryParse(Console.ReadLine(), out int groupIdForAttendanceInfo))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Неверный формат ID группы");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "0":
|
case "0":
|
||||||
Console.WriteLine("Выход...");
|
Console.WriteLine("Выход...");
|
||||||
return;
|
return;
|
154
presence_new/UI/PresenceConsole.cs
Normal file
154
presence_new/UI/PresenceConsole.cs
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
using Demo.domain.Models;
|
||||||
|
using Demo.Domain.UseCase;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo.UI
|
||||||
|
{
|
||||||
|
public class PresenceConsole
|
||||||
|
{
|
||||||
|
private readonly UseCaseGeneratePresence _presenceUseCase;
|
||||||
|
|
||||||
|
|
||||||
|
public PresenceConsole(UseCaseGeneratePresence presenceUseCase)
|
||||||
|
{
|
||||||
|
_presenceUseCase = presenceUseCase;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для генерации посещаемости на день
|
||||||
|
public void GeneratePresenceForDay(DateTime date, int groupId, int firstLesson, int lastLesson)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_presenceUseCase.GeneratePresenceDaily(firstLesson, lastLesson, groupId, date);
|
||||||
|
Console.WriteLine("Посещаемость на день успешно сгенерирована.");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для генерации посещаемости на неделю
|
||||||
|
public void GeneratePresenceForWeek(DateTime date, int groupId, int firstLesson, int lastLesson)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_presenceUseCase.GenerateWeeklyPresence(firstLesson, lastLesson, groupId, date);
|
||||||
|
Console.WriteLine("Посещаемость на неделю успешно сгенерирована.");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для отображения посещаемости на конкретную дату и группу
|
||||||
|
public void DisplayPresence(DateTime date, int groupId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<PresenceLocalEntity> presences = _presenceUseCase.GetPresenceByGroupAndDate(groupId, date);
|
||||||
|
|
||||||
|
if (presences == null || presences.Count == 0)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Нет данных о посещаемости на выбранную дату.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine($"\n Посещаемость на {date:dd.MM.yyyy} ");
|
||||||
|
Console.WriteLine("-----------------------------------------------------");
|
||||||
|
|
||||||
|
// Сохраняем номер занятия для сравнения
|
||||||
|
int previousLessonNumber = -1;
|
||||||
|
|
||||||
|
foreach (var presence in presences)
|
||||||
|
{
|
||||||
|
// Проверяем, изменился ли номер занятия
|
||||||
|
if (previousLessonNumber != presence.LessonNumber)
|
||||||
|
{
|
||||||
|
Console.WriteLine("-----------------------------------------------------");
|
||||||
|
Console.WriteLine($" Занятие: {presence.LessonNumber} ");
|
||||||
|
Console.WriteLine("-----------------------------------------------------");
|
||||||
|
previousLessonNumber = presence.LessonNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Форматируем статус присутствия
|
||||||
|
string status = presence.IsAttedance ? "Присутствует" : "Отсутствует";
|
||||||
|
Console.WriteLine($"Пользователь (ID: {presence.UserGuid}) - Статус: {status}");
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("-----------------------------------------------------");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Ошибка при отображении посещаемости: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void MarkUserAsAbsent(DateTime date, int groupId, Guid userGuid, int firstLesson, int lastLesson)
|
||||||
|
{
|
||||||
|
_presenceUseCase.MarkUserAsAbsent(userGuid, groupId, firstLesson, lastLesson, date);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void DisplayAllPresenceByGroup(int groupId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var presences = _presenceUseCase.GetAllPresenceByGroup(groupId);
|
||||||
|
|
||||||
|
if (presences == null || !presences.Any())
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Нет данных о посещаемости для группы с ID: {groupId}.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Группируем записи посещаемости по дате
|
||||||
|
var groupedPresences = presences.GroupBy(p => p.Date);
|
||||||
|
|
||||||
|
foreach (var group in groupedPresences)
|
||||||
|
{
|
||||||
|
Console.WriteLine("===================================================");
|
||||||
|
Console.WriteLine($" Дата: {group.Key:dd.MM.yyyy} ");
|
||||||
|
Console.WriteLine("===================================================");
|
||||||
|
|
||||||
|
// Сохраняем номер занятия для сравнения
|
||||||
|
int previousLessonNumber = -1;
|
||||||
|
|
||||||
|
foreach (var presence in group)
|
||||||
|
{
|
||||||
|
// Проверяем, изменился ли номер занятия
|
||||||
|
if (previousLessonNumber != presence.LessonNumber)
|
||||||
|
{
|
||||||
|
Console.WriteLine("---------------------------------------------------");
|
||||||
|
Console.WriteLine($" Занятие: {presence.LessonNumber} ");
|
||||||
|
Console.WriteLine("---------------------------------------------------");
|
||||||
|
previousLessonNumber = presence.LessonNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Форматируем статус присутствия
|
||||||
|
string status = presence.IsAttedance ? "✅ Присутствует" : "❌ Отсутствует";
|
||||||
|
Console.WriteLine($"Пользователь (ID: {presence.UserGuid}) - Статус: {status}");
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("---------------------------------------------------");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Ошибка при отображении посещаемости: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,4 @@
|
|||||||
using Demo.Data.RemoteData.RemoteDataBase;
|
using Demo.Domain.UseCase;
|
||||||
using Demo.Data.Repository;
|
|
||||||
using Demo.Domain.UseCase;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
@ -31,32 +29,24 @@ namespace Demo.UI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Метод для удаления пользователя по ID
|
// Метод для удаления пользователя по ID
|
||||||
public void RemoveUserById(Guid UserGuid)
|
public void RemoveUserById(Guid userGuid)
|
||||||
{
|
{
|
||||||
// Сначала удаляем все записи о присутствии пользователя
|
string output = _userUseCase.RemoveUserById(userGuid) ? "Пользователь удален" : "Пользователь не найден";
|
||||||
_userUseCase.RemovePresenceByUserId(UserGuid);
|
|
||||||
|
|
||||||
// Теперь удаляем пользователя
|
|
||||||
string output = _userUseCase.RemoveUserById(UserGuid) ? "Пользователь удален" : "Пользователь не найден";
|
|
||||||
Console.WriteLine($"\n{output}\n");
|
Console.WriteLine($"\n{output}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Метод для обновления пользователя по ID
|
// Метод для обновления пользователя по ID
|
||||||
public void UpdateUserById(Guid UserGuid)
|
public void UpdateUserById(Guid userGuid)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var user = _userUseCase.FindUserById(UserGuid);
|
var user = _userUseCase.FindUserById(userGuid);
|
||||||
|
|
||||||
|
Console.WriteLine($"Текущие данные: {user.FIO}, {user.Group.Name}");
|
||||||
Console.WriteLine($"Текущие данные: {user.FIO}");
|
|
||||||
Console.Write("\nВведите новое ФИО: ");
|
Console.Write("\nВведите новое ФИО: ");
|
||||||
string newFIO = Console.ReadLine();
|
string newFIO = Console.ReadLine();
|
||||||
Console.Write("\nВведите новый ID группы (или оставьте такой же): ");
|
|
||||||
int GroupId = int.Parse(Console.ReadLine());
|
|
||||||
|
|
||||||
user.FIO = newFIO;
|
user.FIO = newFIO;
|
||||||
user.GroupId = GroupId;
|
|
||||||
_userUseCase.UpdateUser(user);
|
_userUseCase.UpdateUser(user);
|
||||||
|
|
||||||
Console.WriteLine("\nПользователь обновлен.\n");
|
Console.WriteLine("\nПользователь обновлен.\n");
|
||||||
@ -68,12 +58,12 @@ namespace Demo.UI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Метод для поиска пользователя по ID
|
// Метод для поиска пользователя по ID
|
||||||
public void FindUserById(Guid UserGuid)
|
public void FindUserById(Guid userGuid)
|
||||||
{
|
{
|
||||||
var user = _userUseCase.FindUserById(UserGuid);
|
var user = _userUseCase.FindUserById(userGuid);
|
||||||
if (user != null)
|
if (user != null)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"\nПользователь найден: {user.UserGuid}, {user.FIO}, {user.Group.Name}\n");
|
Console.WriteLine($"\nПользователь найден: {user.Guid}, {user.FIO}, {user.Group.Name}\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
BIN
presence_new/bin/Debug/net8.0/Demo.dll
Normal file
BIN
presence_new/bin/Debug/net8.0/Demo.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
presence_new/bin/Debug/net8.0/Demo.pdb
Normal file
BIN
presence_new/bin/Debug/net8.0/Demo.pdb
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user