Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
5b14b04f01 |
@ -8,7 +8,7 @@ namespace _123.Data.LocalData.Entity
|
||||
{
|
||||
public class PresenceLocalEntity
|
||||
{
|
||||
public required Guid UserGuid { get; set; }
|
||||
public required int UserID { get; set; }
|
||||
public bool IsAttedance { get; set; } = true;
|
||||
public required DateOnly Date { get; set; }
|
||||
|
||||
|
@ -6,16 +6,12 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.LocalData.Entity
|
||||
{
|
||||
public class UserLocalEntity : IEquatable<UserLocalEntity>
|
||||
public class UserLocalEntity
|
||||
{
|
||||
public required string UserFIO { get; set; }
|
||||
public Guid UserGuid { get; set; }
|
||||
public int UserId { get; set; }
|
||||
|
||||
public required int GroupID { get; set; }
|
||||
public bool Equals(UserLocalEntity? other)
|
||||
{
|
||||
if (other == null) return false;
|
||||
return this.UserGuid.Equals(other.UserGuid);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -17,12 +18,12 @@ namespace _123.Data.LocalData
|
||||
};
|
||||
public static List<UserLocalEntity> users => new List<UserLocalEntity>
|
||||
{
|
||||
new UserLocalEntity{UserGuid=Guid.Parse("e6b9964d-ea9f-420a-84b9-af9633bbfab9"), UserFIO = "RandomFio", GroupID = 1 },
|
||||
new UserLocalEntity{UserGuid=Guid.Parse("8388d931-5bef-41be-a152-78f1aca980ed"), UserFIO = "RandomFio1", GroupID = 2 },
|
||||
new UserLocalEntity{UserGuid=Guid.Parse("ed174548-49ed-4503-a902-c970cbf27173"), UserFIO = "RandomFio2", GroupID = 3 },
|
||||
new UserLocalEntity{UserGuid=Guid.Parse("614c0a23-5bd5-43ae-b48e-d5750afbc282"), UserFIO = "RandomFio3", GroupID = 1 },
|
||||
new UserLocalEntity{UserGuid=Guid.Parse("efcc1473-c116-4244-b3f7-f2341a5c3003"), UserFIO = "RandomFio4", GroupID = 2 },
|
||||
new UserLocalEntity{UserGuid=Guid.Parse("60640fb3-ace2-4cad-81d5-a0a58bc2dbbd"), UserFIO = "RandomFio5", GroupID = 3 },
|
||||
new UserLocalEntity{UserId = 1, UserFIO = "RandomFio", GroupID = 1 },
|
||||
new UserLocalEntity{UserId = 2, UserFIO = "RandomFio1", GroupID = 2 },
|
||||
new UserLocalEntity{UserId = 3, UserFIO = "RandomFio2", GroupID = 3 },
|
||||
new UserLocalEntity{UserId = 4, UserFIO = "RandomFio3", GroupID = 1 },
|
||||
new UserLocalEntity{UserId = 5, UserFIO = "RandomFio4", GroupID = 2 },
|
||||
new UserLocalEntity{UserId = 6, UserFIO = "RandomFio5", GroupID = 3 },
|
||||
};
|
||||
public static List<PresenceLocalEntity> presences => new List<PresenceLocalEntity>
|
||||
{
|
||||
|
15
123/Data/RemoteData/RemoteDatabase/DAO/Group.cs
Normal file
15
123/Data/RemoteData/RemoteDatabase/DAO/Group.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.RemoteData.RemoteDatabase.DAO
|
||||
{
|
||||
public class GroupDao
|
||||
{
|
||||
public int ID { get; set; }
|
||||
public required string Name { get; set; }
|
||||
public IEnumerable<UserDao> Users { get; set; }
|
||||
}
|
||||
}
|
19
123/Data/RemoteData/RemoteDatabase/DAO/Presence.cs
Normal file
19
123/Data/RemoteData/RemoteDatabase/DAO/Presence.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.RemoteData.RemoteDatabase.DAO
|
||||
{
|
||||
public class PresenceDao
|
||||
{
|
||||
public bool IsAttedance { get; set; } = true;
|
||||
public required DateOnly Date { get; set; }
|
||||
|
||||
public required int LessonNumber { get; set; }
|
||||
public UserDao UserDao { get; set; }
|
||||
public int UserID { get; set; }
|
||||
public int GroupId { get; set; }
|
||||
}
|
||||
}
|
18
123/Data/RemoteData/RemoteDatabase/DAO/User.cs
Normal file
18
123/Data/RemoteData/RemoteDatabase/DAO/User.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.RemoteData.RemoteDatabase.DAO
|
||||
{
|
||||
public class UserDao
|
||||
{
|
||||
public required string UserFIO { get; set; }
|
||||
public int UserID { get; set; }
|
||||
|
||||
public required int GroupID { get; set; }
|
||||
|
||||
public GroupDao Group { get; set; }
|
||||
}
|
||||
}
|
36
123/Data/RemoteData/RemoteDatabase/RemoteDatabaseContext.cs
Normal file
36
123/Data/RemoteData/RemoteDatabase/RemoteDatabaseContext.cs
Normal file
@ -0,0 +1,36 @@
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.RemoteData.RemoteDatabase
|
||||
{
|
||||
public class RemoteDatabaseContext: DbContext
|
||||
{
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
optionsBuilder.UseNpgsql("Host = 45.67.56.214; Port = 5421; Username = user3; Database = user3; Password = VOTfZ8PQ");
|
||||
}
|
||||
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.UserID);
|
||||
modelBuilder.Entity<UserDao>().Property(user => user.UserID).ValueGeneratedOnAdd();
|
||||
modelBuilder.Entity<PresenceDao>().HasKey(presence => new
|
||||
{
|
||||
presence.UserID,
|
||||
presence.Date,
|
||||
presence.IsAttedance,
|
||||
presence.LessonNumber
|
||||
});
|
||||
}
|
||||
public DbSet<GroupDao> Groups { get; set; }
|
||||
public DbSet<UserDao> Users { get; set; }
|
||||
public DbSet<PresenceDao> PresencesDaos { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -1,33 +0,0 @@
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.LocalData;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.ReportsHistory
|
||||
{
|
||||
|
||||
public class GroupRepositoryImpl
|
||||
{
|
||||
public List<GroupLocalEntity> GetAllGroups() => LocalStaticData.groups;
|
||||
|
||||
public GroupLocalEntity? UpdateGroup(String name)
|
||||
{
|
||||
GroupLocalEntity? groupLocal = GetAllGroups()
|
||||
.Where(x => x.Name == name).FirstOrDefault();
|
||||
if (groupLocal == null) return null;
|
||||
groupLocal.Name = name;
|
||||
return groupLocal;
|
||||
}
|
||||
public GroupLocalEntity AddGroup(String name, String id)
|
||||
{
|
||||
GroupLocalEntity? groupLocal = GetAllGroups().FirstOrDefault();
|
||||
groupLocal.Name = name;
|
||||
groupLocal.ID = int.Parse(id);
|
||||
return groupLocal;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
using _123.Data.LocalData;
|
||||
using _123.Data.LocalData.Entity;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace _123.Data.ReportsHistory
|
||||
{
|
||||
public class UserRepositoryImpl
|
||||
{
|
||||
public UserRepositoryImpl()
|
||||
{
|
||||
|
||||
GetAllUsers = LocalStaticData.users;
|
||||
}
|
||||
public List<UserLocalEntity> GetAllUsers
|
||||
{ get; set; }
|
||||
|
||||
public bool RemoveUserByGuid(Guid userGuid)
|
||||
{
|
||||
UserLocalEntity? userLocal = GetAllUsers
|
||||
.Where(x => x.UserGuid == userGuid).FirstOrDefault();
|
||||
if (userLocal == null) return false;
|
||||
|
||||
return GetAllUsers.Remove(userLocal);
|
||||
}
|
||||
public UserLocalEntity FindUserByGuid(Guid userGuid)
|
||||
{
|
||||
UserLocalEntity? userLocal = GetAllUsers
|
||||
.Where(x => x.UserGuid == userGuid).FirstOrDefault();
|
||||
if (userLocal == null) throw new Exception("Пользователь не найден");
|
||||
return userLocal;
|
||||
}
|
||||
|
||||
|
||||
public UserLocalEntity? GetUserByGuid(Guid userGuid)
|
||||
{
|
||||
UserLocalEntity? userLocal = GetAllUsers
|
||||
.Where(x => x.UserGuid == userGuid).FirstOrDefault();
|
||||
if (userLocal == null) return null;
|
||||
|
||||
return userLocal;
|
||||
}
|
||||
|
||||
public UserLocalEntity? UpdateUser(UserLocalEntity userUpdateLocalEnity)
|
||||
{
|
||||
UserLocalEntity? userLocal = GetAllUsers
|
||||
.Where(x => x.UserGuid == userUpdateLocalEnity.UserGuid).FirstOrDefault();
|
||||
if (userLocal == null) return null;
|
||||
userLocal.UserFIO = userUpdateLocalEnity.UserFIO;
|
||||
userLocal.GroupID = userUpdateLocalEnity.GroupID;
|
||||
return userLocal;
|
||||
|
||||
}
|
||||
public UserLocalEntity? UpdateUserByGuid(Guid userGuid)
|
||||
{
|
||||
UserLocalEntity? userLocal = GetAllUsers
|
||||
.Where(x => x.UserGuid == userGuid).FirstOrDefault();
|
||||
if (userLocal == null) return null;
|
||||
return userLocal;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
65
123/Data/Repository/GroupRepositoty.cs
Normal file
65
123/Data/Repository/GroupRepositoty.cs
Normal file
@ -0,0 +1,65 @@
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.LocalData;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
|
||||
namespace _123.Data.Repository
|
||||
{
|
||||
|
||||
public class GroupRepositoryImpl: IGroupRepository
|
||||
{
|
||||
public List<GroupLocalEntity> GetAllGroups() => LocalStaticData.groups;
|
||||
public bool AddGroup(String name,String Id)
|
||||
{
|
||||
GroupLocalEntity? groupLocal = GetAllGroups().FirstOrDefault();
|
||||
groupLocal.Name = name;
|
||||
groupLocal.ID = int.Parse(Id);
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<GroupLocalEntity> GetAllGroup()
|
||||
{
|
||||
return GetAllGroup();
|
||||
}
|
||||
|
||||
public GroupLocalEntity GetGroupById(int groupID)
|
||||
{
|
||||
GroupLocalEntity? groupLocal = GetAllGroups()
|
||||
.Where(x => x.ID == groupID).FirstOrDefault();
|
||||
if (groupLocal == null) return null;
|
||||
return groupLocal;
|
||||
}
|
||||
|
||||
public bool RemoveGroupById(int groupID)
|
||||
{
|
||||
GroupLocalEntity? userLocal = GetAllGroups()
|
||||
.Where(x => x.ID == groupID).FirstOrDefault();
|
||||
if (userLocal == null) return false;
|
||||
return GetAllGroups().Remove(userLocal);
|
||||
}
|
||||
|
||||
public bool UpdateGroupById(int groupID, String name)
|
||||
{
|
||||
GroupLocalEntity? groupLocal = GetAllGroups()
|
||||
.Where(x => x.ID == groupID).FirstOrDefault();
|
||||
if (groupLocal == null) return false;
|
||||
groupLocal.Name = name;
|
||||
return true;
|
||||
}
|
||||
|
||||
List<GroupDao> IGroupRepository.GetAllGroup()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
GroupDao IGroupRepository.GetGroupById(int groupID)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
19
123/Data/Repository/IGroupRepository.cs
Normal file
19
123/Data/Repository/IGroupRepository.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.Repository
|
||||
{
|
||||
public interface IGroupRepository
|
||||
{
|
||||
List<GroupDao> GetAllGroup();
|
||||
bool RemoveGroupById(int groupID);
|
||||
bool UpdateGroupById(int groupID, String name);
|
||||
GroupDao GetGroupById(int groupID);
|
||||
bool AddGroup(String name, String id);
|
||||
}
|
||||
}
|
20
123/Data/Repository/IPresenceRepository.cs
Normal file
20
123/Data/Repository/IPresenceRepository.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using _123.Domain.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.Repository
|
||||
{
|
||||
public interface IPresenceRepository
|
||||
{
|
||||
List<PresenceDao> GetPresenceByGroup(int groupId);
|
||||
List<PresenceDao> GetPresenceByGroupAndDate(int groupId, DateOnly date);
|
||||
bool UnCheckAttendence (int firstClass, int lastClass, DateOnly date, int UserId);
|
||||
void AddPresence (PresenceDao presence);
|
||||
|
||||
}
|
||||
}
|
20
123/Data/Repository/IUserRepository.cs
Normal file
20
123/Data/Repository/IUserRepository.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.Repository
|
||||
{
|
||||
public interface IUserRepository
|
||||
{
|
||||
List<UserDao> GetAllUser();
|
||||
bool RemoveUserById(int userId);
|
||||
UserDao FindUserById(int userId);
|
||||
UserDao? GetUserById(int userId);
|
||||
UserDao? UpdateUser(UserDao userUpdate);
|
||||
UserDao? UpdateUserById(int userId);
|
||||
}
|
||||
}
|
54
123/Data/Repository/PresenceRepository.cs
Normal file
54
123/Data/Repository/PresenceRepository.cs
Normal file
@ -0,0 +1,54 @@
|
||||
using _123.Data.LocalData;
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using _123.Domain.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace _123.Data.Repository
|
||||
{
|
||||
public class PresenceRepositoryImpl : IPresenceRepository
|
||||
|
||||
{
|
||||
public List<PresenceDao> GetAllPresences
|
||||
{ get; set; }
|
||||
|
||||
public void AddPresence(PresenceDao presence)
|
||||
{
|
||||
PresenceDao? presenceLocal = GetAllPresences.FirstOrDefault();
|
||||
presenceLocal.UserID = presence.UserID;
|
||||
presenceLocal.Date = presence.Date;
|
||||
presenceLocal.IsAttedance = presence.IsAttedance;
|
||||
presenceLocal.LessonNumber = presence.LessonNumber;
|
||||
|
||||
}
|
||||
|
||||
public List<PresenceDao> GetPresenceByGroup(int groupId)
|
||||
{
|
||||
return GetAllPresences;
|
||||
}
|
||||
|
||||
public List<PresenceDao> GetPresenceByGroupAndDate(int groupId, DateOnly date)
|
||||
{
|
||||
return GetAllPresences;
|
||||
}
|
||||
|
||||
public bool UnCheckAttendence(int firstClass, int lastClass, DateOnly date, int userId)
|
||||
{
|
||||
var presToUpdate = GetAllPresences
|
||||
.Where(x => x.UserID == userId && x.LessonNumber >= firstClass
|
||||
&& x.LessonNumber <= lastClass && x.Date == date).ToList();
|
||||
foreach (var presence in presToUpdate)
|
||||
{
|
||||
presence.IsAttedance = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
121
123/Data/Repository/SQLGroupRepository.cs
Normal file
121
123/Data/Repository/SQLGroupRepository.cs
Normal file
@ -0,0 +1,121 @@
|
||||
using _123.Data.LocalData;
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.RemoteData.RemoteDatabase;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace _123.Data.Repository
|
||||
{
|
||||
public class SQLGroupRepositoryImpl : IGroupRepository
|
||||
{
|
||||
private readonly RemoteDatabaseContext _remoteDatabaseContext;
|
||||
|
||||
public SQLGroupRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
|
||||
{
|
||||
_remoteDatabaseContext = remoteDatabaseContext;
|
||||
}
|
||||
|
||||
public List<GroupDao> GetAllGroups()
|
||||
{
|
||||
var groups = _remoteDatabaseContext.Groups
|
||||
.Select(g => new GroupDao
|
||||
{
|
||||
ID = g.ID,
|
||||
Name = g.Name
|
||||
})
|
||||
.ToList();
|
||||
return groups;
|
||||
}
|
||||
|
||||
public bool AddGroup(string name, string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
var groupDao = new GroupDao
|
||||
{
|
||||
ID = int.Parse(id),
|
||||
Name = name,
|
||||
Users = new List<UserDao>()
|
||||
};
|
||||
_remoteDatabaseContext.Groups.Add(groupDao);
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public List<GroupDao> GetAllGroup()
|
||||
{
|
||||
return GetAllGroups();
|
||||
}
|
||||
|
||||
public GroupDao GetGroupById(int groupID)
|
||||
{
|
||||
var group = _remoteDatabaseContext.Groups
|
||||
.FirstOrDefault(x => x.ID == groupID);
|
||||
|
||||
if (group == null) return null;
|
||||
|
||||
return new GroupDao
|
||||
{
|
||||
ID = group.ID,
|
||||
Name = group.Name,
|
||||
Users = group.Users?.Select(u => new UserDao
|
||||
{
|
||||
UserID = u.UserID,
|
||||
UserFIO = u.UserFIO,
|
||||
GroupID = group.ID
|
||||
}).ToList() ?? new List<UserDao>()
|
||||
};
|
||||
}
|
||||
|
||||
public bool RemoveGroupById(int groupID)
|
||||
{
|
||||
try
|
||||
{
|
||||
var group = _remoteDatabaseContext.Groups
|
||||
.FirstOrDefault(x => x.ID == groupID);
|
||||
if (group == null) return false;
|
||||
|
||||
if (group.Users != null && group.Users.Any())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
_remoteDatabaseContext.Groups.Remove(group);
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool UpdateGroupById(int groupID, string name)
|
||||
{
|
||||
try
|
||||
{
|
||||
var group = _remoteDatabaseContext.Groups
|
||||
.FirstOrDefault(x => x.ID == groupID);
|
||||
if (group == null) return false;
|
||||
|
||||
group.Name = name;
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
57
123/Data/Repository/SQLPresenceRepository.cs
Normal file
57
123/Data/Repository/SQLPresenceRepository.cs
Normal file
@ -0,0 +1,57 @@
|
||||
using _123.Data.LocalData;
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.RemoteData.RemoteDatabase;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.Repository
|
||||
{
|
||||
public class SQLPresenceRepositoryImpl : IPresenceRepository
|
||||
{
|
||||
private readonly RemoteDatabaseContext _remoteDatabaseContext;
|
||||
|
||||
public SQLPresenceRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
|
||||
{
|
||||
_remoteDatabaseContext = remoteDatabaseContext;
|
||||
}
|
||||
|
||||
public void AddPresence(PresenceDao presence)
|
||||
{
|
||||
_remoteDatabaseContext.PresencesDaos.Add(presence);
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
}
|
||||
|
||||
public List<PresenceDao> GetPresenceByGroup(int groupId)
|
||||
{
|
||||
return _remoteDatabaseContext.PresencesDaos
|
||||
.Where(p => p.GroupId == groupId)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<PresenceDao> GetPresenceByGroupAndDate(int groupId, DateOnly date)
|
||||
{
|
||||
return _remoteDatabaseContext.PresencesDaos
|
||||
.Where(p => p.GroupId == groupId && p.Date == date)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public bool UnCheckAttendence(int firstClass, int lastClass, DateOnly date, int userId)
|
||||
{
|
||||
var presToUpdate = _remoteDatabaseContext.PresencesDaos
|
||||
.Where(x => x.UserID == userId && x.LessonNumber >= firstClass
|
||||
&& x.LessonNumber <= lastClass && x.Date == date).ToList();
|
||||
|
||||
foreach (var presence in presToUpdate)
|
||||
{
|
||||
presence.IsAttedance = false;
|
||||
}
|
||||
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
93
123/Data/Repository/SQLUserRepository.cs
Normal file
93
123/Data/Repository/SQLUserRepository.cs
Normal file
@ -0,0 +1,93 @@
|
||||
using _123.Data.LocalData;
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.RemoteData.RemoteDatabase;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Data.Repository
|
||||
{
|
||||
public class SQLUserRepositoryImpl : IUserRepository
|
||||
{
|
||||
private readonly RemoteDatabaseContext _remoteDatabaseContext;
|
||||
|
||||
public SQLUserRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
|
||||
{
|
||||
_remoteDatabaseContext = remoteDatabaseContext;
|
||||
}
|
||||
|
||||
public UserDao FindUserById(int userId)
|
||||
{
|
||||
var user = _remoteDatabaseContext.Users
|
||||
.FirstOrDefault(x => x.UserID == userId);
|
||||
if (user == null) throw new Exception("Пользователь не найден");
|
||||
return user;
|
||||
}
|
||||
|
||||
public List<UserDao> GetAllUser()
|
||||
{
|
||||
return _remoteDatabaseContext.Users
|
||||
.Select(u => new UserDao
|
||||
{
|
||||
UserID = u.UserID,
|
||||
UserFIO = u.UserFIO,
|
||||
GroupID = u.GroupID,
|
||||
Group = u.Group
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public UserDao? GetUserById(int userId)
|
||||
{
|
||||
return _remoteDatabaseContext.Users
|
||||
.FirstOrDefault(x => x.UserID == userId);
|
||||
}
|
||||
|
||||
public bool RemoveUserById(int userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var user = _remoteDatabaseContext.Users
|
||||
.FirstOrDefault(x => x.UserID == userId);
|
||||
if (user == null) return false;
|
||||
|
||||
_remoteDatabaseContext.Users.Remove(user);
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public UserDao? UpdateUser(UserDao userUpdate)
|
||||
{
|
||||
try
|
||||
{
|
||||
var user = _remoteDatabaseContext.Users
|
||||
.FirstOrDefault(x => x.UserID == userUpdate.UserID);
|
||||
if (user == null) return null;
|
||||
|
||||
user.UserFIO = userUpdate.UserFIO;
|
||||
user.GroupID = userUpdate.GroupID;
|
||||
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return user;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public UserDao? UpdateUserById(int userId)
|
||||
{
|
||||
return _remoteDatabaseContext.Users
|
||||
.FirstOrDefault(x => x.UserID == userId);
|
||||
}
|
||||
}
|
||||
}
|
73
123/Data/Repository/UserRepositoty.cs
Normal file
73
123/Data/Repository/UserRepositoty.cs
Normal file
@ -0,0 +1,73 @@
|
||||
using _123.Data.LocalData;
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using _123.Data.Repository;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace _123.Data.ReportsHistory
|
||||
{
|
||||
public class UserRepositoryImpl: IUserRepository
|
||||
{
|
||||
public UserRepositoryImpl()
|
||||
{
|
||||
|
||||
GetAllUsers = LocalStaticData.users.Select(it => new UserDao { GroupID = it.GroupID, UserFIO = it.UserFIO, UserID = it.UserId}).ToList();
|
||||
}
|
||||
public List<UserDao> GetAllUsers
|
||||
{ get; set; }
|
||||
|
||||
public List<UserDao> GetAllUser()
|
||||
{
|
||||
return GetAllUsers;
|
||||
}
|
||||
public bool RemoveUserById(int userId)
|
||||
{
|
||||
UserDao? userLocal = GetAllUsers
|
||||
.Where(x => x.UserID == userId).FirstOrDefault();
|
||||
if (userLocal == null) return false;
|
||||
|
||||
return GetAllUsers.Remove(userLocal);
|
||||
}
|
||||
public UserDao FindUserById(int userId)
|
||||
{
|
||||
UserDao? userLocal = GetAllUsers
|
||||
.Where(x => x.UserID == userId).FirstOrDefault();
|
||||
if (userLocal == null) throw new Exception("Пользователь не найден");
|
||||
return userLocal;
|
||||
}
|
||||
|
||||
|
||||
public UserDao? GetUserById(int userId)
|
||||
{
|
||||
UserDao? userLocal = GetAllUsers
|
||||
.Where(x => x.UserID == userId).FirstOrDefault();
|
||||
if (userLocal == null) return null;
|
||||
|
||||
return userLocal;
|
||||
}
|
||||
|
||||
public UserDao? UpdateUser(UserDao userUpdateDao)
|
||||
{
|
||||
UserDao? userLocal = GetAllUsers
|
||||
.Where(x => x.UserID == userUpdateDao.UserID).FirstOrDefault();
|
||||
if (userLocal == null) return null;
|
||||
userLocal.UserFIO = userUpdateDao.UserFIO;
|
||||
userLocal.GroupID = userUpdateDao.GroupID;
|
||||
return userLocal;
|
||||
|
||||
}
|
||||
public UserDao? UpdateUserById(int userId)
|
||||
{
|
||||
UserDao? userLocal = GetAllUsers
|
||||
.Where(x => x.UserID == userId).FirstOrDefault();
|
||||
if (userLocal == null) return null;
|
||||
return userLocal;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -9,7 +9,13 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Data\RemoteData\" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkcore" Version="8.0.10" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkcore.Design" Version="8.0.10">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.10" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -9,7 +9,7 @@ namespace _123.Domain.Models
|
||||
public class User
|
||||
{
|
||||
public required string UserFIO { get; set; }
|
||||
public Guid UserGuid { get; set; }
|
||||
public int UserID { get; set; }
|
||||
|
||||
public required Group UserGroup { get; set; }
|
||||
}
|
||||
|
@ -6,31 +6,41 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using _123.Domain.Models;
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.Repository;
|
||||
|
||||
namespace _123.Domain.UseCase
|
||||
{
|
||||
public class GroupUseCase
|
||||
{
|
||||
private GroupRepositoryImpl _repositoryGroupImpl;
|
||||
public GroupUseCase(GroupRepositoryImpl repositoryGroupImpl)
|
||||
private readonly IGroupRepository _repositoryGroupImpl;
|
||||
public GroupUseCase(IGroupRepository repositoryGroupImpl)
|
||||
{
|
||||
_repositoryGroupImpl = repositoryGroupImpl;
|
||||
}
|
||||
public List<Group> GetAllGroups() => _repositoryGroupImpl.GetAllGroups()
|
||||
|
||||
public List<Group> GetAllGroups() => _repositoryGroupImpl.GetAllGroup()
|
||||
.Select(it => new Group { ID = it.ID, Name = it.Name }).ToList();
|
||||
|
||||
public Group UpdateGroupName(String name, String name1)
|
||||
public bool UpdateGroupName(string id, string name)
|
||||
{
|
||||
GroupLocalEntity? result = _repositoryGroupImpl.UpdateGroup(name);
|
||||
if (result == null) throw new Exception("");
|
||||
Group? group = GetAllGroups().FirstOrDefault(it => it.Name == result!.Name);
|
||||
if (group == null) throw new Exception("");
|
||||
return new Group { ID = group.ID, Name = name1 };
|
||||
return _repositoryGroupImpl.UpdateGroupById(int.Parse(id), name);
|
||||
}
|
||||
public GroupLocalEntity AddGroup(String name, string id)
|
||||
|
||||
public bool AddGroup(string name, string id)
|
||||
{
|
||||
return _repositoryGroupImpl.AddGroup(name, id);
|
||||
}
|
||||
|
||||
public Group GetGroupById(int id)
|
||||
{
|
||||
var group = _repositoryGroupImpl.GetGroupById(id);
|
||||
if (group == null) return null;
|
||||
return new Group { ID = group.ID, Name = group.Name };
|
||||
}
|
||||
|
||||
public bool RemoveGroupById(int id)
|
||||
{
|
||||
return _repositoryGroupImpl.RemoveGroupById(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
107
123/Domain/UseCase/PresenceUseCase.cs
Normal file
107
123/Domain/UseCase/PresenceUseCase.cs
Normal file
@ -0,0 +1,107 @@
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.ReportsHistory;
|
||||
using _123.Data.Repository;
|
||||
using _123.Domain.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Domain.UseCase
|
||||
{
|
||||
public class PresenceUseCase
|
||||
{
|
||||
private readonly IPresenceRepository _presenceRepositoryImpl;
|
||||
private readonly IGroupRepository _groupRepositoryImpl;
|
||||
private readonly IUserRepository _userRepositoryImpl;
|
||||
public List<Presence> GetPresenceByGroup(int groupId)
|
||||
{
|
||||
var users = _userRepositoryImpl.GetAllUser().Where(x => x.GroupID == groupId).ToList();
|
||||
|
||||
var presenceByGroup = _presenceRepositoryImpl.GetPresenceByGroup(groupId)
|
||||
.Where(x => users.Any(user => user.UserID == x.UserID))
|
||||
.Select(presence => new Presence
|
||||
{
|
||||
User = new User
|
||||
{
|
||||
UserID = presence.UserID,
|
||||
UserGroup = new Group
|
||||
{
|
||||
ID = groupId,
|
||||
Name = _groupRepositoryImpl.GetAllGroup().First(group => group.ID == groupId).Name
|
||||
},
|
||||
UserFIO = users.First(user => user.UserID == presence.UserID).UserFIO,
|
||||
},
|
||||
ClassNum = presence.LessonNumber,
|
||||
Date = presence.Date,
|
||||
IsAttedance = presence.IsAttedance,
|
||||
}).ToList();
|
||||
return (List<Presence>)presenceByGroup;
|
||||
}
|
||||
public List<Presence> GetPresenceByGroupAndDate(int groupId, DateOnly date)
|
||||
{
|
||||
var users = _userRepositoryImpl.GetAllUser().Where(x => x.GroupID == groupId).ToList();
|
||||
|
||||
var presenceByGroup = _presenceRepositoryImpl.GetPresenceByGroup(groupId)
|
||||
.Where(x => users.Any(user => user.UserID == x.UserID && x.Date == date))
|
||||
.Select(presence => new Presence
|
||||
{
|
||||
User = new User
|
||||
{
|
||||
UserID = presence.UserID,
|
||||
UserGroup = new Group
|
||||
{
|
||||
ID = groupId,
|
||||
Name = _groupRepositoryImpl.GetAllGroup().First(group => group.ID == groupId).Name
|
||||
},
|
||||
UserFIO = users.First(user => user.UserID == presence.UserID).UserFIO,
|
||||
},
|
||||
ClassNum = presence.LessonNumber,
|
||||
Date = presence.Date,
|
||||
IsAttedance = presence.IsAttedance,
|
||||
}).ToList();
|
||||
return presenceByGroup;
|
||||
}
|
||||
public bool UnCheckAttendance(int firstClass, int lastClass, DateOnly date, int userID)
|
||||
{
|
||||
return _presenceRepositoryImpl.UnCheckAttendence(firstClass, lastClass, date, userID);
|
||||
}
|
||||
|
||||
public Dictionary<string, int> GetPresenceStatsByGroup(int groupId)
|
||||
{
|
||||
var stats = new Dictionary<string, int>();
|
||||
|
||||
// Получаем всех студентов группы
|
||||
var users = _userRepositoryImpl.GetAllUser().Where(x => x.GroupID == groupId).ToList();
|
||||
stats["Количество студентов"] = users.Count;
|
||||
|
||||
// Получаем все записи посещаемости для группы
|
||||
var presences = _presenceRepositoryImpl.GetPresenceByGroup(groupId);
|
||||
|
||||
// Считаем количество уникальных занятий
|
||||
var uniqueLessons = presences
|
||||
.Select(p => new { p.Date, p.LessonNumber })
|
||||
.Distinct()
|
||||
.Count();
|
||||
stats["Количество занятий"] = uniqueLessons;
|
||||
|
||||
// Считаем общую посещаемость
|
||||
var totalAttendances = presences.Count(p => p.IsAttedance);
|
||||
var totalPossibleAttendances = users.Count * uniqueLessons;
|
||||
|
||||
if (totalPossibleAttendances > 0)
|
||||
{
|
||||
var attendancePercentage = (totalAttendances * 100) / totalPossibleAttendances;
|
||||
stats["Процент посещаемости"] = attendancePercentage;
|
||||
}
|
||||
else
|
||||
{
|
||||
stats["Процент посещаемости"] = 0;
|
||||
}
|
||||
|
||||
return stats;
|
||||
}
|
||||
}
|
||||
}
|
67
123/Domain/UseCase/UseCaseGeneratePresence.cs
Normal file
67
123/Domain/UseCase/UseCaseGeneratePresence.cs
Normal file
@ -0,0 +1,67 @@
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.ReportsHistory;
|
||||
using _123.Data.Repository;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.Domain.UseCase
|
||||
{
|
||||
public class UseCaseGeneratePresence
|
||||
{
|
||||
private readonly PresenceRepositoryImpl _presenceRepositoryImpl;
|
||||
private readonly GroupRepositoryImpl _groupRepositoryImpl;
|
||||
private readonly UserRepositoryImpl _userRepositoryImpl;
|
||||
|
||||
public UseCaseGeneratePresence(PresenceRepositoryImpl repositoryImpl,
|
||||
UserRepositoryImpl userRepositoryImpl,
|
||||
GroupRepositoryImpl groupRepositoryImpl)
|
||||
{
|
||||
_presenceRepositoryImpl = repositoryImpl;
|
||||
_userRepositoryImpl = userRepositoryImpl;
|
||||
_groupRepositoryImpl = groupRepositoryImpl;
|
||||
}
|
||||
|
||||
public void AddPrecence(int firstClass, int lastClass, int groupId, DateOnly date)
|
||||
{
|
||||
var users = _userRepositoryImpl.GetAllUser().Where(x => x.GroupID == groupId).ToList();
|
||||
List<PresenceLocalEntity> presence = new List<PresenceLocalEntity>();
|
||||
for (int i = firstClass; i < lastClass; i++)
|
||||
{
|
||||
foreach (var user in users)
|
||||
{
|
||||
PresenceLocalEntity pres = new PresenceLocalEntity { LessonNumber = i, UserID = user.UserID, Date = date };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void AddPresenceForWeek(int firstClass, int lastClass, int groupId, DateOnly startDate)
|
||||
{
|
||||
var users = _userRepositoryImpl.GetAllUser().Where(x => x.GroupID == groupId).ToList();
|
||||
List<PresenceLocalEntity> presence = new List<PresenceLocalEntity>();
|
||||
|
||||
for (int dayOffset = 0; dayOffset < 7; dayOffset++)
|
||||
{
|
||||
DateOnly date = startDate.AddDays(dayOffset);
|
||||
|
||||
for (int i = firstClass; i < lastClass; i++)
|
||||
{
|
||||
foreach (var user in users)
|
||||
{
|
||||
PresenceLocalEntity pres = new PresenceLocalEntity
|
||||
{
|
||||
LessonNumber = i,
|
||||
UserID = user.UserID,
|
||||
Date = date
|
||||
};
|
||||
presence.Add(pres);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
using _123.Data.LocalData.Entity;
|
||||
using _123.Data.RemoteData.RemoteDatabase.DAO;
|
||||
using _123.Data.ReportsHistory;
|
||||
using _123.Data.Repository;
|
||||
using _123.Domain.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -11,54 +13,68 @@ namespace _123.Domain.UseCase
|
||||
{
|
||||
public class UserUseCase
|
||||
{
|
||||
private UserRepositoryImpl _repositoryUserImpl;
|
||||
private GroupRepositoryImpl _repositoryGroupImpl;
|
||||
private readonly IUserRepository _repositoryUserImpl;
|
||||
private readonly IGroupRepository _repositoryGroupImpl;
|
||||
|
||||
public UserUseCase(UserRepositoryImpl repositoryImpl, GroupRepositoryImpl repositoryGroupImpl)
|
||||
public UserUseCase(IUserRepository repositoryImpl, IGroupRepository repositoryGroupImpl)
|
||||
{
|
||||
_repositoryUserImpl = repositoryImpl;
|
||||
_repositoryGroupImpl = repositoryGroupImpl;
|
||||
}
|
||||
|
||||
public List<Group> GetAllGroups() => _repositoryGroupImpl.GetAllGroups()
|
||||
public List<Group> GetAllGroups() => _repositoryGroupImpl.GetAllGroup()
|
||||
.Select(it => new Group { ID = it.ID, Name = it.Name }).ToList();
|
||||
public List<User> GetAllUsers() => _repositoryUserImpl.GetAllUsers
|
||||
.Join(_repositoryGroupImpl.GetAllGroups(),
|
||||
|
||||
public List<User> GetAllUsers() => _repositoryUserImpl.GetAllUser()
|
||||
.Join(_repositoryGroupImpl.GetAllGroup(),
|
||||
user => user.GroupID,
|
||||
group => group.ID,
|
||||
(user, group) =>
|
||||
new User
|
||||
{
|
||||
UserFIO = user.UserFIO,
|
||||
UserGuid = user.UserGuid,
|
||||
UserID = user.UserID,
|
||||
UserGroup = new Group { ID = group.ID, Name = group.Name }
|
||||
}
|
||||
).ToList();
|
||||
|
||||
public bool RemoveUserByGuid(Guid userGuid)
|
||||
public bool RemoveUserByGuid(int userId)
|
||||
{
|
||||
return _repositoryUserImpl.RemoveUserByGuid(userGuid);
|
||||
return _repositoryUserImpl.RemoveUserById(userId);
|
||||
}
|
||||
|
||||
public User UpdateUser(User user)
|
||||
{
|
||||
UserLocalEntity userLocalEnity = new UserLocalEntity { UserFIO = user.UserFIO, GroupID = user.UserGroup.ID, UserGuid = user.UserGuid };
|
||||
UserLocalEntity? result = _repositoryUserImpl.UpdateUser(userLocalEnity);
|
||||
if (result == null) throw new Exception("");
|
||||
Group? group = GetAllGroups().FirstOrDefault(it => it.ID == result!.GroupID);
|
||||
if (group == null) throw new Exception("");
|
||||
return new User { UserFIO = user.UserFIO, UserGuid = user.UserGuid, UserGroup = group };
|
||||
UserDao userDao = new UserDao {
|
||||
UserFIO = user.UserFIO,
|
||||
GroupID = user.UserGroup.ID,
|
||||
UserID = user.UserID
|
||||
};
|
||||
UserDao? result = _repositoryUserImpl.UpdateUser(userDao);
|
||||
if (result == null) throw new Exception("Не удалось обновить пользователя");
|
||||
Group? group = GetAllGroups().FirstOrDefault(it => it.ID == result.GroupID);
|
||||
if (group == null) throw new Exception("Группа не найдена");
|
||||
return new User { UserFIO = user.UserFIO, UserID = user.UserID, UserGroup = group };
|
||||
}
|
||||
public UserLocalEntity FindUserByGuid(Guid userGuid)
|
||||
|
||||
public User FindUserByGuid(int userId)
|
||||
{
|
||||
return _repositoryUserImpl.FindUserByGuid(userGuid);
|
||||
var userDao = _repositoryUserImpl.FindUserById(userId);
|
||||
return new User
|
||||
{
|
||||
UserID = userDao.UserID,
|
||||
UserFIO = userDao.UserFIO,
|
||||
UserGroup = GetAllGroups().FirstOrDefault(g => g.ID == userDao.GroupID)
|
||||
};
|
||||
}
|
||||
public UserLocalEntity UpdateUserByGuid(Guid userGuid, String name, String gro)
|
||||
|
||||
public UserDao UpdateUserByGuid(int userId, string name, string groupId)
|
||||
{
|
||||
UserLocalEntity? result = _repositoryUserImpl.UpdateUserByGuid(userGuid);
|
||||
if (result == null) throw new Exception("");
|
||||
Group? group = GetAllGroups().FirstOrDefault(it => it.ID == int.Parse(gro));
|
||||
if (group == null) throw new Exception("");
|
||||
return new UserLocalEntity { UserFIO = name, GroupID = int.Parse(gro), UserGuid = userGuid};
|
||||
UserDao? result = _repositoryUserImpl.UpdateUserById(userId);
|
||||
if (result == null) throw new Exception("Пользователь не найден");
|
||||
Group? group = GetAllGroups().FirstOrDefault(it => it.ID == int.Parse(groupId));
|
||||
if (group == null) throw new Exception("Группа не найдена");
|
||||
return new UserDao { UserFIO = name, GroupID = int.Parse(groupId), UserID = userId };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,22 @@
|
||||
using _123.Data.ReportsHistory;
|
||||
using _123.Data.RemoteData.RemoteDatabase;
|
||||
using _123.Data.ReportsHistory;
|
||||
using _123.Data.Repository;
|
||||
using _123.Domain.UseCase;
|
||||
using _123.UI;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
GroupRepositoryImpl groupRepositoryImpl = new GroupRepositoryImpl();
|
||||
UserRepositoryImpl userRepositoryImpl = new UserRepositoryImpl();
|
||||
UserUseCase userUseCase = new UserUseCase(userRepositoryImpl, groupRepositoryImpl);
|
||||
GroupUseCase groupUseCase = new GroupUseCase(groupRepositoryImpl);
|
||||
IServiceCollection services = new ServiceCollection();
|
||||
services
|
||||
.AddSingleton<UserUseCase>()
|
||||
.AddSingleton<GroupUseCase>()
|
||||
.AddSingleton<PresenceUseCase>()
|
||||
.AddSingleton<MainMenuUI>()
|
||||
.AddDbContext<RemoteDatabaseContext>()
|
||||
.AddSingleton<IPresenceRepository, SQLPresenceRepositoryImpl>()
|
||||
.AddSingleton<IUserRepository, SQLUserRepositoryImpl>()
|
||||
.AddSingleton<IGroupRepository, SQLGroupRepositoryImpl>();
|
||||
var serviceProvider = services.BuildServiceProvider ();
|
||||
|
||||
var mainMenuUI = serviceProvider.GetRequiredService<MainMenuUI>();
|
||||
|
||||
MainMenuUI mainMenuUI = new MainMenuUI(userUseCase, groupUseCase);
|
@ -28,20 +28,13 @@ namespace _123.UI
|
||||
{
|
||||
StringBuilder groupOutput = new StringBuilder();
|
||||
var group = _groupUseCase.UpdateGroupName(name,name1);
|
||||
{
|
||||
groupOutput.AppendLine($"{group.Name}\t{group.ID}");
|
||||
}
|
||||
Console.WriteLine(groupOutput);
|
||||
}
|
||||
public void AddGroup (String name, String id)
|
||||
{
|
||||
StringBuilder groupOutput = new StringBuilder();
|
||||
var group = _groupUseCase.AddGroup(name,id);
|
||||
{
|
||||
groupOutput.AppendLine($"{group.Name}\t{group.ID}");
|
||||
}
|
||||
Console.WriteLine(groupOutput);
|
||||
string output = _groupUseCase.AddGroup(name , id) ? "Группа добавлена" : "Группа не добавлена";
|
||||
Console.WriteLine(output);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -14,10 +14,13 @@ namespace _123.UI
|
||||
|
||||
GroupConsoleUI _groupConsoleUI;
|
||||
|
||||
public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase)
|
||||
PresenceConsoleUI _presenceConsoleUI;
|
||||
|
||||
public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, PresenceUseCase presenceUseCase)
|
||||
{
|
||||
_userConsoleUI = new UserConsoleUI(userUseCase);
|
||||
_groupConsoleUI = new GroupConsoleUI(groupUseCase);
|
||||
_presenceConsoleUI = new PresenceConsoleUI(presenceUseCase);
|
||||
|
||||
DisplayMenu();
|
||||
|
||||
@ -30,12 +33,17 @@ namespace _123.UI
|
||||
switch (Console.ReadLine())
|
||||
{
|
||||
case "1": _userConsoleUI.DisplayAllUsers(); break;
|
||||
case "2": _userConsoleUI.RemoveUserByGuid(Guid.Parse(Console.ReadLine())); break;
|
||||
case "2": _userConsoleUI.RemoveUserById(int.Parse(Console.ReadLine())); break;
|
||||
case "3": _groupConsoleUI.DisplayAllGroups(); break;
|
||||
case "4": _userConsoleUI.FindUserByGuid(Guid.Parse(Console.ReadLine()));break;
|
||||
case "5": _userConsoleUI.UpdateUserByGuid(Guid.Parse(Console.ReadLine()),Console.ReadLine(), Console.ReadLine()); break;
|
||||
case "6": _groupConsoleUI.UpdateGroupName(Console.ReadLine(),Console.ReadLine()); break;
|
||||
case "7": _groupConsoleUI.AddGroup(Console.ReadLine(), Console.ReadLine());break;
|
||||
case "4": _userConsoleUI.FindUserById(int.Parse(Console.ReadLine())); break;
|
||||
case "5": _userConsoleUI.UpdateUserById(int.Parse(Console.ReadLine()), Console.ReadLine(), Console.ReadLine()); break;
|
||||
case "6": _groupConsoleUI.UpdateGroupName(Console.ReadLine(), Console.ReadLine()); break;
|
||||
case "7": _groupConsoleUI.AddGroup(Console.ReadLine(), Console.ReadLine()); break;
|
||||
case "8": _presenceConsoleUI.GetPresenceByGroup(int.Parse(Console.ReadLine())); break;
|
||||
case "9": _presenceConsoleUI.GetPresenceByGroupAndDAte(int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine())); break;
|
||||
case "10": _presenceConsoleUI.UnCheckAttendence(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine()), int.Parse(Console.ReadLine())); break;
|
||||
case "11": _presenceConsoleUI.AddPresence(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine())); break;
|
||||
|
||||
default:
|
||||
DisplayMenu();
|
||||
break;
|
||||
|
100
123/UI/PresenceConsole.cs
Normal file
100
123/UI/PresenceConsole.cs
Normal file
@ -0,0 +1,100 @@
|
||||
using _123.Domain.UseCase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _123.UI
|
||||
{
|
||||
public class PresenceConsoleUI
|
||||
{
|
||||
PresenceUseCase _presenceUseCase;
|
||||
UseCaseGeneratePresence _useCaseGeneratePresence;
|
||||
private PresenceUseCase presenceUseCase;
|
||||
|
||||
public PresenceConsoleUI(PresenceUseCase presenceUseCase, UseCaseGeneratePresence useCaseGeneratePresence)
|
||||
{
|
||||
_presenceUseCase = presenceUseCase;
|
||||
_useCaseGeneratePresence = useCaseGeneratePresence;
|
||||
}
|
||||
|
||||
public PresenceConsoleUI(PresenceUseCase presenceUseCase)
|
||||
{
|
||||
this.presenceUseCase = presenceUseCase;
|
||||
}
|
||||
|
||||
public void GetPresenceByGroup(int groupId)
|
||||
{
|
||||
StringBuilder presenceOutput = new StringBuilder();
|
||||
var presence = _presenceUseCase.GetPresenceByGroup(groupId);
|
||||
foreach (var p in presence)
|
||||
{
|
||||
presenceOutput.AppendLine($"{p.ClassNum}\t{p.User}\t{p.Date}");
|
||||
}
|
||||
Console.WriteLine(presenceOutput);
|
||||
}
|
||||
|
||||
public void GetPresenceByGroupAndDAte(int groupId, DateOnly date)
|
||||
{
|
||||
StringBuilder presenceOutput = new StringBuilder();
|
||||
var presence = _presenceUseCase.GetPresenceByGroupAndDate(groupId, date);
|
||||
foreach (var p in presence)
|
||||
{
|
||||
presenceOutput.AppendLine($"{p.ClassNum}\t{p.User}\t{p.Date}");
|
||||
}
|
||||
Console.WriteLine(presenceOutput);
|
||||
}
|
||||
|
||||
public void UnCheckAttendence(int firstClass, int lastClass, DateOnly date, int userId)
|
||||
{
|
||||
var result = _presenceUseCase.UnCheckAttendance(firstClass, lastClass, date, userId);
|
||||
Console.WriteLine(result ? "Посещаемость успешно обновлена" : "Ошибка при обновлении посещаемости");
|
||||
}
|
||||
|
||||
public void AddPresence(int firstClass, int lastClass, int groupId, DateOnly date)
|
||||
{
|
||||
try
|
||||
{
|
||||
_useCaseGeneratePresence.AddPrecence(firstClass, lastClass, groupId, date);
|
||||
Console.WriteLine("Посещаемость успешно добавлена");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Ошибка при добавлении посещаемости: {ex.Message}");
|
||||
}
|
||||
}
|
||||
public void GetPresenceStatsByGroup(int groupId)
|
||||
{
|
||||
var stats = _presenceUseCase.GetPresenceStatsByGroup(groupId);
|
||||
StringBuilder output = new StringBuilder();
|
||||
|
||||
output.AppendLine($"Информация о группе {groupId}:");
|
||||
output.AppendLine($"Количество студентов: {stats["Количество студентов"]}");
|
||||
output.AppendLine($"Количество занятий: {stats["Количество занятий"]}");
|
||||
output.AppendLine($"Общий процент посещаемости: {stats["Процент посещаемости"]}%");
|
||||
output.AppendLine("\nСтатистика по студентам:");
|
||||
|
||||
var presence = _presenceUseCase.GetPresenceByGroup(groupId);
|
||||
var students = presence.GroupBy(p => p.User)
|
||||
.Select(g => new {
|
||||
Student = g.Key,
|
||||
Total = stats["Количество занятий"],
|
||||
Attended = g.Count(p => p.IsAttedance),
|
||||
Missed = stats["Количество занятий"] - g.Count(p => p.IsAttedance),
|
||||
Percentage = (g.Count(p => p.IsAttedance) * 100) / stats["Количество занятий"]
|
||||
});
|
||||
|
||||
foreach (var student in students)
|
||||
{
|
||||
output.AppendLine($"\nСтудент: {student.Student.UserFIO}");
|
||||
output.AppendLine($"Посещено занятий: {student.Attended}");
|
||||
output.AppendLine($"Пропущено занятий: {student.Missed}");
|
||||
output.AppendLine($"Процент посещаемости: {student.Percentage}%");
|
||||
}
|
||||
|
||||
Console.WriteLine(output.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -17,10 +17,9 @@ namespace _123.UI
|
||||
_userUseCase = userUseCase;
|
||||
}
|
||||
|
||||
public void RemoveUserByGuid(Guid guidUser)
|
||||
public void RemoveUserById(int userId)
|
||||
{
|
||||
|
||||
string output = _userUseCase.RemoveUserByGuid(guidUser) ? "Пользователь удален" : "Пользователь не удален";
|
||||
string output = _userUseCase.RemoveUserByGuid(userId) ? "Пользователь удален" : "Пользователь не удален";
|
||||
Console.WriteLine(output);
|
||||
}
|
||||
|
||||
@ -29,27 +28,43 @@ namespace _123.UI
|
||||
StringBuilder userOutput = new StringBuilder();
|
||||
foreach (var user in _userUseCase.GetAllUsers())
|
||||
{
|
||||
userOutput.AppendLine($"{user.UserGuid}\t{user.UserFIO}\t{user.UserGroup.Name}");
|
||||
userOutput.AppendLine($"{user.UserID}\t{user.UserFIO}\t{user.UserGroup.Name}");
|
||||
}
|
||||
Console.WriteLine(userOutput);
|
||||
}
|
||||
public void FindUserByGuid (Guid guidUser)
|
||||
|
||||
public void FindUserById(int userId)
|
||||
{
|
||||
StringBuilder userOutput = new StringBuilder();
|
||||
var user = _userUseCase.FindUserByGuid(guidUser);
|
||||
{
|
||||
userOutput.AppendLine($"{user.UserGuid}\t{user.UserFIO}\t{user.GroupID}");
|
||||
}
|
||||
var user = _userUseCase.FindUserByGuid(userId);
|
||||
userOutput.AppendLine($"{user.UserID}\t{user.UserFIO}\t{user.UserGroup}");
|
||||
Console.WriteLine(userOutput);
|
||||
}
|
||||
public void UpdateUserByGuid(Guid userGuid,String name,String group)
|
||||
|
||||
public void UpdateUserById(int userId, String name, String groupId)
|
||||
{
|
||||
StringBuilder userOutput = new StringBuilder();
|
||||
var user = _userUseCase.UpdateUserByGuid(userGuid,name,group);
|
||||
try
|
||||
{
|
||||
userOutput.AppendLine($"{user.UserGuid}\t{user.UserFIO}\t{user.GroupID}");
|
||||
var group = _userUseCase.GetAllGroups().FirstOrDefault(g => g.ID == int.Parse(groupId));
|
||||
if (group == null)
|
||||
{
|
||||
Console.WriteLine("Группа не найдена");
|
||||
return;
|
||||
}
|
||||
|
||||
var updatedUser = _userUseCase.UpdateUser(new User
|
||||
{
|
||||
UserID = userId,
|
||||
UserFIO = name,
|
||||
UserGroup = group
|
||||
});
|
||||
|
||||
Console.WriteLine($"Пользователь обновлен: {updatedUser.UserID}\t{updatedUser.UserFIO}\t{updatedUser.UserGroup.Name}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Ошибка при обновлении пользователя: {ex.Message}");
|
||||
}
|
||||
Console.WriteLine(userOutput);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
BIN
Загрузки - Ярлык.lnk
Normal file
BIN
Загрузки - Ярлык.lnk
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user