Compare commits
No commits in common. "develop" and "master" have entirely different histories.
0
Data/Entity/Group.cs → Data/LocalData/Entity/Group.cs
Executable file → Normal file
0
Data/Entity/Group.cs → Data/LocalData/Entity/Group.cs
Executable file → Normal file
4
Data/Entity/Presence.cs → Data/LocalData/Entity/Presence.cs
Executable file → Normal file
4
Data/Entity/Presence.cs → Data/LocalData/Entity/Presence.cs
Executable file → Normal file
@ -7,9 +7,9 @@ using System.Threading.Tasks;
|
||||
namespace Posechaemost.Data.LocalData.Entity
|
||||
{
|
||||
public class PresenceLocalEntity{
|
||||
public required DateOnly Date {get; set;}
|
||||
public DateOnly Date {get; set;}
|
||||
public int ClassNumber {get; set;}
|
||||
public bool IsAttendence {get; set;} = true;
|
||||
public bool IsAttendence {get; set;}
|
||||
public required Guid UserGuid {get; set;}
|
||||
}
|
||||
}
|
0
Data/Entity/User.cs → Data/LocalData/Entity/User.cs
Executable file → Normal file
0
Data/Entity/User.cs → Data/LocalData/Entity/User.cs
Executable file → Normal file
9
Data/LocalData/LocalStaticData.cs
Executable file → Normal file
9
Data/LocalData/LocalStaticData.cs
Executable file → Normal file
@ -18,7 +18,7 @@ namespace Posechaemost.Data.LocalData
|
||||
new GroupLocalEntity{ Id = 3, Name = "ИП1-23" },
|
||||
};
|
||||
|
||||
public static List<UserLocalEntity> users => new List<UserLocalEntity>
|
||||
public static List<UserLocalEntity> users => new List<UserLocalEntity>
|
||||
{
|
||||
new UserLocalEntity{Guid=Guid.Parse("e6b9964d-ea9f-420a-84b9-af9633bbfab9"), FIO = "RandomFio", GroupID = 1 },
|
||||
new UserLocalEntity{Guid=Guid.Parse("8388d931-5bef-41be-a152-78f1aca980ed"), FIO = "RandomFio1", GroupID = 2 },
|
||||
@ -27,12 +27,5 @@ namespace Posechaemost.Data.LocalData
|
||||
new UserLocalEntity{Guid=Guid.Parse("efcc1473-c116-4244-b3f7-f2341a5c3003"), FIO = "RandomFio4", GroupID = 2 },
|
||||
new UserLocalEntity{Guid=Guid.Parse("60640fb3-ace2-4cad-81d5-a0a58bc2dbbd"), FIO = "RandomFio5", GroupID = 3 },
|
||||
};
|
||||
|
||||
public static List<PresenceLocalEntity> presences = new List<PresenceLocalEntity>
|
||||
{
|
||||
new PresenceLocalEntity{Date= new DateOnly(2024, 12, 31), ClassNumber=1, UserGuid = Guid.Parse("e6b9964d-ea9f-420a-84b9-af9633bbfab9")},
|
||||
new PresenceLocalEntity{Date= new DateOnly(2024, 12, 31), ClassNumber=2, UserGuid = Guid.Parse("e6b9964d-ea9f-420a-84b9-af9633bbfab9")},
|
||||
new PresenceLocalEntity{Date= new DateOnly(2024, 12, 31), ClassNumber=3, IsAttendence=false, UserGuid = Guid.Parse("e6b9964d-ea9f-420a-84b9-af9633bbfab9")}
|
||||
};
|
||||
}
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Posechaemost.Data.RemoteData.RemoteDataBase.DAO
|
||||
{
|
||||
public class GroupDao
|
||||
{
|
||||
public int Id {get; set;}
|
||||
public required string Name {get; set;}
|
||||
|
||||
public IEnumerable<UserDao> User {get; set;}
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Posechaemost.Data.RemoteData.RemoteDataBase.DAO
|
||||
{
|
||||
public class PresenceDao
|
||||
{
|
||||
public int PresenceId { get; set; }
|
||||
public DateOnly Date {get; set;}
|
||||
public int ClassNumber {get; set;}
|
||||
public bool IsAttendence {get; set;} = true;
|
||||
public int UserId {get; set;}
|
||||
public UserDao User {get; set;}
|
||||
public int GroupId {get; set;}
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Posechaemost.Data.RemoteData.RemoteDataBase.DAO
|
||||
{
|
||||
public class UserDao
|
||||
{
|
||||
public required string FIO {get; set; }
|
||||
|
||||
public int UserId { get; set; }
|
||||
public required int GroupId {get; set;}
|
||||
public GroupDao Group {get; set;}
|
||||
public IEnumerable<PresenceDao> Presences { get; set; }
|
||||
}
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase.DAO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Posechaemost.Data.RemoteData.RemoteDataBase
|
||||
{
|
||||
public class RemoteDataBaseContext: DbContext
|
||||
{
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){
|
||||
optionsBuilder.UseNpgsql("Host=localhost; Port=5432; Database=presencedb; Username=postgres; Password=123");
|
||||
}
|
||||
|
||||
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 =>presence.PresenceId);
|
||||
modelBuilder.Entity<PresenceDao>().Property(presence=>presence.PresenceId).ValueGeneratedOnAdd();
|
||||
modelBuilder.Entity<PresenceDao>()
|
||||
.HasOne(presence => presence.User)
|
||||
.WithMany(user => user.Presences)
|
||||
.HasForeignKey(presence => presence.UserId);
|
||||
}
|
||||
|
||||
|
||||
public DbSet<GroupDao> Groups { get; set; }
|
||||
public DbSet<UserDao> Users { get; set; }
|
||||
public DbSet<PresenceDao> Presences { get; set; }
|
||||
}
|
||||
}
|
107
Data/Repository/GroupRepositoryImpl.cs
Executable file → Normal file
107
Data/Repository/GroupRepositoryImpl.cs
Executable file → Normal file
@ -1,92 +1,85 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Posechaemost.Data.LocalData;
|
||||
using Posechaemost.Data.LocalData.Entity;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase.DAO;
|
||||
|
||||
namespace Posechaemost.Data.Repository
|
||||
{
|
||||
public class SQLGroupRepositoryImpl : IGroupRepository
|
||||
public class GroupRepositoryImpl: IGroupRepository
|
||||
{
|
||||
private readonly RemoteDataBaseContext _remoteDatabaseContext;
|
||||
|
||||
public SQLGroupRepositoryImpl(RemoteDataBaseContext remoteDatabaseContext)
|
||||
public bool AddGroup(String name, String id)
|
||||
{
|
||||
_remoteDatabaseContext = remoteDatabaseContext;
|
||||
}
|
||||
|
||||
public bool AddGroup(GroupDao group)
|
||||
{
|
||||
var groupDao = new GroupDao
|
||||
{
|
||||
Name = group.Name
|
||||
};
|
||||
_remoteDatabaseContext.Groups.Add(groupDao);
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
GroupLocalEntity? groupLocal = GetAllGroups().FirstOrDefault();
|
||||
// GroupLocalEntity? group = new GroupLocalEntity();
|
||||
groupLocal.Name = name;
|
||||
groupLocal.Id = int.Parse(id);
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<GroupDao> GetAllGroup()
|
||||
public List<GroupLocalEntity> GetAllGroup()
|
||||
{
|
||||
return _remoteDatabaseContext.Groups
|
||||
.Include(g => g.User)
|
||||
.Select(g => new GroupDao
|
||||
{
|
||||
Name = g.Name,
|
||||
Id = g.Id,
|
||||
User = g.User.Select(u => new UserDao
|
||||
{
|
||||
UserId = u.UserId,
|
||||
FIO = u.FIO,
|
||||
GroupId = u.GroupId,
|
||||
}).ToList()
|
||||
}).ToList();
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public GroupDao GetGroupById(int groupID)
|
||||
public List<GroupLocalEntity> GetAllGroups() => LocalStaticData.groups;
|
||||
|
||||
public GroupLocalEntity GetGroupById(int groupID)
|
||||
{
|
||||
var groupLocal = _remoteDatabaseContext.Groups
|
||||
.Where(g => g.Id == groupID).FirstOrDefault();
|
||||
GroupLocalEntity groupLocal = GetAllGroups()
|
||||
.Where(x => x.Id == groupID).FirstOrDefault();
|
||||
if (groupLocal == null) return null;
|
||||
return groupLocal;
|
||||
}
|
||||
|
||||
public bool RemoveGroupById(int groupID)
|
||||
{
|
||||
var groupLocal = _remoteDatabaseContext.Groups
|
||||
public bool RemoveGroupById(int groupID){
|
||||
GroupLocalEntity? groupLocal = GetAllGroups()
|
||||
.Where(x => x.Id == groupID).FirstOrDefault();
|
||||
if (groupLocal == null) return false;
|
||||
|
||||
_remoteDatabaseContext.Groups.Remove(groupLocal);
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
return GetAllGroups().Remove(groupLocal);
|
||||
}
|
||||
// public GroupLocalEntity? AddGroup(String name, String id) //не работает
|
||||
// {
|
||||
// GroupLocalEntity? groupLocal = GetAllGroups()
|
||||
// .Where(x => x.Id == groupID).FirstOrDefault();
|
||||
// if (groupLocal == null) return false;
|
||||
|
||||
public bool UpdateGroupById(int groupID, string name)
|
||||
// return GetAllGroups().Remove(groupLocal);
|
||||
// }
|
||||
|
||||
public bool UpdateGroupById(int groupID, String name)
|
||||
{
|
||||
var groupLocal = _remoteDatabaseContext.Groups
|
||||
.Include(g => g.User)
|
||||
.Where(x => x.Id == groupID).FirstOrDefault();
|
||||
GroupLocalEntity? groupLocal = GetAllGroups()
|
||||
.Where(x => x.Id == groupID).FirstOrDefault();
|
||||
if (groupLocal == null) return false;
|
||||
|
||||
groupLocal.Name = name;
|
||||
|
||||
groupLocal.User = _remoteDatabaseContext.Users
|
||||
.Where(x => x.GroupId == groupLocal.Id)
|
||||
.Select(user => new UserDao
|
||||
{
|
||||
UserId = user.UserId,
|
||||
FIO = user.FIO,
|
||||
GroupId = user.GroupId
|
||||
}).ToList();
|
||||
|
||||
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// {
|
||||
// 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();
|
||||
// // GroupLocalEntity? group = new GroupLocalEntity(name, id);
|
||||
// groupLocal.Name = name;
|
||||
// groupLocal.Id = int.Parse(id);
|
||||
// return groupLocal;
|
||||
// }
|
||||
// }
|
7
Data/Repository/IGroupRepository.cs
Executable file → Normal file
7
Data/Repository/IGroupRepository.cs
Executable file → Normal file
@ -4,15 +4,14 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Posechaemost.Data.LocalData.Entity;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase.DAO;
|
||||
|
||||
namespace Posechaemost.Data.Repository {
|
||||
public interface IGroupRepository
|
||||
{
|
||||
List<GroupDao> GetAllGroup();
|
||||
List<GroupLocalEntity> GetAllGroup();
|
||||
bool RemoveGroupById(int groupID);
|
||||
bool UpdateGroupById(int groupID, String name);
|
||||
GroupDao GetGroupById(int groupID);
|
||||
bool AddGroup(GroupDao group);
|
||||
GroupLocalEntity GetGroupById(int groupID);
|
||||
bool AddGroup(String name, String id);
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Posechaemost.Data.LocalData.Entity;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase.DAO;
|
||||
using Posechaemost.Domain.Models;
|
||||
|
||||
namespace Posechaemost.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);
|
||||
bool AddPresence(PresenceDao presence);
|
||||
|
||||
}
|
||||
}
|
11
Data/Repository/IUserRepository.cs
Executable file → Normal file
11
Data/Repository/IUserRepository.cs
Executable file → Normal file
@ -4,15 +4,14 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Posechaemost.Data.LocalData.Entity;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase.DAO;
|
||||
|
||||
namespace Posechaemost.Data.Repository {
|
||||
public interface IUserRepository
|
||||
{
|
||||
List<UserDao> GetAllUser();
|
||||
bool RemoveUserById(int usesId);
|
||||
UserDao GetUserById(int userId);
|
||||
bool UpdateUser(UserDao userUpdate);
|
||||
bool UpdateUserById(int userId, string fio, int groupId);
|
||||
List<UserLocalEntity> GetAllUser();
|
||||
bool RemoveUserByGuid(Guid userGuid);
|
||||
UserLocalEntity? GetUserByGuid(Guid userGuid);
|
||||
UserLocalEntity? UpdateUser(UserLocalEntity userUpdateLocalEnity);
|
||||
UserLocalEntity? UpdateUserByGuid(Guid userGuid);
|
||||
}
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Posechaemost.Data.LocalData;
|
||||
using Posechaemost.Data.LocalData.Entity;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase.DAO;
|
||||
using Posechaemost.Domain.Models;
|
||||
|
||||
namespace Posechaemost.Data.Repository
|
||||
{
|
||||
public class SQLPresenceRepositoryImpl: IPresenceRepository
|
||||
{
|
||||
private readonly RemoteDataBaseContext _remoteDatabaseContext;
|
||||
|
||||
public SQLPresenceRepositoryImpl(RemoteDataBaseContext remoteDatabaseContext)
|
||||
{
|
||||
_remoteDatabaseContext = remoteDatabaseContext;
|
||||
}
|
||||
|
||||
public bool AddPresence(PresenceDao presence)
|
||||
{
|
||||
var presenceDao = new PresenceDao
|
||||
{
|
||||
Date = presence.Date,
|
||||
ClassNumber = presence.ClassNumber,
|
||||
UserId = presence.UserId,
|
||||
User = presence.User
|
||||
};
|
||||
_remoteDatabaseContext.Presences.Add(presenceDao);
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<PresenceDao> GetPresenceByGroup(int groupId)
|
||||
{
|
||||
var listPresences = _remoteDatabaseContext.Presences
|
||||
.Where(x => x.GroupId == groupId).ToList();
|
||||
return listPresences;
|
||||
}
|
||||
|
||||
public List<PresenceDao> GetPresenceByGroupAndDate(int groupId, DateOnly date)
|
||||
{
|
||||
var listPresences = _remoteDatabaseContext.Presences
|
||||
.Where(x => x.GroupId == groupId && x.Date == date).ToList();
|
||||
return listPresences;
|
||||
}
|
||||
|
||||
public bool UncheckAttendence(int firstClass, int lastClass, DateOnly date, int userId)
|
||||
{
|
||||
var presToUpdate = _remoteDatabaseContext.Presences
|
||||
.Where(x => x.UserId == userId && x.ClassNumber >= firstClass
|
||||
&& x.ClassNumber <= lastClass && x.Date == date).ToList();
|
||||
|
||||
foreach (var pres in presToUpdate) {
|
||||
pres.IsAttendence = false;
|
||||
}
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
69
Data/Repository/UserRepositoryImpl.cs
Executable file → Normal file
69
Data/Repository/UserRepositoryImpl.cs
Executable file → Normal file
@ -3,73 +3,58 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Posechaemost.Data.LocalData;
|
||||
using Posechaemost.Data.LocalData.Entity;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase.DAO;
|
||||
|
||||
namespace Posechaemost.Data.Repository
|
||||
{
|
||||
public class SQLUserRepositoryImpl: IUserRepository
|
||||
public class UserRepositoryImpl: IUserRepository
|
||||
{
|
||||
private readonly RemoteDataBaseContext _remoteDatabaseContext;
|
||||
public SQLUserRepositoryImpl(RemoteDataBaseContext remoteDatabaseContext)
|
||||
{
|
||||
_remoteDatabaseContext = remoteDatabaseContext;
|
||||
public UserRepositoryImpl() {
|
||||
|
||||
GetAllUsers = LocalStaticData.users;
|
||||
}
|
||||
|
||||
public List<UserDao> GetAllUser()
|
||||
public List<UserLocalEntity> GetAllUser()
|
||||
{
|
||||
return _remoteDatabaseContext.Users.Select(u => new UserDao
|
||||
{
|
||||
FIO = u.FIO,
|
||||
UserId = u.UserId,
|
||||
GroupId = u.GroupId
|
||||
}).ToList();
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public List<UserLocalEntity> GetAllUsers
|
||||
{ get; set; }
|
||||
|
||||
public bool RemoveUserById(int userId)
|
||||
public bool RemoveUserByGuid(Guid userGuid)
|
||||
{
|
||||
var userLocal = _remoteDatabaseContext.Users
|
||||
.Where(x => x.UserId== userId).FirstOrDefault();
|
||||
UserLocalEntity? userLocal = GetAllUsers
|
||||
.Where(x => x.Guid == userGuid).FirstOrDefault();
|
||||
if (userLocal == null) return false;
|
||||
|
||||
_remoteDatabaseContext.Users.Remove(userLocal);
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
return GetAllUsers.Remove(userLocal);
|
||||
}
|
||||
|
||||
public UserDao GetUserById (int userId) {
|
||||
var userLocal = _remoteDatabaseContext.Users
|
||||
.Where(x => x.UserId == userId).FirstOrDefault();
|
||||
public UserLocalEntity? GetUserByGuid(Guid userGuid) {
|
||||
UserLocalEntity? userLocal = GetAllUsers
|
||||
.Where(x => x.Guid == userGuid).FirstOrDefault();
|
||||
if (userLocal == null) return null;
|
||||
|
||||
return userLocal;
|
||||
}
|
||||
|
||||
public bool UpdateUser(UserDao userUpdate) {
|
||||
var userLocal = _remoteDatabaseContext.Users
|
||||
.Where(x => x.UserId == userUpdate.UserId).FirstOrDefault();
|
||||
if (userLocal == null) return false;
|
||||
userLocal.FIO = userUpdate.FIO;
|
||||
userLocal.GroupId = userUpdate.GroupId;
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
return true;
|
||||
public UserLocalEntity? UpdateUser(UserLocalEntity userUpdateLocalEnity) {
|
||||
UserLocalEntity? userLocal = GetAllUsers
|
||||
.Where(x => x.Guid == userUpdateLocalEnity.Guid).FirstOrDefault();
|
||||
if (userLocal == null) return null;
|
||||
userLocal.FIO = userUpdateLocalEnity.FIO;
|
||||
userLocal.GroupID = userUpdateLocalEnity.GroupID;
|
||||
return userLocal;
|
||||
|
||||
}
|
||||
|
||||
public bool UpdateUserById(int userId, string fio, int groupId) {
|
||||
var userLocal = _remoteDatabaseContext.Users
|
||||
.Where(x => x.UserId == userId).FirstOrDefault();
|
||||
if (userLocal == null) return false;
|
||||
|
||||
userLocal.FIO = fio;
|
||||
userLocal.GroupId = groupId;
|
||||
_remoteDatabaseContext.SaveChanges();
|
||||
|
||||
return true;
|
||||
public UserLocalEntity? UpdateUserByGuid(Guid userGuid) {
|
||||
UserLocalEntity? userLocal = GetAllUsers
|
||||
.Where(x => x.Guid == userGuid).FirstOrDefault();
|
||||
if (userLocal == null) return null;
|
||||
return userLocal;
|
||||
}
|
||||
}
|
||||
}
|
0
Domain/Models/Group.cs
Executable file → Normal file
0
Domain/Models/Group.cs
Executable file → Normal file
2
Domain/Models/Presence.cs
Executable file → Normal file
2
Domain/Models/Presence.cs
Executable file → Normal file
@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
||||
namespace Posechaemost.Domain.Models
|
||||
{
|
||||
public class Presence{
|
||||
public required DateOnly Date {get; set;}
|
||||
public DateOnly Date {get; set;}
|
||||
public int ClassNumber {get; set;}
|
||||
public bool IsAttendence {get; set;}
|
||||
public required User User {get; set;}
|
||||
|
0
Domain/Models/User.cs
Executable file → Normal file
0
Domain/Models/User.cs
Executable file → Normal file
11
Domain/UseCase/GroupUseCase.cs
Executable file → Normal file
11
Domain/UseCase/GroupUseCase.cs
Executable file → Normal file
@ -1,5 +1,4 @@
|
||||
using Posechaemost.Data.LocalData.Entity;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase.DAO;
|
||||
using Posechaemost.Data.Repository;
|
||||
using Posechaemost.Domain.Models;
|
||||
using System;
|
||||
@ -12,22 +11,22 @@ namespace Posechaemost.Domain.UseCase
|
||||
{
|
||||
public class GroupUseCase
|
||||
{
|
||||
private IGroupRepository _repositoryGroupImpl;
|
||||
private GroupRepositoryImpl _repositoryGroupImpl;
|
||||
|
||||
public GroupUseCase(IGroupRepository repositoryGroupImpl)
|
||||
public GroupUseCase(GroupRepositoryImpl repositoryGroupImpl)
|
||||
{
|
||||
_repositoryGroupImpl = repositoryGroupImpl;
|
||||
}
|
||||
|
||||
public List<GroupDao> GetAllGroups() => _repositoryGroupImpl.GetAllGroup()
|
||||
.Select(it => new GroupDao { Id = it.Id, Name = it.Name}).ToList();
|
||||
public List<Group> GetAllGroups() => _repositoryGroupImpl.GetAllGroups()
|
||||
.Select(it => new Group { Id = it.Id, Name = it.Name}).ToList();
|
||||
|
||||
public bool UpdateGroupName(String id, String name1) {
|
||||
return _repositoryGroupImpl.UpdateGroupById(int.Parse(id), name1);
|
||||
}
|
||||
public bool AddGroup(String name, String id)
|
||||
{
|
||||
return _repositoryGroupImpl.AddGroup(new GroupDao { Name = name, Id = int.Parse(id) });
|
||||
return _repositoryGroupImpl.AddGroup(name, id);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,152 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Threading.Tasks;
|
||||
using Posechaemost.Data.LocalData.Entity;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase.DAO;
|
||||
using Posechaemost.Data.Repository;
|
||||
using Posechaemost.Domain.Models;
|
||||
|
||||
namespace Posechaemost.Domain.UseCase
|
||||
{
|
||||
public class PresenceUseCase
|
||||
{
|
||||
public readonly IUserRepository _userRepository;
|
||||
public readonly IPresenceRepository _presenceRepository;
|
||||
private readonly IGroupRepository _groupRepository;
|
||||
|
||||
public PresenceUseCase(IPresenceRepository repositoryImpl,
|
||||
IUserRepository userRepositoryImpl,
|
||||
IGroupRepository groupRepositoryImpl) {
|
||||
_presenceRepository = repositoryImpl;
|
||||
_userRepository = userRepositoryImpl;
|
||||
_groupRepository = groupRepositoryImpl;
|
||||
}
|
||||
|
||||
public List<PresenceDao> GetPresenceByGroup(int groupId) {
|
||||
var users = _userRepository.GetAllUser().Where(x => x.GroupId == groupId).ToList();
|
||||
|
||||
var presenceByGroup = _presenceRepository.GetPresenceByGroup(groupId)
|
||||
.Where(x => users.Any(user => user.UserId == x.UserId))
|
||||
.Select(presence => new PresenceDao{
|
||||
User = new UserDao{
|
||||
UserId = presence.UserId,
|
||||
GroupId = groupId,
|
||||
FIO = users.First(user => user.UserId == presence.UserId).FIO,
|
||||
},
|
||||
ClassNumber = presence.ClassNumber,
|
||||
Date = presence.Date,
|
||||
IsAttendence = presence.IsAttendence
|
||||
}).ToList();
|
||||
return presenceByGroup;
|
||||
}
|
||||
|
||||
public List<PresenceDao> GetPresenceByGroupAndDate(int groupId, DateOnly date) {
|
||||
var users = _userRepository.GetAllUser().Where(x => x.GroupId == groupId).ToList();
|
||||
|
||||
var presenceByGroupAndDate = _presenceRepository.GetPresenceByGroupAndDate(groupId, date)
|
||||
.Where(x => users.Any(user => user.UserId == x.UserId && x.Date == date))
|
||||
.Select(presence => new PresenceDao{
|
||||
User = new UserDao{
|
||||
UserId = presence.UserId,
|
||||
GroupId = groupId,
|
||||
FIO = users.First(user => user.UserId == presence.UserId).FIO,
|
||||
},
|
||||
ClassNumber = presence.ClassNumber,
|
||||
Date = presence.Date,
|
||||
IsAttendence = presence.IsAttendence
|
||||
}).ToList();
|
||||
return presenceByGroupAndDate;
|
||||
}
|
||||
|
||||
public bool UncheckAttendence(int firstClass, int lastClass, DateOnly date, int userId) {
|
||||
return _presenceRepository.UncheckAttendence(firstClass, lastClass, date, userId);
|
||||
}
|
||||
|
||||
public void AddPresence(int firstClass, int lastClass, int groupId,DateOnly date)
|
||||
{
|
||||
var users = _userRepository.GetAllUser().Where(x => x.GroupId==groupId).ToList();
|
||||
List<PresenceDao> presenceList = new List<PresenceDao>();
|
||||
for (int i = firstClass; i < lastClass; i++)
|
||||
{
|
||||
foreach (var user in users)
|
||||
{
|
||||
PresenceDao pres = new PresenceDao{ClassNumber = i, Date = date, UserId = user.UserId, User = user};
|
||||
presenceList.Add(pres);
|
||||
}
|
||||
}
|
||||
}
|
||||
public Dictionary<string, int> GetPresenceStatsByGroup(int groupId)
|
||||
{
|
||||
var stats = new Dictionary<string, int>();
|
||||
|
||||
// Получаем всех студентов группы
|
||||
var users = _userRepository.GetAllUser().Where(x => x.GroupId == groupId).ToList();
|
||||
stats["Количество студентов"] = users.Count;
|
||||
|
||||
// Получаем все записи посещаемости для группы
|
||||
var presences = _presenceRepository.GetPresenceByGroup(groupId);
|
||||
|
||||
// Считаем количество уникальных занятий
|
||||
var uniqueLessons = presences
|
||||
.Select(p => new { p.Date, p.ClassNumber })
|
||||
.Distinct()
|
||||
.Count();
|
||||
stats["Количество занятий"] = uniqueLessons;
|
||||
|
||||
// Считаем общую посещаемость
|
||||
var totalAttendances = presences.Count(p => p.IsAttendence);
|
||||
var totalPossibleAttendances = users.Count * uniqueLessons;
|
||||
|
||||
if (totalPossibleAttendances > 0)
|
||||
{
|
||||
var attendancePercentage = (totalAttendances * 100) / totalPossibleAttendances;
|
||||
stats["Процент посещаемости"] = attendancePercentage;
|
||||
}
|
||||
else
|
||||
{
|
||||
stats["Процент посещаемости"] = 0;
|
||||
}
|
||||
|
||||
return stats;
|
||||
}
|
||||
public void GenerateWeeklyPresence(int firstClass, int lastClass, int groupId, DateOnly startDate)
|
||||
{
|
||||
// Получаем всех студентов группы
|
||||
var users = _userRepository.GetAllUser().Where(x => x.GroupId == groupId).ToList();
|
||||
|
||||
// Генерируем посещаемость на 7 дней
|
||||
for (int day = 0; day < 7; day++)
|
||||
{
|
||||
var currentDate = startDate.AddDays(day);
|
||||
|
||||
// Пропускаем выходные дни (суббота и воскресенье)
|
||||
if (currentDate.DayOfWeek == DayOfWeek.Saturday ||
|
||||
currentDate.DayOfWeek == DayOfWeek.Sunday)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Для каждой пары в диапазоне
|
||||
for (int classNum = firstClass; classNum <= lastClass; classNum++)
|
||||
{
|
||||
foreach (var user in users)
|
||||
{
|
||||
var presence = new PresenceDao
|
||||
{
|
||||
ClassNumber = classNum,
|
||||
Date = currentDate,
|
||||
UserId = user.UserId,
|
||||
User = user,
|
||||
GroupId = groupId
|
||||
};
|
||||
|
||||
_presenceRepository.AddPresence(presence);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
47
Domain/UseCase/UserUseCase.cs
Executable file → Normal file
47
Domain/UseCase/UserUseCase.cs
Executable file → Normal file
@ -1,5 +1,4 @@
|
||||
using Posechaemost.Data.LocalData.Entity;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase.DAO;
|
||||
using Posechaemost.Data.Repository;
|
||||
using Posechaemost.Domain.Models;
|
||||
using System;
|
||||
@ -13,44 +12,50 @@ namespace Posechaemost.Domain.UseCase
|
||||
public class UserUseCase
|
||||
{
|
||||
|
||||
|
||||
private readonly IUserRepository _repositoryUserImpl;
|
||||
private readonly UserRepositoryImpl _repositoryUserImpl;
|
||||
private readonly IGroupRepository _repositoryGroupImpl;
|
||||
|
||||
public UserUseCase(IUserRepository repositoryImpl, IGroupRepository repositoryGroupImpl)
|
||||
public UserUseCase(UserRepositoryImpl repositoryImpl, GroupRepositoryImpl repositoryGroupImpl)
|
||||
{
|
||||
_repositoryUserImpl = repositoryImpl;
|
||||
_repositoryGroupImpl = repositoryGroupImpl;
|
||||
}
|
||||
|
||||
private List<GroupDao> GetAllGroups() => _repositoryGroupImpl.GetAllGroup()
|
||||
.Select(it => new GroupDao { Id = it.Id, Name = it.Name}).ToList();
|
||||
public List<UserDao> GetAllUsers() => _repositoryUserImpl.GetAllUser()
|
||||
private List<Group> GetAllGroups() => _repositoryGroupImpl.GetAllGroup()
|
||||
.Select(it => new Group { Id = it.Id, Name = it.Name}).ToList();
|
||||
public List<User> GetAllUsers() => _repositoryUserImpl.GetAllUsers
|
||||
.Join(_repositoryGroupImpl.GetAllGroup(),
|
||||
user => user.GroupId,
|
||||
user => user.GroupID,
|
||||
group => group.Id,
|
||||
(user, group) =>
|
||||
new UserDao { FIO = user.FIO,
|
||||
UserId = user.UserId,
|
||||
GroupId = group.Id }
|
||||
new User { FIO = user.FIO,
|
||||
Guid = user.Guid,
|
||||
GroupId = new Group {Id = group.Id, Name = group.Name } }
|
||||
).ToList();
|
||||
|
||||
|
||||
public bool RemoveUserById(int userId) {
|
||||
return _repositoryUserImpl.RemoveUserById(userId);
|
||||
public bool RemoveUserByGuid(Guid userGuid) {
|
||||
return _repositoryUserImpl.RemoveUserByGuid(userGuid);
|
||||
}
|
||||
public bool UpdateUser(UserDao user) {
|
||||
UserDao userDao = new UserDao { FIO = user.FIO, GroupId = user.GroupId };
|
||||
return _repositoryUserImpl.UpdateUser(userDao);
|
||||
public User UpdateUser(User user) {
|
||||
UserLocalEntity userLocalEnity = new UserLocalEntity { FIO = user.FIO, GroupID = user.GroupId.Id, Guid = user.Guid };
|
||||
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 { FIO = user.FIO, Guid = user.Guid, GroupId = group};
|
||||
}
|
||||
|
||||
public UserDao GetUserById(int userId) {
|
||||
return _repositoryUserImpl.GetUserById(userId);
|
||||
public UserLocalEntity GetUserByGuid(Guid userGuid) {
|
||||
return _repositoryUserImpl.GetUserByGuid(userGuid);
|
||||
}
|
||||
|
||||
public bool UpdateUserById(int userId, String fio, int groupId) {
|
||||
UserDao userDao = new UserDao { FIO = fio, GroupId = groupId };
|
||||
return _repositoryUserImpl.UpdateUser(userDao);
|
||||
public User UpdateUserByGuid(Guid userGuid, String fio, String groupId) {
|
||||
UserLocalEntity? result = _repositoryUserImpl.UpdateUserByGuid(userGuid);
|
||||
if (result == null) throw new Exception("");
|
||||
Group? group = GetAllGroups().FirstOrDefault(it => it.Id == int.Parse(groupId));
|
||||
if (group == null) throw new Exception("");
|
||||
return new User { FIO = fio, GroupId = group, Guid = userGuid };
|
||||
}
|
||||
}
|
||||
}
|
131
Migrations/20241111193458_InitialCreate.Designer.cs
generated
131
Migrations/20241111193458_InitialCreate.Designer.cs
generated
@ -1,131 +0,0 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Posechaemost.Migrations
|
||||
{
|
||||
[DbContext(typeof(RemoteDataBaseContext))]
|
||||
[Migration("20241111193458_InitialCreate")]
|
||||
partial class InitialCreate
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.10")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||
|
||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.GroupDao", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("integer");
|
||||
|
||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Groups");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.PresenceDao", b =>
|
||||
{
|
||||
b.Property<int>("PresenceId")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("integer");
|
||||
|
||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("PresenceId"));
|
||||
|
||||
b.Property<int>("ClassNumber")
|
||||
.HasColumnType("integer");
|
||||
|
||||
b.Property<DateOnly>("Date")
|
||||
.HasColumnType("date");
|
||||
|
||||
b.Property<int>("GroupId")
|
||||
.HasColumnType("integer");
|
||||
|
||||
b.Property<bool>("IsAttendence")
|
||||
.HasColumnType("boolean");
|
||||
|
||||
b.Property<int>("UserId")
|
||||
.HasColumnType("integer");
|
||||
|
||||
b.HasKey("PresenceId");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("Presences");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
||||
{
|
||||
b.Property<int>("UserId")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("integer");
|
||||
|
||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("UserId"));
|
||||
|
||||
b.Property<string>("FIO")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.Property<int>("GroupId")
|
||||
.HasColumnType("integer");
|
||||
|
||||
b.HasKey("UserId");
|
||||
|
||||
b.HasIndex("GroupId");
|
||||
|
||||
b.ToTable("Users");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.PresenceDao", b =>
|
||||
{
|
||||
b.HasOne("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.UserDao", "User")
|
||||
.WithMany("Presences")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("User");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
||||
{
|
||||
b.HasOne("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.GroupDao", "Group")
|
||||
.WithMany("User")
|
||||
.HasForeignKey("GroupId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Group");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.GroupDao", b =>
|
||||
{
|
||||
b.Navigation("User");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
||||
{
|
||||
b.Navigation("Presences");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
@ -1,95 +0,0 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Posechaemost.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class InitialCreate : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Groups",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "integer", nullable: false)
|
||||
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||
Name = table.Column<string>(type: "text", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Groups", x => x.Id);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Users",
|
||||
columns: table => new
|
||||
{
|
||||
UserId = table.Column<int>(type: "integer", nullable: false)
|
||||
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||
FIO = table.Column<string>(type: "text", nullable: false),
|
||||
GroupId = table.Column<int>(type: "integer", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Users", x => x.UserId);
|
||||
table.ForeignKey(
|
||||
name: "FK_Users_Groups_GroupId",
|
||||
column: x => x.GroupId,
|
||||
principalTable: "Groups",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Presences",
|
||||
columns: table => new
|
||||
{
|
||||
PresenceId = table.Column<int>(type: "integer", nullable: false)
|
||||
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||
Date = table.Column<DateOnly>(type: "date", nullable: false),
|
||||
ClassNumber = table.Column<int>(type: "integer", nullable: false),
|
||||
IsAttendence = table.Column<bool>(type: "boolean", nullable: false),
|
||||
UserId = table.Column<int>(type: "integer", nullable: false),
|
||||
GroupId = table.Column<int>(type: "integer", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Presences", x => x.PresenceId);
|
||||
table.ForeignKey(
|
||||
name: "FK_Presences_Users_UserId",
|
||||
column: x => x.UserId,
|
||||
principalTable: "Users",
|
||||
principalColumn: "UserId",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Presences_UserId",
|
||||
table: "Presences",
|
||||
column: "UserId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Users_GroupId",
|
||||
table: "Users",
|
||||
column: "GroupId");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "Presences");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Users");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Groups");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,128 +0,0 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Posechaemost.Migrations
|
||||
{
|
||||
[DbContext(typeof(RemoteDataBaseContext))]
|
||||
partial class RemoteDataBaseContextModelSnapshot : ModelSnapshot
|
||||
{
|
||||
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.10")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||
|
||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.GroupDao", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("integer");
|
||||
|
||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Groups");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.PresenceDao", b =>
|
||||
{
|
||||
b.Property<int>("PresenceId")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("integer");
|
||||
|
||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("PresenceId"));
|
||||
|
||||
b.Property<int>("ClassNumber")
|
||||
.HasColumnType("integer");
|
||||
|
||||
b.Property<DateOnly>("Date")
|
||||
.HasColumnType("date");
|
||||
|
||||
b.Property<int>("GroupId")
|
||||
.HasColumnType("integer");
|
||||
|
||||
b.Property<bool>("IsAttendence")
|
||||
.HasColumnType("boolean");
|
||||
|
||||
b.Property<int>("UserId")
|
||||
.HasColumnType("integer");
|
||||
|
||||
b.HasKey("PresenceId");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("Presences");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
||||
{
|
||||
b.Property<int>("UserId")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("integer");
|
||||
|
||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("UserId"));
|
||||
|
||||
b.Property<string>("FIO")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.Property<int>("GroupId")
|
||||
.HasColumnType("integer");
|
||||
|
||||
b.HasKey("UserId");
|
||||
|
||||
b.HasIndex("GroupId");
|
||||
|
||||
b.ToTable("Users");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.PresenceDao", b =>
|
||||
{
|
||||
b.HasOne("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.UserDao", "User")
|
||||
.WithMany("Presences")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("User");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
||||
{
|
||||
b.HasOne("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.GroupDao", "Group")
|
||||
.WithMany("User")
|
||||
.HasForeignKey("GroupId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Group");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.GroupDao", b =>
|
||||
{
|
||||
b.Navigation("User");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Posechaemost.Data.RemoteData.RemoteDataBase.DAO.UserDao", b =>
|
||||
{
|
||||
b.Navigation("Presences");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
8
Posechaemost.csproj
Executable file → Normal file
8
Posechaemost.csproj
Executable file → Normal file
@ -8,15 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ClosedXML" Version="0.104.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.8" />
|
||||
<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>
|
||||
|
0
Posechaemost.sln
Executable file → Normal file
0
Posechaemost.sln
Executable file → Normal file
21
Program.cs
Executable file → Normal file
21
Program.cs
Executable file → Normal file
@ -3,24 +3,17 @@ using Posechaemost.Domain.UseCase;
|
||||
using Posechaemost.UI;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.Text.RegularExpressions;
|
||||
using Posechaemost.Data.RemoteData.RemoteDataBase;
|
||||
|
||||
IServiceCollection services = new ServiceCollection();
|
||||
|
||||
services
|
||||
.AddDbContext<RemoteDataBaseContext>()
|
||||
.AddSingleton<IGroupRepository, SQLGroupRepositoryImpl>()
|
||||
.AddSingleton<IUserRepository, SQLUserRepositoryImpl>()
|
||||
.AddSingleton<IPresenceRepository, SQLPresenceRepositoryImpl>()
|
||||
.AddSingleton<UserUseCase>()
|
||||
.AddSingleton<GroupUseCase>()
|
||||
.AddSingleton<PresenceUseCase>()
|
||||
.AddSingleton<PresenceConsoleUI>()
|
||||
.AddSingleton<MainMenuUI>();
|
||||
.AddSingleton<IGroupRepository, GroupRepositoryImpl>()
|
||||
.AddSingleton<UserUseCase>();
|
||||
|
||||
var serviceProvider = services.BuildServiceProvider();
|
||||
// Создаем пользовательский интерфейс
|
||||
MainMenuUI mainMenuUI = serviceProvider.GetService<MainMenuUI>();
|
||||
|
||||
// Выводим главное меню
|
||||
mainMenuUI.DisplayMenu();
|
||||
GroupRepositoryImpl groupRepositoryImpl = new GroupRepositoryImpl();
|
||||
UserUseCase userUseCase = serviceProvider.GetService<UserUseCase>();
|
||||
GroupUseCase groupUseCase = new GroupUseCase(groupRepositoryImpl);
|
||||
|
||||
MainMenuUI mainMenuUI = new MainMenuUI(userUseCase, groupUseCase);
|
4
UI/GroupConsole.cs
Executable file → Normal file
4
UI/GroupConsole.cs
Executable file → Normal file
@ -28,12 +28,16 @@ namespace Posechaemost.UI
|
||||
public void UpdateGroupName(String name, String name1) {
|
||||
StringBuilder groupOutput = new StringBuilder();
|
||||
var group = _groupUseCase.UpdateGroupName(name, name1);
|
||||
groupOutput.AppendLine($"{group.Id}\t{group.Name}");
|
||||
Console.WriteLine(groupOutput);
|
||||
}
|
||||
|
||||
public void AddGroup(String name, String id)
|
||||
{
|
||||
StringBuilder groupOutput = new StringBuilder();
|
||||
var group = _groupUseCase.AddGroup(name, id);
|
||||
groupOutput.AppendLine($"{group.Id}\t{group.Name}");
|
||||
Console.WriteLine(groupOutput);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
21
UI/MainMenu.cs
Executable file → Normal file
21
UI/MainMenu.cs
Executable file → Normal file
@ -1,4 +1,3 @@
|
||||
using Posechaemost.Data.Repository;
|
||||
using Posechaemost.Domain.UseCase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -13,38 +12,30 @@ namespace Posechaemost.UI
|
||||
|
||||
UserConsoleUI _userConsoleUI;
|
||||
GroupConsoleUI _groupConsoleUI;
|
||||
PresenceConsoleUI _presenceConsoleUI;
|
||||
|
||||
public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, PresenceUseCase presenceUseCase, IPresenceRepository presenceRepository)
|
||||
public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase)
|
||||
{
|
||||
_userConsoleUI = new UserConsoleUI(userUseCase);
|
||||
_groupConsoleUI = new GroupConsoleUI(groupUseCase);
|
||||
_presenceConsoleUI = new PresenceConsoleUI(presenceUseCase, presenceRepository);
|
||||
|
||||
|
||||
DisplayMenu();
|
||||
|
||||
}
|
||||
|
||||
public void DisplayMenu()
|
||||
private void DisplayMenu()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
switch (Console.ReadLine())
|
||||
{
|
||||
case "1": _userConsoleUI.DisplayAllUsers(); break;
|
||||
case "2": _userConsoleUI.RemoveUserById(int.Parse(Console.ReadLine())); break;
|
||||
case "2": _userConsoleUI.RemoveUserByGuid(Guid.Parse(Console.ReadLine())); break;
|
||||
case "3": _groupConsoleUI.DisplayAllGroups(); break;
|
||||
case "4": _userConsoleUI.GetUserById(int.Parse(Console.ReadLine())); break;
|
||||
case "5": _userConsoleUI.UpdateUserById(int.Parse(Console.ReadLine()), Console.ReadLine(), int.Parse(Console.ReadLine())); break;
|
||||
case "4": _userConsoleUI.GetUserByGuid(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 "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;
|
||||
case "12": _presenceConsoleUI.ExportPresenceToExcel(int.Parse(Console.ReadLine()), Console.ReadLine()); break;
|
||||
case "13": _presenceConsoleUI.GenerateWeeklyPresence(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine())); break;
|
||||
|
||||
default: DisplayMenu();
|
||||
break;
|
||||
}
|
||||
|
@ -1,166 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Posechaemost.Domain.UseCase;
|
||||
using ClosedXML.Excel;
|
||||
using Posechaemost.Data.Repository;
|
||||
|
||||
namespace Posechaemost.UI
|
||||
{
|
||||
public class PresenceConsoleUI
|
||||
{
|
||||
private readonly PresenceUseCase _presenceUseCase;
|
||||
|
||||
private readonly IPresenceRepository _presenceRepository;
|
||||
public PresenceConsoleUI(PresenceUseCase presenceUseCase, IPresenceRepository presenceRepository)
|
||||
{
|
||||
_presenceUseCase = presenceUseCase;
|
||||
_presenceRepository = presenceRepository;
|
||||
}
|
||||
|
||||
public void GetPresenceByGroup(int groupId)
|
||||
{
|
||||
StringBuilder presenceOutput = new StringBuilder();
|
||||
var presence = _presenceUseCase.GetPresenceByGroup(groupId);
|
||||
foreach (var p in presence)
|
||||
{
|
||||
presenceOutput.AppendLine($"{p.User.UserId}\t{p.User.FIO}\t{p.ClassNumber}\t{p.Date}\t{p.IsAttendence}");
|
||||
}
|
||||
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.User.UserId}\t{p.User.FIO}\t{p.ClassNumber}\t{p.Date}\t{p.IsAttendence}");
|
||||
}
|
||||
Console.WriteLine(presenceOutput);
|
||||
}
|
||||
|
||||
public void UncheckAttendence(int firstClass, int lastClass, DateOnly date, int userId)
|
||||
{
|
||||
string output = _presenceUseCase.UncheckAttendence(firstClass, lastClass, date, userId) ?
|
||||
"Посещаемость обновлена" : "Посещаемость не обновлена";
|
||||
Console.WriteLine(output);
|
||||
}
|
||||
|
||||
public void AddPresence(int firstClass, int lastClass, int groupId, DateOnly date)
|
||||
{
|
||||
StringBuilder presenceOutput = new StringBuilder();
|
||||
_presenceUseCase.AddPresence(firstClass, lastClass, groupId, date);
|
||||
presenceOutput.AppendLine("Посещаемость добавлена");
|
||||
Console.WriteLine(presenceOutput);
|
||||
}
|
||||
|
||||
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.IsAttendence),
|
||||
Missed = stats["Количество занятий"] - g.Count(p => p.IsAttendence),
|
||||
Percentage = (g.Count(p => p.IsAttendence) * 100) / stats["Количество занятий"]
|
||||
});
|
||||
|
||||
foreach(var student in students) {
|
||||
output.AppendLine($"\nСтудент: {student.Student.FIO}");
|
||||
output.AppendLine($"Посещено занятий: {student.Attended}");
|
||||
output.AppendLine($"Пропущено занятий: {student.Missed}");
|
||||
output.AppendLine($"Процент посещаемости: {student.Percentage}%");
|
||||
}
|
||||
|
||||
Console.WriteLine(output.ToString());
|
||||
}
|
||||
|
||||
public void GenerateWeeklyPresence(int firstClass, int lastClass, int groupId, DateOnly startDate)
|
||||
{
|
||||
_presenceUseCase.GenerateWeeklyPresence(firstClass, lastClass, groupId, startDate);
|
||||
Console.WriteLine("Посещаемость на неделю сгенерирована");
|
||||
}
|
||||
|
||||
public void ExportPresenceToExcel(int groupId, string filePath)
|
||||
{
|
||||
var presence = _presenceUseCase.GetPresenceByGroup(groupId);
|
||||
var stats = _presenceUseCase.GetPresenceStatsByGroup(groupId);
|
||||
|
||||
using (var workbook = new XLWorkbook())
|
||||
{
|
||||
var worksheet = workbook.Worksheets.Add("Посещаемость");
|
||||
|
||||
// Заголовок листа
|
||||
worksheet.Cell(1, 1).Value = $"Группа {groupId}";
|
||||
worksheet.Range(1, 1, 1, 3).Merge();
|
||||
worksheet.Cell(1, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
|
||||
|
||||
// Заголовки столбцов
|
||||
worksheet.Cell(3, 1).Value = "№";
|
||||
worksheet.Cell(3, 2).Value = "ФИО";
|
||||
|
||||
// Получаем все уникальные даты
|
||||
var dates = presence.Select(p => p.Date).Distinct().OrderBy(d => d).ToList();
|
||||
int col = 3;
|
||||
foreach (var date in dates)
|
||||
{
|
||||
worksheet.Cell(3, col).Value = date.ToString("dd.MM.yyyy");
|
||||
col++;
|
||||
}
|
||||
|
||||
// Группируем данные по студентам
|
||||
var studentGroups = presence.GroupBy(p => p.User);
|
||||
int row = 4;
|
||||
int studentNumber = 1;
|
||||
|
||||
foreach (var studentGroup in studentGroups)
|
||||
{
|
||||
// Номер и ФИО студента
|
||||
worksheet.Cell(row, 1).Value = studentNumber++;
|
||||
worksheet.Cell(row, 2).Value = studentGroup.Key.FIO;
|
||||
|
||||
// Заполняем посещаемость по датам
|
||||
col = 3;
|
||||
foreach (var date in dates)
|
||||
{
|
||||
var presenceOnDate = studentGroup.FirstOrDefault(p => p.Date == date);
|
||||
worksheet.Cell(row, col).Value = presenceOnDate?.IsAttendence == true ? "+" : "н";
|
||||
worksheet.Cell(row, col).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
|
||||
col++;
|
||||
}
|
||||
row++;
|
||||
}
|
||||
|
||||
// Форматирование
|
||||
var tableRange = worksheet.Range(3, 1, row - 1, dates.Count + 2);
|
||||
tableRange.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
|
||||
tableRange.Style.Border.InsideBorder = XLBorderStyleValues.Thin;
|
||||
|
||||
worksheet.Columns().AdjustToContents();
|
||||
|
||||
try
|
||||
{
|
||||
workbook.SaveAs(filePath);
|
||||
Console.WriteLine($"Данные успешно экспортированы в файл: {filePath}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Ошибка при сохранении файла: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
17
UI/UserConsole.cs
Executable file → Normal file
17
UI/UserConsole.cs
Executable file → Normal file
@ -15,9 +15,9 @@ namespace Posechaemost.UI
|
||||
_userUseCase = userUseCase;
|
||||
}
|
||||
|
||||
public void RemoveUserById(int userId) {
|
||||
public void RemoveUserByGuid(Guid guidUser) {
|
||||
|
||||
string output = _userUseCase.RemoveUserById(userId) ? "Пользователь удален" : "Пользователь не удален";
|
||||
string output = _userUseCase.RemoveUserByGuid(guidUser) ? "Пользователь удален" : "Пользователь не удален";
|
||||
Console.WriteLine(output);
|
||||
}
|
||||
|
||||
@ -26,21 +26,22 @@ namespace Posechaemost.UI
|
||||
StringBuilder userOutput = new StringBuilder();
|
||||
foreach (var user in _userUseCase.GetAllUsers())
|
||||
{
|
||||
userOutput.AppendLine($"{user.UserId}\t{user.FIO}\t{user.GroupId}");
|
||||
userOutput.AppendLine($"{user.Guid}\t{user.FIO}\t{user.GroupId.Name}");
|
||||
}
|
||||
Console.WriteLine(userOutput);
|
||||
}
|
||||
|
||||
public void GetUserById(int userId) {
|
||||
public void GetUserByGuid(Guid userGuid) {
|
||||
StringBuilder userOutput = new StringBuilder();
|
||||
var user = _userUseCase.GetUserById(userId);
|
||||
userOutput.AppendLine($"{user.UserId}\t{user.FIO}\t{user.GroupId}");
|
||||
var user = _userUseCase.GetUserByGuid(userGuid);
|
||||
userOutput.AppendLine($"{user.Guid}\t{user.FIO}\t{user.GroupID}");
|
||||
Console.WriteLine(userOutput);
|
||||
}
|
||||
|
||||
public void UpdateUserById(int userId, String name, int groupId) {
|
||||
public void UpdateUserByGuid(Guid userGuid, String name, String groupId) {
|
||||
StringBuilder userOutput = new StringBuilder();
|
||||
var user = _userUseCase.UpdateUserById(userId, name, groupId) ? "Пользователь обновлен" : "Пользователь не обновлен";
|
||||
var user = _userUseCase.UpdateUserByGuid(userGuid, name, groupId);
|
||||
userOutput.AppendLine($"{user.Guid}\t{user.FIO}\t{user.GroupId.Name}");
|
||||
Console.WriteLine(userOutput);
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
907
bin/Debug/net8.0/Posechaemost.deps.json
Executable file → Normal file
907
bin/Debug/net8.0/Posechaemost.deps.json
Executable file → Normal file
@ -7,593 +7,10 @@
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v8.0": {
|
||||
"Posechaemost/1.0.0": {
|
||||
"dependencies": {
|
||||
"ClosedXML": "0.104.1",
|
||||
"Microsoft.EntityFrameworkCore.Design": "8.0.10",
|
||||
"Microsoft.EntityFrameworkCore": "8.0.10",
|
||||
"Microsoft.Extensions.DependencyInjection": "8.0.1",
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL": "8.0.10"
|
||||
},
|
||||
"runtime": {
|
||||
"Posechaemost.dll": {}
|
||||
}
|
||||
},
|
||||
"ClosedXML/0.104.1": {
|
||||
"dependencies": {
|
||||
"ClosedXML.Parser": "1.2.0",
|
||||
"DocumentFormat.OpenXml": "3.0.1",
|
||||
"ExcelNumberFormat": "1.1.0",
|
||||
"RBush": "3.2.0",
|
||||
"SixLabors.Fonts": "1.0.0",
|
||||
"System.IO.Packaging": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/ClosedXML.dll": {
|
||||
"assemblyVersion": "0.104.1.0",
|
||||
"fileVersion": "0.104.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ClosedXML.Parser/1.2.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/ClosedXML.Parser.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"DocumentFormat.OpenXml/3.0.1": {
|
||||
"dependencies": {
|
||||
"DocumentFormat.OpenXml.Framework": "3.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/DocumentFormat.OpenXml.dll": {
|
||||
"assemblyVersion": "3.0.1.0",
|
||||
"fileVersion": "3.0.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"DocumentFormat.OpenXml.Framework/3.0.1": {
|
||||
"dependencies": {
|
||||
"System.IO.Packaging": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/DocumentFormat.OpenXml.Framework.dll": {
|
||||
"assemblyVersion": "3.0.1.0",
|
||||
"fileVersion": "3.0.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ExcelNumberFormat/1.1.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/ExcelNumberFormat.dll": {
|
||||
"assemblyVersion": "1.1.0.0",
|
||||
"fileVersion": "1.1.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Humanizer.Core/2.14.1": {
|
||||
"runtime": {
|
||||
"lib/net6.0/Humanizer.dll": {
|
||||
"assemblyVersion": "2.14.0.0",
|
||||
"fileVersion": "2.14.1.48190"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/6.0.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.CodeAnalysis.Analyzers/3.3.3": {},
|
||||
"Microsoft.CodeAnalysis.Common/4.5.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.CodeAnalysis.Analyzers": "3.3.3",
|
||||
"System.Collections.Immutable": "6.0.0",
|
||||
"System.Reflection.Metadata": "6.0.1",
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
|
||||
"System.Text.Encoding.CodePages": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll": {
|
||||
"assemblyVersion": "4.5.0.0",
|
||||
"fileVersion": "4.500.23.10905"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "cs"
|
||||
},
|
||||
"lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "de"
|
||||
},
|
||||
"lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "es"
|
||||
},
|
||||
"lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "fr"
|
||||
},
|
||||
"lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "it"
|
||||
},
|
||||
"lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "ja"
|
||||
},
|
||||
"lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "ko"
|
||||
},
|
||||
"lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "pl"
|
||||
},
|
||||
"lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "pt-BR"
|
||||
},
|
||||
"lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "ru"
|
||||
},
|
||||
"lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "tr"
|
||||
},
|
||||
"lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "zh-Hans"
|
||||
},
|
||||
"lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.resources.dll": {
|
||||
"locale": "zh-Hant"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.CodeAnalysis.CSharp/4.5.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.CodeAnalysis.Common": "4.5.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll": {
|
||||
"assemblyVersion": "4.5.0.0",
|
||||
"fileVersion": "4.500.23.10905"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "cs"
|
||||
},
|
||||
"lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "de"
|
||||
},
|
||||
"lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "es"
|
||||
},
|
||||
"lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "fr"
|
||||
},
|
||||
"lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "it"
|
||||
},
|
||||
"lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "ja"
|
||||
},
|
||||
"lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "ko"
|
||||
},
|
||||
"lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "pl"
|
||||
},
|
||||
"lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "pt-BR"
|
||||
},
|
||||
"lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "ru"
|
||||
},
|
||||
"lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "tr"
|
||||
},
|
||||
"lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "zh-Hans"
|
||||
},
|
||||
"lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": {
|
||||
"locale": "zh-Hant"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.CodeAnalysis.CSharp.Workspaces/4.5.0": {
|
||||
"dependencies": {
|
||||
"Humanizer.Core": "2.14.1",
|
||||
"Microsoft.CodeAnalysis.CSharp": "4.5.0",
|
||||
"Microsoft.CodeAnalysis.Common": "4.5.0",
|
||||
"Microsoft.CodeAnalysis.Workspaces.Common": "4.5.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": {
|
||||
"assemblyVersion": "4.5.0.0",
|
||||
"fileVersion": "4.500.23.10905"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "cs"
|
||||
},
|
||||
"lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "de"
|
||||
},
|
||||
"lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "es"
|
||||
},
|
||||
"lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "fr"
|
||||
},
|
||||
"lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "it"
|
||||
},
|
||||
"lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "ja"
|
||||
},
|
||||
"lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "ko"
|
||||
},
|
||||
"lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "pl"
|
||||
},
|
||||
"lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "pt-BR"
|
||||
},
|
||||
"lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "ru"
|
||||
},
|
||||
"lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "tr"
|
||||
},
|
||||
"lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "zh-Hans"
|
||||
},
|
||||
"lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
|
||||
"locale": "zh-Hant"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.CodeAnalysis.Workspaces.Common/4.5.0": {
|
||||
"dependencies": {
|
||||
"Humanizer.Core": "2.14.1",
|
||||
"Microsoft.Bcl.AsyncInterfaces": "6.0.0",
|
||||
"Microsoft.CodeAnalysis.Common": "4.5.0",
|
||||
"System.Composition": "6.0.0",
|
||||
"System.IO.Pipelines": "6.0.3",
|
||||
"System.Threading.Channels": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netcoreapp3.1/Microsoft.CodeAnalysis.Workspaces.dll": {
|
||||
"assemblyVersion": "4.5.0.0",
|
||||
"fileVersion": "4.500.23.10905"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "cs"
|
||||
},
|
||||
"lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "de"
|
||||
},
|
||||
"lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "es"
|
||||
},
|
||||
"lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "fr"
|
||||
},
|
||||
"lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "it"
|
||||
},
|
||||
"lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "ja"
|
||||
},
|
||||
"lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "ko"
|
||||
},
|
||||
"lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "pl"
|
||||
},
|
||||
"lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "pt-BR"
|
||||
},
|
||||
"lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "ru"
|
||||
},
|
||||
"lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "tr"
|
||||
},
|
||||
"lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "zh-Hans"
|
||||
},
|
||||
"lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
|
||||
"locale": "zh-Hant"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore/8.0.10": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore.Abstractions": "8.0.10",
|
||||
"Microsoft.EntityFrameworkCore.Analyzers": "8.0.10",
|
||||
"Microsoft.Extensions.Caching.Memory": "8.0.1",
|
||||
"Microsoft.Extensions.Logging": "8.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.dll": {
|
||||
"assemblyVersion": "8.0.10.0",
|
||||
"fileVersion": "8.0.1024.46708"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Abstractions/8.0.10": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
|
||||
"assemblyVersion": "8.0.10.0",
|
||||
"fileVersion": "8.0.1024.46708"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Analyzers/8.0.10": {},
|
||||
"Microsoft.EntityFrameworkCore.Design/8.0.10": {
|
||||
"dependencies": {
|
||||
"Humanizer.Core": "2.14.1",
|
||||
"Microsoft.CodeAnalysis.CSharp.Workspaces": "4.5.0",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "8.0.10",
|
||||
"Microsoft.Extensions.DependencyModel": "8.0.2",
|
||||
"Mono.TextTemplating": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": {
|
||||
"assemblyVersion": "8.0.10.0",
|
||||
"fileVersion": "8.0.1024.46708"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Relational/8.0.10": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore": "8.0.10",
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": {
|
||||
"assemblyVersion": "8.0.10.0",
|
||||
"fileVersion": "8.0.1024.46708"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Caching.Memory.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyModel/8.0.2": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyModel.dll": {
|
||||
"assemblyVersion": "8.0.0.2",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging/8.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "8.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Options/8.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Options.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.224.6711"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/8.0.0": {},
|
||||
"Mono.TextTemplating/2.2.1": {
|
||||
"dependencies": {
|
||||
"System.CodeDom": "4.4.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Mono.TextTemplating.dll": {
|
||||
"assemblyVersion": "2.2.0.0",
|
||||
"fileVersion": "2.2.1.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Npgsql/8.0.5": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Npgsql.dll": {
|
||||
"assemblyVersion": "8.0.5.0",
|
||||
"fileVersion": "8.0.5.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL/8.0.10": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore": "8.0.10",
|
||||
"Microsoft.EntityFrameworkCore.Abstractions": "8.0.10",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "8.0.10",
|
||||
"Npgsql": "8.0.5"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": {
|
||||
"assemblyVersion": "8.0.10.0",
|
||||
"fileVersion": "8.0.10.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"RBush/3.2.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/RBush.dll": {
|
||||
"assemblyVersion": "3.0.0.0",
|
||||
"fileVersion": "3.2.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"SixLabors.Fonts/1.0.0": {
|
||||
"runtime": {
|
||||
"lib/netcoreapp3.1/SixLabors.Fonts.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.CodeDom/4.4.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.CodeDom.dll": {
|
||||
"assemblyVersion": "4.0.0.0",
|
||||
"fileVersion": "4.6.25519.3"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Collections.Immutable/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.Composition/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Composition.AttributedModel": "6.0.0",
|
||||
"System.Composition.Convention": "6.0.0",
|
||||
"System.Composition.Hosting": "6.0.0",
|
||||
"System.Composition.Runtime": "6.0.0",
|
||||
"System.Composition.TypedParts": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.Composition.AttributedModel/6.0.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Composition.AttributedModel.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Composition.Convention/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Composition.AttributedModel": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Composition.Convention.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Composition.Hosting/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Composition.Runtime": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Composition.Hosting.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Composition.Runtime/6.0.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Composition.Runtime.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Composition.TypedParts/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Composition.AttributedModel": "6.0.0",
|
||||
"System.Composition.Hosting": "6.0.0",
|
||||
"System.Composition.Runtime": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Composition.TypedParts.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.IO.Packaging/8.0.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/System.IO.Packaging.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.23.53103"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.IO.Pipelines/6.0.3": {},
|
||||
"System.Reflection.Metadata/6.0.1": {
|
||||
"dependencies": {
|
||||
"System.Collections.Immutable": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/6.0.0": {},
|
||||
"System.Text.Encoding.CodePages/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.Threading.Channels/6.0.0": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
@ -601,328 +18,6 @@
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"ClosedXML/0.104.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-RVm2fUNWJlBJlg07shrfeWzrHPG5ypI/vARqdUOUbUdaog8yBw8l4IbCHf2MXt0AXtzaZqGNqhFaCAHigCBdfw==",
|
||||
"path": "closedxml/0.104.1",
|
||||
"hashPath": "closedxml.0.104.1.nupkg.sha512"
|
||||
},
|
||||
"ClosedXML.Parser/1.2.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-w+/0tsxABS3lkSH8EUlA7IGme+mq5T/Puf3DbOiTckmSuUpAUO2LK29oXYByCcWkBv6wcRHxgWlQb1lxkwI0Tw==",
|
||||
"path": "closedxml.parser/1.2.0",
|
||||
"hashPath": "closedxml.parser.1.2.0.nupkg.sha512"
|
||||
},
|
||||
"DocumentFormat.OpenXml/3.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-DCK1cwFUJ1FGGyYyo++HWl9H1RkqMWIu+FGOLRy6E4L4y0/HIhlJ7N/n1HKboFfOwKn1cMBRxt1RCuDbIEy5YQ==",
|
||||
"path": "documentformat.openxml/3.0.1",
|
||||
"hashPath": "documentformat.openxml.3.0.1.nupkg.sha512"
|
||||
},
|
||||
"DocumentFormat.OpenXml.Framework/3.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ifyI7OW7sggz7LQMIAD2aUsY/zVUON9QaHrpZ4MK33iVMeHlTG4uhUE2aLWb31nry+LCs2ALDAwf8OfUJGjgBg==",
|
||||
"path": "documentformat.openxml.framework/3.0.1",
|
||||
"hashPath": "documentformat.openxml.framework.3.0.1.nupkg.sha512"
|
||||
},
|
||||
"ExcelNumberFormat/1.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-R3BVHPs9O+RkExbZYTGT0+9HLbi8ZrNij1Yziyw6znd3J7P3uoIR07uwTLGOogtz1p6+0sna66eBoXu7tBiVQA==",
|
||||
"path": "excelnumberformat/1.1.0",
|
||||
"hashPath": "excelnumberformat.1.1.0.nupkg.sha512"
|
||||
},
|
||||
"Humanizer.Core/2.14.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==",
|
||||
"path": "humanizer.core/2.14.1",
|
||||
"hashPath": "humanizer.core.2.14.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg==",
|
||||
"path": "microsoft.bcl.asyncinterfaces/6.0.0",
|
||||
"hashPath": "microsoft.bcl.asyncinterfaces.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.CodeAnalysis.Analyzers/3.3.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ==",
|
||||
"path": "microsoft.codeanalysis.analyzers/3.3.3",
|
||||
"hashPath": "microsoft.codeanalysis.analyzers.3.3.3.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.CodeAnalysis.Common/4.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-lwAbIZNdnY0SUNoDmZHkVUwLO8UyNnyyh1t/4XsbFxi4Ounb3xszIYZaWhyj5ZjyfcwqwmtMbE7fUTVCqQEIdQ==",
|
||||
"path": "microsoft.codeanalysis.common/4.5.0",
|
||||
"hashPath": "microsoft.codeanalysis.common.4.5.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.CodeAnalysis.CSharp/4.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-cM59oMKAOxvdv76bdmaKPy5hfj+oR+zxikWoueEB7CwTko7mt9sVKZI8Qxlov0C/LuKEG+WQwifepqL3vuTiBQ==",
|
||||
"path": "microsoft.codeanalysis.csharp/4.5.0",
|
||||
"hashPath": "microsoft.codeanalysis.csharp.4.5.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.CodeAnalysis.CSharp.Workspaces/4.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-h74wTpmGOp4yS4hj+EvNzEiPgg/KVs2wmSfTZ81upJZOtPkJsVkgfsgtxxqmAeapjT/vLKfmYV0bS8n5MNVP+g==",
|
||||
"path": "microsoft.codeanalysis.csharp.workspaces/4.5.0",
|
||||
"hashPath": "microsoft.codeanalysis.csharp.workspaces.4.5.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.CodeAnalysis.Workspaces.Common/4.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-l4dDRmGELXG72XZaonnOeORyD/T5RpEu5LGHOUIhnv+MmUWDY/m1kWXGwtcgQ5CJ5ynkFiRnIYzTKXYjUs7rbw==",
|
||||
"path": "microsoft.codeanalysis.workspaces.common/4.5.0",
|
||||
"hashPath": "microsoft.codeanalysis.workspaces.common.4.5.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore/8.0.10": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-PPkQdIqfR1nU3n6YgGGDk8G+eaYbaAKM1AzIQtlPNTKf10Osg3N9T+iK9AlnSA/ujsK00flPpFHVfJrbuBFS1A==",
|
||||
"path": "microsoft.entityframeworkcore/8.0.10",
|
||||
"hashPath": "microsoft.entityframeworkcore.8.0.10.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Abstractions/8.0.10": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-FV0QlcX9INY4kAD2o72uPtyOh0nZut2jB11Jf9mNYBtHay8gDLe+x4AbXFwuQg+eSvofjT7naV82e827zGfyMg==",
|
||||
"path": "microsoft.entityframeworkcore.abstractions/8.0.10",
|
||||
"hashPath": "microsoft.entityframeworkcore.abstractions.8.0.10.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Analyzers/8.0.10": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-51KkPIc0EMv/gVXhPIUi6cwJE9Mvh+PLr4Lap4naLcsoGZ0lF2SvOPgUUprwRV3MnN7nyD1XPhT5RJ/p+xFAXw==",
|
||||
"path": "microsoft.entityframeworkcore.analyzers/8.0.10",
|
||||
"hashPath": "microsoft.entityframeworkcore.analyzers.8.0.10.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Design/8.0.10": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-uGNjfKvAsql2KHRqxlK5wHo8mMC60G/FecrFKEjJgeIxtUAbSXGOgKGw/gD9flO5Fzzt1C7uxfIcr6ZsMmFkeg==",
|
||||
"path": "microsoft.entityframeworkcore.design/8.0.10",
|
||||
"hashPath": "microsoft.entityframeworkcore.design.8.0.10.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Relational/8.0.10": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-OefBEE47kGKPRPV3OT+FAW6o5BFgLk2D9EoeWVy7NbOepzUneayLQxbVE098FfedTyMwxvZQoDD9LrvZc3MadA==",
|
||||
"path": "microsoft.entityframeworkcore.relational/8.0.10",
|
||||
"hashPath": "microsoft.entityframeworkcore.relational.8.0.10.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==",
|
||||
"path": "microsoft.extensions.caching.abstractions/8.0.0",
|
||||
"hashPath": "microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/8.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-HFDnhYLccngrzyGgHkjEDU5FMLn4MpOsr5ElgsBMC4yx6lJh4jeWO7fHS8+TXPq+dgxCmUa/Trl8svObmwW4QA==",
|
||||
"path": "microsoft.extensions.caching.memory/8.0.1",
|
||||
"hashPath": "microsoft.extensions.caching.memory.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==",
|
||||
"path": "microsoft.extensions.configuration.abstractions/8.0.0",
|
||||
"hashPath": "microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection/8.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==",
|
||||
"path": "microsoft.extensions.dependencyinjection/8.0.1",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyModel/8.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-mUBDZZRgZrSyFOsJ2qJJ9fXfqd/kXJwf3AiDoqLD9m6TjY5OO/vLNOb9fb4juC0487eq4hcGN/M2Rh/CKS7QYw==",
|
||||
"path": "microsoft.extensions.dependencymodel/8.0.2",
|
||||
"hashPath": "microsoft.extensions.dependencymodel.8.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Logging/8.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==",
|
||||
"path": "microsoft.extensions.logging/8.0.1",
|
||||
"hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
|
||||
"path": "microsoft.extensions.logging.abstractions/8.0.2",
|
||||
"hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Options/8.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==",
|
||||
"path": "microsoft.extensions.options/8.0.2",
|
||||
"hashPath": "microsoft.extensions.options.8.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==",
|
||||
"path": "microsoft.extensions.primitives/8.0.0",
|
||||
"hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Mono.TextTemplating/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-KZYeKBET/2Z0gY1WlTAK7+RHTl7GSbtvTLDXEZZojUdAPqpQNDL6tHv7VUpqfX5VEOh+uRGKaZXkuD253nEOBQ==",
|
||||
"path": "mono.texttemplating/2.2.1",
|
||||
"hashPath": "mono.texttemplating.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"Npgsql/8.0.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-zRG5V8cyeZLpzJlKzFKjEwkRMYIYnHWJvEor2lWXeccS2E1G2nIWYYhnukB51iz5XsWSVEtqg3AxTWM0QJ6vfg==",
|
||||
"path": "npgsql/8.0.5",
|
||||
"hashPath": "npgsql.8.0.5.nupkg.sha512"
|
||||
},
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL/8.0.10": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-gFPl9Dmxih7Yi4tZ3bITzZFzbxFMBx04gqTqcjoL2r5VEW+O2TA5UVw/wm/XW26NAJ7sg59Je0+9QrwiZt6MPQ==",
|
||||
"path": "npgsql.entityframeworkcore.postgresql/8.0.10",
|
||||
"hashPath": "npgsql.entityframeworkcore.postgresql.8.0.10.nupkg.sha512"
|
||||
},
|
||||
"RBush/3.2.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w==",
|
||||
"path": "rbush/3.2.0",
|
||||
"hashPath": "rbush.3.2.0.nupkg.sha512"
|
||||
},
|
||||
"SixLabors.Fonts/1.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-LFQsCZlV0xlUyXAOMUo5kkSl+8zAQXXbbdwWchtk0B4o7zotZhQsQOcJUELGHdfPfm/xDAsz6hONAuV25bJaAg==",
|
||||
"path": "sixlabors.fonts/1.0.0",
|
||||
"hashPath": "sixlabors.fonts.1.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.CodeDom/4.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA==",
|
||||
"path": "system.codedom/4.4.0",
|
||||
"hashPath": "system.codedom.4.4.0.nupkg.sha512"
|
||||
},
|
||||
"System.Collections.Immutable/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-l4zZJ1WU2hqpQQHXz1rvC3etVZN+2DLmQMO79FhOTZHMn8tDRr+WU287sbomD0BETlmKDn0ygUgVy9k5xkkJdA==",
|
||||
"path": "system.collections.immutable/6.0.0",
|
||||
"hashPath": "system.collections.immutable.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Composition/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-d7wMuKQtfsxUa7S13tITC8n1cQzewuhD5iDjZtK2prwFfKVzdYtgrTHgjaV03Zq7feGQ5gkP85tJJntXwInsJA==",
|
||||
"path": "system.composition/6.0.0",
|
||||
"hashPath": "system.composition.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Composition.AttributedModel/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-WK1nSDLByK/4VoC7fkNiFuTVEiperuCN/Hyn+VN30R+W2ijO1d0Z2Qm0ScEl9xkSn1G2MyapJi8xpf4R8WRa/w==",
|
||||
"path": "system.composition.attributedmodel/6.0.0",
|
||||
"hashPath": "system.composition.attributedmodel.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Composition.Convention/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-XYi4lPRdu5bM4JVJ3/UIHAiG6V6lWWUlkhB9ab4IOq0FrRsp0F4wTyV4Dj+Ds+efoXJ3qbLqlvaUozDO7OLeXA==",
|
||||
"path": "system.composition.convention/6.0.0",
|
||||
"hashPath": "system.composition.convention.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Composition.Hosting/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-w/wXjj7kvxuHPLdzZ0PAUt++qJl03t7lENmb2Oev0n3zbxyNULbWBlnd5J5WUMMv15kg5o+/TCZFb6lSwfaUUQ==",
|
||||
"path": "system.composition.hosting/6.0.0",
|
||||
"hashPath": "system.composition.hosting.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Composition.Runtime/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-qkRH/YBaMPTnzxrS5RDk1juvqed4A6HOD/CwRcDGyPpYps1J27waBddiiq1y93jk2ZZ9wuA/kynM+NO0kb3PKg==",
|
||||
"path": "system.composition.runtime/6.0.0",
|
||||
"hashPath": "system.composition.runtime.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Composition.TypedParts/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-iUR1eHrL8Cwd82neQCJ00MpwNIBs4NZgXzrPqx8NJf/k4+mwBO0XCRmHYJT4OLSwDDqh5nBLJWkz5cROnrGhRA==",
|
||||
"path": "system.composition.typedparts/6.0.0",
|
||||
"hashPath": "system.composition.typedparts.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.IO.Packaging/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-8g1V4YRpdGAxFcK8v9OjuMdIOJSpF30Zb1JGicwVZhly3I994WFyBdV6mQEo8d3T+URQe55/M0U0eIH0Hts1bg==",
|
||||
"path": "system.io.packaging/8.0.0",
|
||||
"hashPath": "system.io.packaging.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.IO.Pipelines/6.0.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ryTgF+iFkpGZY1vRQhfCzX0xTdlV3pyaTTqRu2ETbEv+HlV7O6y7hyQURnghNIXvctl5DuZ//Dpks6HdL/Txgw==",
|
||||
"path": "system.io.pipelines/6.0.3",
|
||||
"hashPath": "system.io.pipelines.6.0.3.nupkg.sha512"
|
||||
},
|
||||
"System.Reflection.Metadata/6.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-III/lNMSn0ZRBuM9m5Cgbiho5j81u0FAEagFX5ta2DKbljZ3T0IpD8j+BIiHQPeKqJppWS9bGEp6JnKnWKze0g==",
|
||||
"path": "system.reflection.metadata/6.0.1",
|
||||
"hashPath": "system.reflection.metadata.6.0.1.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
|
||||
"path": "system.runtime.compilerservices.unsafe/6.0.0",
|
||||
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Text.Encoding.CodePages/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==",
|
||||
"path": "system.text.encoding.codepages/6.0.0",
|
||||
"hashPath": "system.text.encoding.codepages.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Threading.Channels/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-TY8/9+tI0mNaUMgntOxxaq2ndTkdXqLSxvPmas7XEqOlv9lQtB7wLjYGd756lOaO7Dvb5r/WXhluM+0Xe87v5Q==",
|
||||
"path": "system.threading.channels/6.0.0",
|
||||
"hashPath": "system.threading.channels.6.0.0.nupkg.sha512"
|
||||
}
|
||||
}
|
||||
}
|
BIN
bin/Debug/net8.0/Posechaemost.dll
Executable file → Normal file
BIN
bin/Debug/net8.0/Posechaemost.dll
Executable file → Normal file
Binary file not shown.
BIN
bin/Debug/net8.0/Posechaemost.pdb
Executable file → Normal file
BIN
bin/Debug/net8.0/Posechaemost.pdb
Executable file → Normal file
Binary file not shown.
15
bin/Debug/net8.0/Posechaemost.runtimeconfig.json
Executable file → Normal file
15
bin/Debug/net8.0/Posechaemost.runtimeconfig.json
Executable file → Normal file
@ -1,18 +1,11 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net8.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "8.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "8.0.0"
|
||||
}
|
||||
],
|
||||
"framework": {
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "8.0.0"
|
||||
},
|
||||
"configProperties": {
|
||||
"System.Reflection.NullabilityInfoContext.IsSupported": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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