initial commit

This commit is contained in:
Class_Student 2024-10-28 15:42:04 +03:00
parent ad36f40a57
commit 06b1f95063
224 changed files with 9534 additions and 484 deletions

Binary file not shown.

BIN
.vs/Demo1/v17/.futdcache.v2 Normal file

Binary file not shown.

BIN
.vs/Demo1/v17/.suo Normal file

Binary file not shown.

View File

@ -0,0 +1,683 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\class_Student\\source\\repos\\slarny4\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\remotedata\\remotedatabase\\remotedatabasecontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\remotedata\\remotedatabase\\remotedatabasecontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\repository\\sqluserrepositoryimpl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\repository\\sqluserrepositoryimpl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\ui\\mainmenu.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\ui\\mainmenu.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\domain\\usecase\\userusecase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\domain\\usecase\\userusecase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\remotedata\\remotedatabase\\dao\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\remotedata\\remotedatabase\\dao\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\repository\\presencerepositoryimpl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\repository\\presencerepositoryimpl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\ui\\presenceconsole.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\ui\\presenceconsole.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\remotedata\\remotedatabase\\dao\\presence.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\remotedata\\remotedatabase\\dao\\presence.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\localdata\\entity\\localpresence.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\localdata\\entity\\localpresence.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\domain\\models\\presence.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\domain\\models\\presence.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\domain\\usecase\\presenceusecase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\domain\\usecase\\presenceusecase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\remotedata\\remotedatabase\\remotedatabase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\remotedata\\remotedatabase\\remotedatabase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\localdata\\entity\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\localdata\\entity\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\localdata\\entity\\group.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\localdata\\entity\\group.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\domain\\models\\group.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\domain\\models\\group.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\domain\\models\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\domain\\models\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\remotedata\\remotedatabase\\dao\\group.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\remotedata\\remotedatabase\\dao\\group.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\remotedata\\remotedatabase\\designtimedbcontextfactorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\remotedata\\remotedatabase\\designtimedbcontextfactorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\remotedata\\remotedatabase\\designtimedbcontextfactory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\remotedata\\remotedatabase\\designtimedbcontextfactory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\repository\\userrepositoryimpl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\repository\\userrepositoryimpl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\repository\\iuserrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\repository\\iuserrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\demo1.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\demo1.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\repository\\sqlgrouprepositoryimpl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\repository\\sqlgrouprepositoryimpl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\repository\\ipresencerepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\repository\\ipresencerepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\ui\\groupconsole.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\ui\\groupconsole.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\domain\\usecase\\groupusecase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\domain\\usecase\\groupusecase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\domain\\usecase\\usecasegeneratepresence.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\domain\\usecase\\usecasegeneratepresence.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\repository\\grouprepositoryimpl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\repository\\grouprepositoryimpl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\repository\\igrouprepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\repository\\igrouprepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\exceptions\\repositoryexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\exceptions\\repositoryexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\exceptions\\groupnotfoundexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\exceptions\\groupnotfoundexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\exceptions\\usernotfoundexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\exceptions\\usernotfoundexception.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\localdata\\localstaticdata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\localdata\\localstaticdata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\ui\\userconsole.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\ui\\userconsole.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\migrations\\remotedatabasecontextmodelsnapshot.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\migrations\\remotedatabasecontextmodelsnapshot.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\migrations\\20241025085326_initialcreate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\migrations\\20241025085326_initialcreate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|c:\\users\\class_student\\source\\repos\\slarny4\\demo1\\data\\repository\\sqlpresencerepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{3EB018F9-3F1D-4B8D-91F3-099DE189E5D7}|Demo1\\Demo1.csproj|solutionrelative:demo1\\data\\repository\\sqlpresencerepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 0,
"Children": [
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "RemoteDatabaseContext.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\RemoteDatabaseContext.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\RemoteData\\RemoteDataBase\\RemoteDatabaseContext.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\RemoteDatabaseContext.cs",
"RelativeToolTip": "Demo1\\Data\\RemoteData\\RemoteDataBase\\RemoteDatabaseContext.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAYAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-25T06:11:46.336Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "PresenceConsole.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\UI\\PresenceConsole.cs",
"RelativeDocumentMoniker": "Demo1\\UI\\PresenceConsole.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\UI\\PresenceConsole.cs",
"RelativeToolTip": "Demo1\\UI\\PresenceConsole.cs",
"ViewState": "AQIAAJgAAAAAAAAAAAAswKUAAAA7AAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:55:31.138Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "PresenceUseCase.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\UseCase\\PresenceUseCase.cs",
"RelativeDocumentMoniker": "Demo1\\Domain\\UseCase\\PresenceUseCase.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\UseCase\\PresenceUseCase.cs",
"RelativeToolTip": "Demo1\\Domain\\UseCase\\PresenceUseCase.cs",
"ViewState": "AQIAABUAAAAAAAAAAAAwwCcAAAA7AAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:38:10.123Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "SQLUserRepositoryImpl.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\SQLUserRepositoryImpl.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Repository\\SQLUserRepositoryImpl.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\SQLUserRepositoryImpl.cs",
"RelativeToolTip": "Demo1\\Data\\Repository\\SQLUserRepositoryImpl.cs",
"ViewState": "AQIAABUAAAAAAAAAAAAgwCAAAAAMAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:29:36.037Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "PresenceRepositoryImpl.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\PresenceRepositoryImpl.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Repository\\PresenceRepositoryImpl.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\PresenceRepositoryImpl.cs",
"RelativeToolTip": "Demo1\\Data\\Repository\\PresenceRepositoryImpl.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAqwAsAAAAqAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:34:21.103Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "MainMenu.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\UI\\MainMenu.cs",
"RelativeDocumentMoniker": "Demo1\\UI\\MainMenu.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\UI\\MainMenu.cs",
"RelativeToolTip": "Demo1\\UI\\MainMenu.cs",
"ViewState": "AQIAAMEAAAAAAAAAAAAswM4AAAAhAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:38:21.434Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "appsettings.json",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\appsettings.json",
"RelativeDocumentMoniker": "Demo1\\Data\\appsettings.json",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\appsettings.json",
"RelativeToolTip": "Demo1\\Data\\appsettings.json",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAIAAAAZAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-10-28T10:58:55.669Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "User.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\User.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\User.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\User.cs",
"RelativeToolTip": "Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\User.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAsAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-25T06:10:30.211Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "UserUseCase.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\UseCase\\UserUseCase.cs",
"RelativeDocumentMoniker": "Demo1\\Domain\\UseCase\\UserUseCase.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\UseCase\\UserUseCase.cs",
"RelativeToolTip": "Demo1\\Domain\\UseCase\\UserUseCase.cs",
"ViewState": "AQIAAAwAAAAAAAAAAAAowB4AAAAzAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:35:04.932Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "LocalPresence.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\LocalData\\Entity\\LocalPresence.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\LocalData\\Entity\\LocalPresence.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\LocalData\\Entity\\LocalPresence.cs",
"RelativeToolTip": "Demo1\\Data\\LocalData\\Entity\\LocalPresence.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAcAAAAHAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:27:05.651Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "Presence.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\Presence.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\Presence.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\Presence.cs",
"RelativeToolTip": "Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\Presence.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAHAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-25T06:10:23.933Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "Presence.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\Models\\Presence.cs",
"RelativeDocumentMoniker": "Demo1\\Domain\\Models\\Presence.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\Models\\Presence.cs",
"RelativeToolTip": "Demo1\\Domain\\Models\\Presence.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAYAAAAIAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T11:28:19.174Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 12,
"Title": "RemoteDatabase.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\RemoteDatabase.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\RemoteData\\RemoteDataBase\\RemoteDatabase.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\RemoteDatabase.cs",
"RelativeToolTip": "Demo1\\Data\\RemoteData\\RemoteDataBase\\RemoteDatabase.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAcAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:28:39.98Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 20,
"Title": "DesignTimeDbContextFactory.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\DesignTimeDbContextFactory.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\RemoteData\\RemoteDataBase\\DesignTimeDbContextFactory.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\DesignTimeDbContextFactory.cs",
"RelativeToolTip": "Demo1\\Data\\RemoteData\\RemoteDataBase\\DesignTimeDbContextFactory.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAsAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T11:06:13.548Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 13,
"Title": "User.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\LocalData\\Entity\\User.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\LocalData\\Entity\\User.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\LocalData\\Entity\\User.cs",
"RelativeToolTip": "Demo1\\Data\\LocalData\\Entity\\User.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAsAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:27:14.655Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 14,
"Title": "Group.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\LocalData\\Entity\\Group.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\LocalData\\Entity\\Group.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\LocalData\\Entity\\Group.cs",
"RelativeToolTip": "Demo1\\Data\\LocalData\\Entity\\Group.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:26:57.413Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 15,
"Title": "Group.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\Models\\Group.cs",
"RelativeDocumentMoniker": "Demo1\\Domain\\Models\\Group.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\Models\\Group.cs",
"RelativeToolTip": "Demo1\\Domain\\Models\\Group.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAQAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T11:07:39.146Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 18,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Program.cs",
"RelativeDocumentMoniker": "Demo1\\Program.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Program.cs",
"RelativeToolTip": "Demo1\\Program.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:38:33.792Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 16,
"Title": "User.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\Models\\User.cs",
"RelativeDocumentMoniker": "Demo1\\Domain\\Models\\User.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\Models\\User.cs",
"RelativeToolTip": "Demo1\\Domain\\Models\\User.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAoAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T11:07:52.222Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 17,
"Title": "Group.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\Group.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\Group.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\Group.cs",
"RelativeToolTip": "Demo1\\Data\\RemoteData\\RemoteDataBase\\DAO\\Group.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-25T06:10:17.912Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 19,
"Title": "DesignTimeDbContextFactoryBase.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\DesignTimeDbContextFactoryBase.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\RemoteData\\RemoteDataBase\\DesignTimeDbContextFactoryBase.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\RemoteData\\RemoteDataBase\\DesignTimeDbContextFactoryBase.cs",
"RelativeToolTip": "Demo1\\Data\\RemoteData\\RemoteDataBase\\DesignTimeDbContextFactoryBase.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABEAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T11:10:43.761Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 21,
"Title": "UserRepositoryImpl.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\UserRepositoryImpl.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Repository\\UserRepositoryImpl.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\UserRepositoryImpl.cs",
"RelativeToolTip": "Demo1\\Data\\Repository\\UserRepositoryImpl.cs",
"ViewState": "AQIAACcAAAAAAAAAAAAmwEAAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:34:09.025Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 22,
"Title": "IUserRepository.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\IUserRepository.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Repository\\IUserRepository.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\IUserRepository.cs",
"RelativeToolTip": "Demo1\\Data\\Repository\\IUserRepository.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAA4AAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:33:48.086Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 23,
"Title": "Demo1.csproj",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Demo1.csproj",
"RelativeDocumentMoniker": "Demo1\\Demo1.csproj",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Demo1.csproj",
"RelativeToolTip": "Demo1\\Demo1.csproj",
"ViewState": "AQIAAA8AAAAAAAAAAAAAABYAAABOAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
"WhenOpened": "2024-10-24T10:01:48.552Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 24,
"Title": "SQLGroupRepositoryImpl.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\SQLGroupRepositoryImpl.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Repository\\SQLGroupRepositoryImpl.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\SQLGroupRepositoryImpl.cs",
"RelativeToolTip": "Demo1\\Data\\Repository\\SQLGroupRepositoryImpl.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:29:17.772Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 25,
"Title": "IPresenceRepository.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\IPresenceRepository.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Repository\\IPresenceRepository.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\IPresenceRepository.cs",
"RelativeToolTip": "Demo1\\Data\\Repository\\IPresenceRepository.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABMAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:34:01.993Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 26,
"Title": "GroupConsole.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\UI\\GroupConsole.cs",
"RelativeDocumentMoniker": "Demo1\\UI\\GroupConsole.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\UI\\GroupConsole.cs",
"RelativeToolTip": "Demo1\\UI\\GroupConsole.cs",
"ViewState": "AQIAAGUAAAAAAAAAAAA7wHIAAAAXAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:55:00.521Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 27,
"Title": "GroupUseCase.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\UseCase\\GroupUseCase.cs",
"RelativeDocumentMoniker": "Demo1\\Domain\\UseCase\\GroupUseCase.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\UseCase\\GroupUseCase.cs",
"RelativeToolTip": "Demo1\\Domain\\UseCase\\GroupUseCase.cs",
"ViewState": "AQIAABMAAAAAAAAAAAAmwCwAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:35:09.914Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 28,
"Title": "UseCaseGeneratePresence.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\UseCase\\UseCaseGeneratePresence.cs",
"RelativeDocumentMoniker": "Demo1\\Domain\\UseCase\\UseCaseGeneratePresence.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Domain\\UseCase\\UseCaseGeneratePresence.cs",
"RelativeToolTip": "Demo1\\Domain\\UseCase\\UseCaseGeneratePresence.cs",
"ViewState": "AQIAABYAAAAAAAAAAAAYwDsAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:35:16.757Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 29,
"Title": "GroupRepositoryImpl.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\GroupRepositoryImpl.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Repository\\GroupRepositoryImpl.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\GroupRepositoryImpl.cs",
"RelativeToolTip": "Demo1\\Data\\Repository\\GroupRepositoryImpl.cs",
"ViewState": "AQIAAAYAAAAAAAAAAAAYwDMAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:34:14.924Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 30,
"Title": "IGroupRepository.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\IGroupRepository.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Repository\\IGroupRepository.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\IGroupRepository.cs",
"RelativeToolTip": "Demo1\\Data\\Repository\\IGroupRepository.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAA4AAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:33:53.901Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 31,
"Title": "RepositoryException.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Exceptions\\RepositoryException.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Exceptions\\RepositoryException.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Exceptions\\RepositoryException.cs",
"RelativeToolTip": "Demo1\\Data\\Exceptions\\RepositoryException.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:33:38.066Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 32,
"Title": "GroupNotFoundException.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Exceptions\\GroupNotFoundException.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Exceptions\\GroupNotFoundException.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Exceptions\\GroupNotFoundException.cs",
"RelativeToolTip": "Demo1\\Data\\Exceptions\\GroupNotFoundException.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:33:34.54Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 33,
"Title": "UserNotFoundException.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Exceptions\\UserNotFoundException.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Exceptions\\UserNotFoundException.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Exceptions\\UserNotFoundException.cs",
"RelativeToolTip": "Demo1\\Data\\Exceptions\\UserNotFoundException.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:33:29.274Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 35,
"Title": "UserConsole.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\UI\\UserConsole.cs",
"RelativeDocumentMoniker": "Demo1\\UI\\UserConsole.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\UI\\UserConsole.cs",
"RelativeToolTip": "Demo1\\UI\\UserConsole.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:32:43.036Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 36,
"Title": "RemoteDatabaseContextModelSnapshot.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Migrations\\RemoteDatabaseContextModelSnapshot.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Migrations\\RemoteDatabaseContextModelSnapshot.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Migrations\\RemoteDatabaseContextModelSnapshot.cs",
"RelativeToolTip": "Demo1\\Data\\Migrations\\RemoteDatabaseContextModelSnapshot.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAEAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:32:12.989Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 37,
"Title": "20241025085326_InitialCreate.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Migrations\\20241025085326_InitialCreate.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Migrations\\20241025085326_InitialCreate.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Migrations\\20241025085326_InitialCreate.cs",
"RelativeToolTip": "Demo1\\Data\\Migrations\\20241025085326_InitialCreate.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:32:05.385Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 38,
"Title": "SQLPresenceRepository.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\SQLPresenceRepository.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\Repository\\SQLPresenceRepository.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\Repository\\SQLPresenceRepository.cs",
"RelativeToolTip": "Demo1\\Data\\Repository\\SQLPresenceRepository.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:29:26.796Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 34,
"Title": "LocalStaticData.cs",
"DocumentMoniker": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\LocalData\\LocalStaticData.cs",
"RelativeDocumentMoniker": "Demo1\\Data\\LocalData\\LocalStaticData.cs",
"ToolTip": "C:\\Users\\class_Student\\source\\repos\\slarny4\\Demo1\\Data\\LocalData\\LocalStaticData.cs",
"RelativeToolTip": "Demo1\\Data\\LocalData\\LocalStaticData.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABwAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-10-28T09:27:24.986Z",
"EditorCaption": ""
}
]
}
]
}
]
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,6 @@
{
"ExpandedNodes": [
""
],
"PreviewInSolutionExplorer": false
}

BIN
.vs/slarny4/v17/.wsuo Normal file

Binary file not shown.

View File

@ -0,0 +1,12 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\class_Student\\source\\repos\\slarny4\\",
"Documents": [],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": []
}
]
}

View File

@ -1,9 +1,13 @@
using System;
// C:\Users\adm\Source\Repos\presence1\Demo\Data\Exceptions\GroupNotFoundException.cs
using System;
namespace AttendanceApp.Data.Exceptions
namespace Demo.Data.Exceptions
{
public class GroupNotFoundException : Exception
{
public GroupNotFoundException(string message) : base(message) { }
public GroupNotFoundException(int groupId)
: base($"Group with ID {groupId} was not found.")
{
}
}
}

View File

@ -1,9 +1,13 @@
using System;
// C:\Users\adm\Source\Repos\presence1\Demo\Data\Exceptions\RepositoryException.cs
using System;
namespace AttendanceApp.Data.Exceptions
namespace Demo.Data.Exceptions
{
public class RepositoryException : Exception
{
public RepositoryException(string message) : base(message) { }
public RepositoryException(string message)
: base(message)
{
}
}
}

View File

@ -1,9 +1,13 @@
using System;
// C:\Users\adm\Source\Repos\presence1\Demo\Data\Exceptions\UserNotFoundException.cs
using System;
namespace AttendanceApp.Data.Exceptions
namespace Demo.Data.Exceptions
{
public class UserNotFoundException : Exception
{
public UserNotFoundException(string message) : base(message) { }
public UserNotFoundException(Guid userId)
: base($"User with ID {userId} was not found.")
{
}
}
}

View File

@ -0,0 +1,9 @@
// Group.cs в LocalData/Entity
namespace Demo.Data.LocalData.Entity
{
public class Group
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,13 @@
// C:\Users\class_Student\source\repos\slarny4\Demo1\Data\LocalData\Entity\Presence.cs
using System;
namespace Demo.Data.LocalData.Entity
{
public class LocalPresence
{
public Guid UserId { get; set; }
public DateTime ClassDate { get; set; }
public int LessonNumber { get; set; } // Вместо ClassNumber
public bool WasPresent { get; set; } // Вместо IsPresent
}
}

View File

@ -0,0 +1,12 @@
// User.cs в LocalData/Entity
using System;
namespace Demo.Data.LocalData.Entity
{
public class User
{
public Guid Id { get; set; }
public string FIO { get; set; } = string.Empty;
public int GroupID { get; set; }
}
}

View File

@ -1,8 +0,0 @@
namespace AttendanceApp.Data.LocalData
{
public class LocalGroup
{
public int Id { get; set; }
public string Name { get; set; }
}
}

View File

@ -1,12 +0,0 @@
using System;
namespace AttendanceApp.Data.LocalData
{
public class LocalPresence
{
public DateTime ClassDate { get; set; }
public int ClassNumber { get; set; }
public bool IsPresent { get; set; }
public Guid UserId { get; set; }
}
}

View File

@ -0,0 +1,29 @@
// C:\Users\adm\Source\Repos\presence1\Demo\Data\LocalData\LocalStaticData.cs
using System;
using System.Collections.Generic;
using Demo.Data.LocalData.Entity;
namespace Demo.Data.LocalData
{
public static class LocalStaticData
{
public static List<User> Users = new List<User>
{
new User { Id = Guid.Parse("e6b9964d-ea9f-420a-84b9-af9633bbfab9"), FIO = "Иванов Иван Иванович", GroupID = 1 },
new User { Id = Guid.Parse("8388d931-5bef-41be-a152-78f1aca980ed"), FIO = "Петров Петр Петрович", GroupID = 2 },
new User { Id = Guid.Parse("ed174548-49ed-4503-a902-c970cbf27173"), FIO = "Мендалиев Наиль", GroupID = 3 },
new User { Id = Guid.Parse("614c0a23-5bd5-43ae-b48e-d5750afbc282"), FIO = "Сидоров Сидор Сидорович", GroupID = 1 },
new User { Id = Guid.Parse("efcc1473-c116-4244-b3f7-f2341a5c3003"), FIO = "Кузнецов Алексей Викторович", GroupID = 2 },
new User { Id = Guid.Parse("60640fb3-ace2-4cad-81d5-a0a58bc2dbbd"), FIO = "Смирнова Анна Сергеевна", GroupID = 3 }
};
public static List<Group> Groups = new List<Group>
{
new Group { Id = 1, Name = "ИП1-23" },
new Group { Id = 2, Name = "ИП1-22" },
new Group { Id = 3, Name = "С1-23" }
};
public static List<LocalPresence> Presences = new List<LocalPresence>();
}
}

View File

@ -1,11 +0,0 @@
using System;
namespace AttendanceApp.Data.LocalData
{
public class LocalUser
{
public Guid Id { get; set; }
public string FIO { get; set; }
public int GroupID { get; set; }
}
}

View File

@ -1,28 +0,0 @@
using System;
using System.Collections.Generic;
using AttendanceApp.Data.LocalData;
namespace AttendanceApp.Data
{
public static class LocalStaticData
{
public static List<LocalUser> Users { get; set; } = new List<LocalUser>
{
new LocalUser { Id = Guid.Parse("e6b9964d-ea9f-420a-84b9-af9633bbfab9"), FIO = "Иванов Иван Иванович", GroupID = 1 },
new LocalUser { Id = Guid.Parse("8388d931-5bef-41be-a152-78f1aca980ed"), FIO = "Петров Петр Петрович", GroupID = 2 },
new LocalUser { Id = Guid.Parse("ed174548-49ed-4503-a902-c970cbf27173"), FIO = "Мендалиев Наиль", GroupID = 3 },
new LocalUser { Id = Guid.Parse("614c0a23-5bd5-43ae-b48e-d5750afbc282"), FIO = "Сидоров Сидор Сидорович", GroupID = 1 },
new LocalUser { Id = Guid.Parse("efcc1473-c116-4244-b3f7-f2341a5c3003"), FIO = "Кузнецов Алексей Викторович", GroupID = 2 },
new LocalUser { Id = Guid.Parse("60640fb3-ace2-4cad-81d5-a0a58bc2dbbd"), FIO = "Смирнова Анна Сергеевна", GroupID = 3 }
};
public static List<LocalGroup> Groups { get; set; } = new List<LocalGroup>
{
new LocalGroup { Id = 1, Name = "ИП1-22" },
new LocalGroup { Id = 2, Name = "ИП1-23" },
new LocalGroup { Id = 3, Name = "С1-23" }
};
public static List<LocalPresence> Presences { get; set; } = new List<LocalPresence>();
}
}

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo1.Data.Migrations
{
internal class _20241025085326_InitialCreate
{
}
}

View File

@ -0,0 +1,44 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Demo1.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("Demo.Data.RemoteData.RemoteDataBase.DAO.User", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<string>("FIO")
.IsRequired()
.HasColumnType("text");
b.Property<int>("GroupID")
.HasColumnType("integer");
b.HasKey("Id");
b.ToTable("Users");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,9 @@
// Group.cs в RemoteData/RemoteDataBase/DAO
namespace Demo.Data.RemoteData.RemoteDataBase.DAO
{
public class Group
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,16 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace Demo.Data.RemoteData.RemoteDataBase.DAO
{
public class Presence
{
[Key]
public int PresenceId { get; set; } // Уникальный идентификатор записи
public DateTime ClassDate { get; set; }
public int LessonNumber { get; set; }
public bool WasPresent { get; set; }
public Guid UserId { get; set; }
// Убрать объект Id
}
}

View File

@ -0,0 +1,12 @@
using System;
namespace Demo.Data.RemoteData.RemoteDataBase.DAO
{
public class User
{
public Guid Id { get; set; }
public string FIO { get; set; } = string.Empty;
public int GroupID { get; set; }
}
}

View File

@ -0,0 +1,12 @@
using Microsoft.EntityFrameworkCore;
namespace Demo.Data.RemoteData.RemoteDataBase
{
public class DesignTimeDbContextFactory : DesignTimeDbContextFactoryBase<RemoteDatabaseContext>
{
protected override RemoteDatabaseContext CreateNewInstance(DbContextOptions<RemoteDatabaseContext> options)
{
return new RemoteDatabaseContext(options);
}
}
}

View File

@ -0,0 +1,18 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
namespace Demo.Data.RemoteData.RemoteDataBase
{
public abstract class DesignTimeDbContextFactoryBase<TContext> : IDesignTimeDbContextFactory<TContext> where TContext : DbContext
{
public TContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<TContext>();
builder.UseNpgsql("Host=45.67.56.214;Port=5421;Database=PresenceDB;Username=user5;Password=EtEJqhsf");
return CreateNewInstance(builder.Options);
}
protected abstract TContext CreateNewInstance(DbContextOptions<TContext> options);
}
}

View File

@ -0,0 +1,8 @@
// C:\Users\adm\Source\Repos\presence1\Demo\Data\RemoteData\RemoteDataBase\RemoteDatabase.cs
namespace Demo.Data.RemoteData.RemoteDataBase
{
public class RemoteDatabase
{
// Логика подключения к удаленной базе данных
}
}

View File

@ -0,0 +1,17 @@
using Demo.Data.LocalData.Entity;
using Microsoft.EntityFrameworkCore;
public class RemoteDatabaseContext : DbContext
{
public DbSet<User> Users { get; set; }
public RemoteDatabaseContext(DbContextOptions<RemoteDatabaseContext> options) : base(options) { }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseNpgsql("Host=45.67.56.214;Port=5421;Database=PresenceDB;Username=user5;Password=EtEJqhsf");
}
}
}

View File

@ -1,60 +1,52 @@
using AttendanceApp.Data.Exceptions;
using AttendanceApp.Data.LocalData;
using AttendanceApp.Domain.Models;
// C:\Users\adm\Source\Repos\presence1\Demo\Data\Repository\GroupRepositoryImpl.cs
using System.Collections.Generic;
using System.Linq;
using Demo.Data.Exceptions;
using Demo.Data.LocalData;
using Demo.Data.LocalData.Entity;
using Demo.Data.RemoteData.RemoteDataBase;
namespace AttendanceApp.Data.Repository
namespace Demo.Data.Repository
{
public class GroupRepositoryImpl : IGroupRepository
{
private readonly List<LocalGroup> _groups = LocalStaticData.Groups;
private RemoteDatabaseContext context;
public IEnumerable<Group> GetAllGroups()
public GroupRepositoryImpl(RemoteDatabaseContext context)
{
return _groups.Select(g => new Group
{
Id = g.Id,
Name = g.Name
});
}
public Group GetGroupById(int id)
{
var localGroup = _groups.FirstOrDefault(g => g.Id == id);
if (localGroup == null)
throw new GroupNotFoundException($"Группа с ID {id} не найдена.");
return new Group
{
Id = localGroup.Id,
Name = localGroup.Name
};
this.context = context;
}
public void AddGroup(Group group)
{
_groups.Add(new LocalGroup
{
Id = group.Id,
Name = group.Name
});
}
public void UpdateGroup(Group group)
{
var localGroup = _groups.FirstOrDefault(g => g.Id == group.Id);
if (localGroup == null)
throw new GroupNotFoundException($"Группа с ID {group.Id} не найдена.");
localGroup.Name = group.Name;
if (LocalStaticData.Groups.Any(g => g.Id == group.Id))
throw new RepositoryException("Group with the same ID already exists.");
LocalStaticData.Groups.Add(group);
}
public void DeleteGroup(int id)
{
var group = _groups.FirstOrDefault(g => g.Id == id);
if (group == null)
throw new GroupNotFoundException($"Группа с ID {id} не найдена.");
var group = GetGroupById(id);
LocalStaticData.Groups.Remove(group);
}
_groups.Remove(group);
public IEnumerable<Group> GetAllGroups()
{
return LocalStaticData.Groups;
}
public Group GetGroupById(int id)
{
var group = LocalStaticData.Groups.FirstOrDefault(g => g.Id == id);
if (group == null)
throw new GroupNotFoundException(id);
return group;
}
public void UpdateGroup(Group group)
{
var existingGroup = GetGroupById(group.Id);
existingGroup.Name = group.Name;
}
}
}

View File

@ -1,7 +1,8 @@
using System.Collections.Generic;
using AttendanceApp.Domain.Models;
// C:\Users\adm\Source\Repos\presence1\Demo\Data\Repository\IGroupRepository.cs
using System.Collections.Generic;
using Demo.Data.LocalData.Entity;
namespace AttendanceApp.Data.Repository
namespace Demo.Data.Repository
{
public interface IGroupRepository
{

View File

@ -1,13 +1,20 @@
using AttendanceApp.Domain.Models;
// IPresenceRepository.cs
using System;
using System.Collections.Generic;
using AttendanceApp.Domain.Models;
using Demo.Data.LocalData.Entity;
namespace AttendanceApp.Data.Repository
namespace Demo.Data.Repository
{
public interface IPresenceRepository
{
IEnumerable<Presence> GetPresenceByGroupAndDate(int groupId, DateTime date);
IEnumerable<Presence> GetPresenceByGroup(int groupId);
void AddPresence(Presence presence);
IEnumerable<LocalPresence> GetPresencesByGroupAndDate(int groupId, DateTime date);
void AddPresence(LocalPresence presence);
void UpdatePresence(LocalPresence presence);
IEnumerable<LocalPresence> GetAllPresences();
IEnumerable<LocalPresence> GetPresenceByGroup(int groupId);
void UpdatePresence(Presence presence);
// Дополнительные методы по необходимости
// Удалите этот метод, так как он дублирует GetPresencesByGroupAndDate
// IEnumerable<object> GetPresenceByGroupAndDate(int groupId, DateTime date);
}
}

View File

@ -1,6 +1,8 @@
using AttendanceApp.Domain.Models;
using System;
using System.Collections.Generic;
using Demo.Domain.Models;
namespace AttendanceApp.Data.Repository
namespace Demo.Data.Repository
{
public interface IUserRepository
{

View File

@ -1,70 +1,70 @@
using AttendanceApp.Data.Exceptions;
using AttendanceApp.Data.LocalData;
using AttendanceApp.Domain.Models;
// C:\Users\adm\Source\Repos\presence1\Demo\Data\Repository\PresenceRepositoryImpl.cs
using System;
using System.Collections.Generic;
using System.Linq;
using AttendanceApp.Domain.Models;
using Demo.Data.LocalData;
using Demo.Data.LocalData.Entity;
using Demo.Data.RemoteData.RemoteDataBase;
namespace AttendanceApp.Data.Repository
namespace Demo.Data.Repository
{
public class PresenceRepositoryImpl : IPresenceRepository
{
private readonly List<LocalPresence> _presences = LocalStaticData.Presences;
private RemoteDatabaseContext context;
public IEnumerable<Presence> GetPresenceByGroupAndDate(int groupId, DateTime date)
public PresenceRepositoryImpl(RemoteDatabaseContext context)
{
var usersInGroup = LocalStaticData.Users.Where(u => u.GroupID == groupId).Select(u => u.Id);
return _presences
.Where(p => usersInGroup.Contains(p.UserId) && p.ClassDate.Date == date.Date)
.Select(p => new Presence
{
ClassDate = p.ClassDate,
ClassNumber = p.ClassNumber,
IsPresent = p.IsPresent,
UserId = p.UserId
});
this.context = context;
}
public IEnumerable<Presence> GetPresenceByGroup(int groupId)
public void AddPresence(LocalPresence presence)
{
var usersInGroup = LocalStaticData.Users
.Where(u => u.GroupID == groupId)
.Select(u => u.Id);
return _presences
.Where(p => usersInGroup.Contains(p.UserId))
.Select(p => new Presence
{
ClassDate = p.ClassDate,
ClassNumber = p.ClassNumber,
IsPresent = p.IsPresent,
UserId = p.UserId
})
.OrderBy(p => p.ClassDate)
.ThenBy(p => p.ClassNumber);
LocalStaticData.Presences.Add(presence);
}
public void AddPresence(Presence presence)
public IEnumerable<LocalPresence> GetAllPresences()
{
_presences.Add(new LocalPresence
return LocalStaticData.Presences;
}
public IEnumerable<object> GetPresenceByGroup(int groupId)
{
throw new NotImplementedException();
}
public IEnumerable<object> GetPresenceByGroupAndDate(int groupId, DateTime date)
{
throw new NotImplementedException();
}
public IEnumerable<LocalPresence> GetPresencesByGroupAndDate(int groupId, DateTime date)
{
var usersInGroup = LocalStaticData.Users.Where(u => u.GroupID == groupId).Select(u => u.Id).ToList();
return LocalStaticData.Presences.Where(p => usersInGroup.Contains(p.UserId) && p.ClassDate.Date == date.Date);
}
public void UpdatePresence(LocalPresence presence)
{
var existingPresence = LocalStaticData.Presences.FirstOrDefault(p =>
p.UserId == presence.UserId &&
p.ClassDate.Date == presence.ClassDate.Date &&
p.LessonNumber == presence.LessonNumber);
if (existingPresence != null)
{
ClassDate = presence.ClassDate,
ClassNumber = presence.ClassNumber,
IsPresent = presence.IsPresent,
UserId = presence.UserId
});
existingPresence.WasPresent = presence.WasPresent;
}
}
public void UpdatePresence(Presence presence)
{
var localPresence = _presences.FirstOrDefault(p =>
p.UserId == presence.UserId &&
p.ClassDate.Date == presence.ClassDate.Date &&
p.ClassNumber == presence.ClassNumber);
throw new NotImplementedException();
}
if (localPresence == null)
throw new RepositoryException("Посещаемость не найдена.");
localPresence.IsPresent = presence.IsPresent;
IEnumerable<LocalPresence> IPresenceRepository.GetPresenceByGroup(int groupId)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo1.Data.Repository
{
internal class SQLGroupRepositoryImpl
{
}
}

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo1.Data.Repository
{
internal class SQLPresenceRepository
{
}
}

View File

@ -0,0 +1,75 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Demo.Data.RemoteData.RemoteDataBase.DAO; // DAO User
using UserDomain = Demo.Domain.Models.User; // Доменная модель
using UserEntity = Demo.Data.LocalData.Entity.User; // Локальная сущность
namespace Demo.Data.Repository
{
public class SQLUserRepositoryImpl : IUserRepository
{
private readonly RemoteDatabaseContext _context;
public SQLUserRepositoryImpl(RemoteDatabaseContext context)
{
_context = context;
}
public void AddUser(UserDomain user)
{
var daoUser = new UserEntity // Используем локальную сущность
{
Id = user.Id,
FIO = user.FIO,
GroupID = user.GroupID
};
_context.Users.Add(daoUser);
_context.SaveChanges();
}
public IEnumerable<UserDomain> GetAllUsers()
{
return _context.Users.Select(u => new UserDomain
{
Id = u.Id,
FIO = u.FIO,
GroupID = u.GroupID
}).ToList();
}
public UserDomain GetUserById(Guid id)
{
var daoUser = _context.Users.Find(id);
if (daoUser == null) return null;
return new UserDomain
{
Id = daoUser.Id,
FIO = daoUser.FIO,
GroupID = daoUser.GroupID
};
}
public void UpdateUser(UserDomain user)
{
var daoUser = _context.Users.Find(user.Id);
if (daoUser != null)
{
daoUser.FIO = user.FIO;
daoUser.GroupID = user.GroupID;
_context.SaveChanges();
}
}
public void DeleteUser(Guid id)
{
var daoUser = _context.Users.Find(id);
if (daoUser != null)
{
_context.Users.Remove(daoUser);
_context.SaveChanges();
}
}
}
}

View File

@ -1,64 +1,65 @@
using AttendanceApp.Data.Exceptions;
using AttendanceApp.Data.LocalData;
using AttendanceApp.Domain.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using Demo.Domain.Models;
using Demo.Data.LocalData;
namespace AttendanceApp.Data.Repository
namespace Demo.Data.Repository
{
public class UserRepositoryImpl : IUserRepository
{
private readonly List<LocalUser> _users = LocalStaticData.Users;
public IEnumerable<User> GetAllUsers()
{
return _users.Select(u => new User
return LocalStaticData.Users.Select(u => new User
{
Id = u.Id,
FIO = u.FIO,
GroupId = u.GroupID
GroupID = u.GroupID
});
}
public User GetUserById(Guid id)
{
var localUser = _users.FirstOrDefault(u => u.Id == id);
var localUser = LocalStaticData.Users.FirstOrDefault(u => u.Id == id);
if (localUser == null)
throw new UserNotFoundException($"Пользователь с ID {id} не найден.");
throw new Exception("User not found");
return new User
{
Id = localUser.Id,
FIO = localUser.FIO,
GroupId = localUser.GroupID
GroupID = localUser.GroupID
};
}
public void AddUser(User user)
{
_users.Add(new LocalUser
var localUser = new LocalData.Entity.User
{
Id = user.Id,
FIO = user.FIO,
GroupID = user.GroupId
});
GroupID = user.GroupID
};
LocalStaticData.Users.Add(localUser);
}
public void UpdateUser(User user)
{
var localUser = _users.FirstOrDefault(u => u.Id == user.Id);
var localUser = LocalStaticData.Users.FirstOrDefault(u => u.Id == user.Id);
if (localUser == null)
throw new UserNotFoundException($"Пользователь с ID {user.Id} не найден.");
throw new Exception("User not found");
localUser.FIO = user.FIO;
localUser.GroupID = user.GroupId;
localUser.GroupID = user.GroupID;
}
public void DeleteUser(Guid id)
{
var user = _users.FirstOrDefault(u => u.Id == id);
if (user == null)
throw new UserNotFoundException($"Пользователь с ID {id} не найден.");
_users.Remove(user);
var user = LocalStaticData.Users.FirstOrDefault(u => u.Id == id);
if (user != null)
{
LocalStaticData.Users.Remove(user);
}
}
}
}

View File

@ -0,0 +1,5 @@
{
"ConnectionStrings": {
"DefaultConnection": "Host=45.67.56.214;Port=5421;Database=PresenceDB;Username=user5;Password=EtEJqhsf"
}
}

View File

@ -7,4 +7,24 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.10" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Data\RemoteData\RemoteApi\" />
</ItemGroup>
</Project>

View File

@ -1,8 +1,5 @@
namespace AttendanceApp.Domain.Models
public class Group
{
public class Group
{
public int Id { get; set; }
public string Name { get; set; }
}
public int Id { get; set; }
public string Name { get; set; } = string.Empty; // Добавляем значение по умолчанию
}

View File

@ -8,5 +8,7 @@ namespace AttendanceApp.Domain.Models
public int ClassNumber { get; set; }
public bool IsPresent { get; set; }
public Guid UserId { get; set; }
public bool WasPresent { get; internal set; }
public int LessonNumber { get; internal set; }
}
}

View File

@ -1,11 +1,11 @@
using System;
namespace AttendanceApp.Domain.Models
namespace Demo.Domain.Models
{
public class User
{
public Guid Id { get; set; }
public string FIO { get; set; }
public int GroupId { get; set; }
public string FIO { get; set; } = string.Empty;
public int GroupID { get; set; }
}
}

View File

@ -1,8 +1,10 @@
using System.Collections.Generic;
using AttendanceApp.Data.Repository;
using AttendanceApp.Domain.Models;
// C:\Users\class_Student\source\repos\slarny4\Demo1\Domain\UseCase\GroupUseCase.cs
using System.Collections.Generic;
using System.Linq;
using Demo.Data.LocalData.Entity;
using Demo.Data.Repository;
namespace AttendanceApp.Domain.UseCases
namespace Demo.Domain.UseCase
{
public class GroupUseCase
{
@ -37,5 +39,7 @@ namespace AttendanceApp.Domain.UseCases
{
_groupRepository.DeleteGroup(id);
}
// Дополнительные методы, если нужны
}
}

View File

@ -0,0 +1,45 @@
// C:\Users\class_Student\source\repos\slarny4\Demo1\Domain\UseCase\PresenceUseCase.cs
using System;
using System.Collections.Generic;
using Demo.Data.LocalData.Entity;
using Demo.Data.Repository;
namespace Demo.Domain.UseCase
{
public class PresenceUseCase
{
private readonly IPresenceRepository _presenceRepository;
private readonly IGroupRepository _groupRepository;
private readonly IUserRepository _userRepository;
public PresenceUseCase(IPresenceRepository presenceRepository, IGroupRepository groupRepository, IUserRepository userRepository)
{
_presenceRepository = presenceRepository;
_groupRepository = groupRepository;
_userRepository = userRepository;
}
public IEnumerable<LocalPresence> GetPresencesByGroupAndDate(int groupId, DateTime date)
{
return _presenceRepository.GetPresencesByGroupAndDate(groupId, date);
}
public void MarkUserAbsent(Guid userId, int lessonNumber, DateTime date)
{
var presence = _presenceRepository.GetAllPresences();
foreach (var p in presence)
{
if (p.UserId == userId && p.ClassDate.Date == date.Date && p.LessonNumber == lessonNumber)
{
p.WasPresent = false;
_presenceRepository.UpdatePresence(p);
}
}
}
public IEnumerable<LocalPresence> GetAllPresences()
{
return _presenceRepository.GetAllPresences();
}
}
}

View File

@ -1,51 +1,59 @@
using System;
using System.Collections.Generic;
// C:\Users\adm\Source\Repos\presence1\Demo\Domain\UseCase\UseCaseGeneratePresence.cs
using System;
using System.Linq;
using AttendanceApp.Data.Repository;
using AttendanceApp.Domain.Models;
using Demo.Data.LocalData;
using Demo.Data.LocalData.Entity;
using Demo.Data.Repository;
namespace AttendanceApp.Domain.UseCases
namespace Demo.Domain.UseCase
{
public class UseCaseGeneratePresence
{
private readonly IPresenceRepository _presenceRepository;
private readonly IUserRepository _userRepository;
private readonly IGroupRepository _groupRepository;
public UseCaseGeneratePresence(IPresenceRepository presenceRepository, IUserRepository userRepository, IGroupRepository groupRepository)
public UseCaseGeneratePresence(IPresenceRepository presenceRepository, IUserRepository userRepository)
{
_presenceRepository = presenceRepository;
_userRepository = userRepository;
_groupRepository = groupRepository;
}
public void GenerateDailyPresence(int firstClassNumber, int lastClassNumber, int groupId, DateTime date)
public void GenerateDailyPresence(int groupId, int firstLesson, int lastLesson, DateTime date)
{
var group = _groupRepository.GetGroupById(groupId);
var users = _userRepository.GetAllUsers().Where(u => u.GroupId == groupId);
var users = _userRepository.GetAllUsers().Where(u => u.GroupID == groupId).ToList();
foreach (var user in users)
{
for (int classNum = firstClassNumber; classNum <= lastClassNumber; classNum++)
for (int lesson = firstLesson; lesson <= lastLesson; lesson++)
{
var presence = new Presence
var existing = LocalStaticData.Presences.FirstOrDefault(p =>
p.UserId == user.Id &&
p.ClassDate.Date == date.Date &&
p.LessonNumber == lesson);
if (existing == null)
{
ClassDate = date.Date,
ClassNumber = classNum,
IsPresent = true,
UserId = user.Id
};
_presenceRepository.AddPresence(presence);
var presence = new LocalPresence
{
UserId = user.Id,
ClassDate = date.Date,
LessonNumber = lesson,
WasPresent = true
};
_presenceRepository.AddPresence(presence);
}
}
}
}
public void GenerateWeeklyPresence(int firstClassNumber, int lastClassNumber, int groupId, DateTime startDate)
public void GenerateWeeklyPresence(int groupId, int firstLesson, int lastLesson, DateTime startDate)
{
for (int i = 0; i < 7; i++)
{
var currentDate = startDate.AddDays(i);
GenerateDailyPresence(firstClassNumber, lastClassNumber, groupId, currentDate);
var date = startDate.AddDays(i);
if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
continue; // Пропускаем выходные
GenerateDailyPresence(groupId, firstLesson, lastLesson, date);
}
}
}

View File

@ -1,9 +1,10 @@
using System;
using System.Collections.Generic;
using AttendanceApp.Data.Repository;
using AttendanceApp.Domain.Models;
using Demo.Data.LocalData.Entity; // Убедитесь, что это пространство имен присутствует
using Demo.Data.Repository;
using Demo.Domain.Models;
namespace AttendanceApp.Domain.UseCases
namespace Demo.Domain.UseCase
{
public class UserUseCase
{
@ -14,29 +15,30 @@ namespace AttendanceApp.Domain.UseCases
_userRepository = userRepository;
}
public IEnumerable<User> GetAllUsers()
public IEnumerable<Domain.Models.User> GetAllUsers()
{
return _userRepository.GetAllUsers();
}
public User GetUserById(Guid id)
{
return _userRepository.GetUserById(id);
}
public void AddUser(User user)
public void AddUser(Domain.Models.User user)
{
_userRepository.AddUser(user);
}
public void UpdateUser(User user)
// Пример исправления
public Domain.Models.User GetUserById(Guid id)
{
_userRepository.UpdateUser(user);
return _userRepository.GetUserById(id);
}
public void DeleteUser(Guid id)
internal void DeleteUser(Guid userId)
{
_userRepository.DeleteUser(id);
throw new NotImplementedException();
}
internal void UpdateUser(Models.User user)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,47 @@
// <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;
#nullable disable
namespace Demo1.Migrations
{
[DbContext(typeof(RemoteDatabaseContext))]
[Migration("20241028115815_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("Demo.Data.RemoteData.RemoteDataBase.DAO.User", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<string>("FIO")
.IsRequired()
.HasColumnType("text");
b.Property<int>("GroupID")
.HasColumnType("integer");
b.HasKey("Id");
b.ToTable("Users");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,35 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Demo1.Migrations
{
/// <inheritdoc />
public partial class InitialCreate : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Users",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
FIO = table.Column<string>(type: "text", nullable: false),
GroupID = table.Column<int>(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Users", x => x.Id);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Users");
}
}
}

View File

@ -1,14 +1,13 @@
using System;
using AttendanceApp.UI;
using Demo.UI;
namespace AttendanceApp
namespace Demo
{
class Program
{
static void Main(string[] args)
{
var mainMenu = new MainMenu();
mainMenu.Show();
MainMenu menu = new MainMenu();
menu.Show();
}
}
}

View File

@ -1,8 +1,8 @@
using System;
using AttendanceApp.Domain.UseCases;
using AttendanceApp.Domain.Models;
using AttendanceApp.Data.Exceptions;
using Demo.Domain.UseCase;
using Demo.Data.Repository;
using Demo.Data.LocalData.Entity;
using Demo.Data.Exceptions;
namespace AttendanceApp.UI
{
public class GroupConsole

View File

@ -1,37 +1,58 @@
using AttendanceApp.Domain.UseCases;
using AttendanceApp.Data.Repository;
using Demo1;
// C:\Users\class_Student\source\repos\slarny4\Demo1\UI\MainMenu.cs
using System;
using System.Globalization;
using System.Linq;
using Demo.Domain.Models;
using Demo.Domain.UseCase;
using Demo.Data.Repository;
using Demo.Data.LocalData.Entity;
using Demo.Data.RemoteData.RemoteDataBase;
using Microsoft.EntityFrameworkCore;
namespace AttendanceApp.UI
namespace Demo.UI
{
public class MainMenu
{
private readonly UserConsole _userConsole;
private readonly GroupConsole _groupConsole;
private readonly PresenceConsole _presenceConsole;
private readonly UserUseCase _userUseCase;
private readonly GroupUseCase _groupUseCase;
private readonly UseCaseGeneratePresence _presenceGenerator;
private readonly PresenceUseCase _presenceUseCase;
public MainMenu()
private readonly RemoteDatabaseContext _context;
public MainMenu(RemoteDatabaseContext context = null)
{
// Инициализация репозиториев и use cases
var userRepository = new UserRepositoryImpl();
var groupRepository = new GroupRepositoryImpl();
var presenceRepository = new PresenceRepositoryImpl();
if (context == null)
{
// Если контекст не предоставлен, создаем новый
var optionsBuilder = new DbContextOptionsBuilder<RemoteDatabaseContext>();
optionsBuilder.UseNpgsql("Host=45.67.56.214;Port=5421;Database=PresenceDB;Username=user5;Password=EtEJqhsf");
_context = new RemoteDatabaseContext(optionsBuilder.Options);
}
else
{
_context = context;
}
var userUseCase = new UserUseCase(userRepository);
var groupUseCase = new GroupUseCase(groupRepository);
var generatePresenceUseCase = new UseCaseGeneratePresence(presenceRepository, userRepository, groupRepository);
// Инициализация репозиториев
IUserRepository userRepository = new SQLUserRepositoryImpl(_context);
IGroupRepository groupRepository = new GroupRepositoryImpl(_context);
IPresenceRepository presenceRepository = new PresenceRepositoryImpl(_context);
_userConsole = new UserConsole(userUseCase);
_groupConsole = new GroupConsole(groupUseCase);
_presenceConsole = new PresenceConsole(generatePresenceUseCase, presenceRepository, groupRepository);
// Инициализация use cases
_userUseCase = new UserUseCase(userRepository);
_groupUseCase = new GroupUseCase(groupRepository);
_presenceGenerator = new UseCaseGeneratePresence(presenceRepository, userRepository);
_presenceUseCase = new PresenceUseCase(presenceRepository, groupRepository, userRepository);
}
public void Show()
{
while (true)
bool exit = false;
while (!exit)
{
Console.Clear();
Console.WriteLine("=== Меню ===");
Console.WriteLine("=== Учёт Посещаемости ===");
Console.WriteLine("1. Показать всех пользователей");
Console.WriteLine("2. Удалить пользователя по GUID");
Console.WriteLine("3. Обновить пользователя");
@ -45,63 +66,459 @@ namespace AttendanceApp.UI
Console.WriteLine("11. Генерация посещаемости на неделю");
Console.WriteLine("12. Показать посещаемость по группе и дате");
Console.WriteLine("13. Отметить пользователя как отсутствующего");
Console.WriteLine("14. Показать посещаемость по группе");
Console.WriteLine("14. Вывести всю посещаемость");
Console.WriteLine("0. Выход");
Console.Write("Выберите опцию: ");
Console.Write("Выберите пункт меню: ");
var input = Console.ReadLine() ?? string.Empty;
Console.WriteLine();
var input = Console.ReadLine();
switch (input)
{
case "1":
_userConsole.ShowAllUsers();
ShowAllUsers();
break;
case "2":
_userConsole.DeleteUser();
DeleteUserByGuid();
break;
case "3":
_userConsole.UpdateUser();
UpdateUser();
break;
case "4":
_userConsole.FindUserById();
FindUserByGuid();
break;
case "5":
_groupConsole.ShowAllGroups();
ShowAllGroups();
break;
case "6":
_groupConsole.AddGroup();
AddGroup();
break;
case "7":
_groupConsole.UpdateGroup();
UpdateGroup();
break;
case "8":
_groupConsole.DeleteGroup();
DeleteGroupById();
break;
case "9":
_groupConsole.FindGroupById();
FindGroupById();
break;
case "10":
_presenceConsole.GenerateDailyPresence();
GenerateDailyPresence();
break;
case "11":
_presenceConsole.GenerateWeeklyPresence();
GenerateWeeklyPresence();
break;
case "12":
_presenceConsole.ShowPresenceByGroupAndDate();
ShowPresenceByGroupAndDate();
break;
case "13":
_presenceConsole.MarkUserAbsent();
MarkUserAbsent();
break;
case "14":
_presenceConsole.ShowPresenceByGroup();
ShowAllPresences();
break;
case "0":
return;
exit = true;
break;
default:
Console.WriteLine("Неверная опция. Нажмите любую клавишу для продолжения...");
Console.WriteLine("Неверный выбор. Нажмите любую клавишу для продолжения...");
Console.ReadKey();
break;
}
}
}
private void ShowAllUsers()
{
var users = _userUseCase.GetAllUsers();
Console.WriteLine("Список пользователей:");
foreach (var user in users)
{
var group = _groupUseCase.GetGroupById(user.GroupID);
Console.WriteLine($"ID: {user.Id} | ФИО: {user.FIO} | Группа: {group?.Name ?? "Неизвестно"}");
}
Pause();
}
private void DeleteUserByGuid()
{
Console.Write("Введите GUID пользователя для удаления: ");
var input = Console.ReadLine();
if (Guid.TryParse(input, out Guid userId))
{
try
{
_userUseCase.DeleteUser(userId);
Console.WriteLine("Пользователь удалён.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат GUID.");
}
Pause();
}
private void UpdateUser()
{
Console.Write("Введите GUID пользователя для обновления: ");
var input = Console.ReadLine();
if (Guid.TryParse(input, out Guid userId))
{
try
{
var user = _userUseCase.GetUserById(userId);
Console.WriteLine($"Текущие данные: ФИО: {user.FIO}, Группа ID: {user.GroupID}");
Console.Write("Введите новое ФИО (оставьте пустым, чтобы сохранить текущее): ");
var newFIO = Console.ReadLine();
Console.Write("Введите новый ID группы (оставьте пустым, чтобы сохранить текущую): ");
var groupInput = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(newFIO))
{
user.FIO = newFIO;
}
if (!string.IsNullOrWhiteSpace(groupInput))
{
if (int.TryParse(groupInput, out int newGroupId))
{
var group = _groupUseCase.GetGroupById(newGroupId);
if (group != null)
{
user.GroupID = newGroupId;
}
else
{
Console.WriteLine("Группа с таким ID не найдена. Группа не обновлена.");
}
}
else
{
Console.WriteLine("Неверный формат ID группы. Группа не обновлена.");
}
}
_userUseCase.UpdateUser(user);
Console.WriteLine("Пользователь обновлён.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат GUID.");
}
Pause();
}
private void FindUserByGuid()
{
Console.Write("Введите GUID пользователя для поиска: ");
var input = Console.ReadLine();
if (Guid.TryParse(input, out Guid userId))
{
try
{
var user = _userUseCase.GetUserById(userId);
var group = _groupUseCase.GetGroupById(user.GroupID);
Console.WriteLine($"ID: {user.Id} | ФИО: {user.FIO} | Группа: {group?.Name ?? "Неизвестно"}");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат GUID.");
}
Pause();
}
private void ShowAllGroups()
{
var groups = _groupUseCase.GetAllGroups();
Console.WriteLine("Список групп:");
foreach (var group in groups)
{
Console.WriteLine($"ID: {group.Id} | Название: {group.Name}");
}
Pause();
}
private void AddGroup()
{
Console.Write("Введите ID группы: ");
var idInput = Console.ReadLine();
Console.Write("Введите название группы: ");
var name = Console.ReadLine() ?? string.Empty;
if (int.TryParse(idInput, out int groupId))
{
var existingGroup = _groupUseCase.GetGroupById(groupId);
if (existingGroup != null)
{
Console.WriteLine("Группа с таким ID уже существует.");
}
else
{
var group = new Group
{
Id = groupId,
Name = name
};
try
{
_groupUseCase.AddGroup(group);
Console.WriteLine("Группа добавлена.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
}
else
{
Console.WriteLine("Неверный формат ID группы.");
}
Pause();
}
private void UpdateGroup()
{
Console.Write("Введите ID группы для обновления: ");
var idInput = Console.ReadLine();
if (int.TryParse(idInput, out int groupId))
{
try
{
var group = _groupUseCase.GetGroupById(groupId);
Console.WriteLine($"Текущие данные: Название: {group.Name}");
Console.Write("Введите новое название группы: ");
var newName = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(newName))
{
group.Name = newName;
_groupUseCase.UpdateGroup(group);
Console.WriteLine("Группа обновлена.");
}
else
{
Console.WriteLine("Название не может быть пустым. Группа не обновлена.");
}
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат ID группы.");
}
Pause();
}
private void DeleteGroupById()
{
Console.Write("Введите ID группы для удаления: ");
var input = Console.ReadLine();
if (int.TryParse(input, out int groupId))
{
try
{
_groupUseCase.DeleteGroup(groupId);
Console.WriteLine("Группа удалена.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат ID группы.");
}
Pause();
}
private void FindGroupById()
{
Console.Write("Введите ID группы для поиска: ");
var input = Console.ReadLine();
if (int.TryParse(input, out int groupId))
{
try
{
var group = _groupUseCase.GetGroupById(groupId);
Console.WriteLine($"ID: {group.Id} | Название: {group.Name}");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат ID группы.");
}
Pause();
}
private void GenerateDailyPresence()
{
Console.Write("Введите номер первой пары: ");
var firstLessonInput = Console.ReadLine();
Console.Write("Введите номер последней пары: ");
var lastLessonInput = Console.ReadLine();
Console.Write("Введите ID группы: ");
var groupIdInput = Console.ReadLine();
Console.Write("Введите дату (yyyy-MM-dd): ");
var dateInput = Console.ReadLine();
if (int.TryParse(firstLessonInput, out int firstLesson) &&
int.TryParse(lastLessonInput, out int lastLesson) &&
int.TryParse(groupIdInput, out int groupId) &&
DateTime.TryParseExact(dateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date))
{
try
{
_presenceGenerator.GenerateDailyPresence(groupId, firstLesson, lastLesson, date);
Console.WriteLine("Посещаемость сгенерирована.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверные входные данные.");
}
Pause();
}
private void GenerateWeeklyPresence()
{
Console.Write("Введите номер первой пары: ");
var firstLessonInput = Console.ReadLine();
Console.Write("Введите номер последней пары: ");
var lastLessonInput = Console.ReadLine();
Console.Write("Введите ID группы: ");
var groupIdInput = Console.ReadLine();
Console.Write("Введите начальную дату недели (yyyy-MM-dd): ");
var startDateInput = Console.ReadLine();
if (int.TryParse(firstLessonInput, out int firstLesson) &&
int.TryParse(lastLessonInput, out int lastLesson) &&
int.TryParse(groupIdInput, out int groupId) &&
DateTime.TryParseExact(startDateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime startDate))
{
try
{
_presenceGenerator.GenerateWeeklyPresence(groupId, firstLesson, lastLesson, startDate);
Console.WriteLine("Посещаемость на неделю сгенерирована.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверные входные данные.");
}
Pause();
}
private void ShowPresenceByGroupAndDate()
{
Console.Write("Введите ID группы: ");
var groupIdInput = Console.ReadLine();
Console.Write("Введите дату (yyyy-MM-dd): ");
var dateInput = Console.ReadLine();
if (int.TryParse(groupIdInput, out int groupId) &&
DateTime.TryParseExact(dateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date))
{
try
{
var presences = _presenceUseCase.GetPresencesByGroupAndDate(groupId, date);
var group = _groupUseCase.GetGroupById(groupId);
Console.WriteLine($"Посещаемость группы {group?.Name ?? "Неизвестно"} на {date.ToString("yyyy-MM-dd")}:");
foreach (var presence in presences)
{
var user = _userUseCase.GetUserById(presence.UserId);
Console.WriteLine($"Пользователь: {user.FIO} | Пара: {presence.LessonNumber} | Был/Не был: {(presence.WasPresent ? "Был" : "Не был")}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверные входные данные.");
}
Pause();
}
private void MarkUserAbsent()
{
Console.Write("Введите GUID пользователя: ");
var userIdInput = Console.ReadLine();
Console.Write("Введите номер пары: ");
var lessonInput = Console.ReadLine();
Console.Write("Введите дату (yyyy-MM-dd): ");
var dateInput = Console.ReadLine();
if (Guid.TryParse(userIdInput, out Guid userId) &&
int.TryParse(lessonInput, out int lessonNumber) &&
DateTime.TryParseExact(dateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date))
{
try
{
_presenceUseCase.MarkUserAbsent(userId, lessonNumber, date);
Console.WriteLine("Пользователь отмечен как отсутствующий.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверные входные данные.");
}
Pause();
}
private void ShowAllPresences()
{
var presences = _presenceUseCase.GetAllPresences();
Console.WriteLine("Вся посещаемость:");
foreach (var presence in presences)
{
var user = _userUseCase.GetUserById(presence.UserId);
var group = _groupUseCase.GetGroupById(user.GroupID);
Console.WriteLine($"Пользователь: {user.FIO} | Группа: {group?.Name ?? "Неизвестно"} | Дата: {presence.ClassDate.ToString("yyyy-MM-dd")} | Пара: {presence.LessonNumber} | Был/Не был: {(presence.WasPresent ? "Был" : "Не был")}");
}
Pause();
}
private void Pause()
{
Console.WriteLine("\nНажмите любую клавишу для продолжения...");
Console.ReadKey();
}
}
}

View File

@ -1,8 +1,10 @@
using System;
using AttendanceApp.Domain.UseCases;
using AttendanceApp.Data.Repository;
using System.Globalization;
using Demo.Domain.UseCase;
using Demo.Data.Repository;
using Demo.Data.LocalData.Entity;
using Demo.Data.Exceptions;
using AttendanceApp.Domain.Models;
using AttendanceApp.Data.Exceptions;
namespace AttendanceApp.UI
{
@ -31,9 +33,9 @@ namespace AttendanceApp.UI
var groupIdInput = Console.ReadLine();
var currentDate = DateTime.Now.Date;
if (int.TryParse(firstClassInput, out int firstClassNum) &&
int.TryParse(lastClassInput, out int lastClassNum) &&
int.TryParse(groupIdInput, out int groupId))
if (int.TryParse(firstClassInput, out int firstClassNum)
&& int.TryParse(lastClassInput, out int lastClassNum)
&& int.TryParse(groupIdInput, out int groupId))
{
try
{
@ -49,6 +51,7 @@ namespace AttendanceApp.UI
{
Console.WriteLine("Неверный формат ввода.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
@ -66,10 +69,10 @@ namespace AttendanceApp.UI
Console.Write("Введите стартовую дату (yyyy-MM-dd): ");
var startDateInput = Console.ReadLine();
if (int.TryParse(firstClassInput, out int firstClassNum) &&
int.TryParse(lastClassInput, out int lastClassNum) &&
int.TryParse(groupIdInput, out int groupId) &&
DateTime.TryParse(startDateInput, out DateTime startDate))
if (int.TryParse(firstClassInput, out int firstClassNum)
&& int.TryParse(lastClassInput, out int lastClassNum)
&& int.TryParse(groupIdInput, out int groupId)
&& DateTime.TryParseExact(startDateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime startDate))
{
try
{
@ -85,6 +88,7 @@ namespace AttendanceApp.UI
{
Console.WriteLine("Неверный формат ввода.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
@ -98,17 +102,25 @@ namespace AttendanceApp.UI
Console.Write("Введите дату (yyyy-MM-dd): ");
var dateInput = Console.ReadLine();
if (int.TryParse(groupIdInput, out int groupId) &&
DateTime.TryParse(dateInput, out DateTime date))
if (int.TryParse(groupIdInput, out int groupId) && DateTime.TryParse(dateInput, out DateTime date))
{
try
{
var group = _groupRepository.GetGroupById(groupId);
var presences = _presenceRepository.GetPresenceByGroupAndDate(groupId, date);
// Добавляем проверку на null
if (group == null)
{
Console.WriteLine($"Группа с ID {groupId} не найдена.");
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
return;
}
var presences = _presenceRepository.GetPresencesByGroupAndDate(groupId, date);
Console.WriteLine($"Посещаемость группы {group.Name} на {date.ToShortDateString()}:");
foreach (var presence in presences)
{
Console.WriteLine($"Пользователь ID: {presence.UserId} | Занятие №: {presence.ClassNumber} | Присутствует: {presence.IsPresent}");
Console.WriteLine($"Пользователь ID: {presence.UserId} | Занятие №: {presence.LessonNumber} | Присутствует: {presence.WasPresent}");
}
}
catch (GroupNotFoundException ex)
@ -120,6 +132,7 @@ namespace AttendanceApp.UI
{
Console.WriteLine("Неверный формат ввода.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
@ -133,10 +146,10 @@ namespace AttendanceApp.UI
Console.Write("Введите диапазон занятий (через запятую, например: 1,3): ");
var classRangeInput = Console.ReadLine();
if (Guid.TryParse(userIdInput, out Guid userId) &&
classRangeInput.Contains(",") &&
int.TryParse(classRangeInput.Split(',')[0], out int startClass) &&
int.TryParse(classRangeInput.Split(',')[1], out int endClass))
if (Guid.TryParse(userIdInput, out Guid userId)
&& classRangeInput.Contains(",")
&& int.TryParse(classRangeInput.Split(',')[0], out int startClass)
&& int.TryParse(classRangeInput.Split(',')[1], out int endClass))
{
try
{
@ -146,8 +159,8 @@ namespace AttendanceApp.UI
var presence = new Presence
{
ClassDate = currentDate,
ClassNumber = classNum,
IsPresent = false,
LessonNumber = classNum,
WasPresent = false,
UserId = userId
};
_presenceRepository.UpdatePresence(presence);
@ -163,6 +176,7 @@ namespace AttendanceApp.UI
{
Console.WriteLine("Неверный формат ввода.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
@ -180,14 +194,14 @@ namespace AttendanceApp.UI
{
var group = _groupRepository.GetGroupById(groupId);
var presences = _presenceRepository.GetPresenceByGroup(groupId);
Console.WriteLine($"Посещаемость группы {group.Name}:");
Console.WriteLine($"Посещаемость группы {group.Name}:");
foreach (var presence in presences)
{
Console.WriteLine($"Дата: {presence.ClassDate.ToShortDateString()} | " +
$"Занятие №{presence.ClassNumber} | " +
$"Присутствует: {(presence.IsPresent ? "Да" : "Нет")} | " +
$"Студент ID: {presence.UserId}");
$"Занятие №{presence.LessonNumber} | " +
$"Присутствует: {(presence.WasPresent ? "Да" : "Нет")} | " +
$"Студент ID: {presence.UserId}");
}
}
catch (GroupNotFoundException ex)

12
Demo1/UI/UserConsole.cs Normal file
View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo1.UI
{
internal class UserConsole
{
}
}

View File

@ -1,125 +0,0 @@
using System;
using AttendanceApp.Domain.UseCases;
using AttendanceApp.Domain.Models;
using AttendanceApp.Data.Exceptions;
namespace Demo1
{
public class UserConsole
{
private readonly UserUseCase _userUseCase;
public UserConsole(UserUseCase userUseCase)
{
_userUseCase = userUseCase;
}
public void ShowAllUsers()
{
Console.Clear();
Console.WriteLine("=== Список всех пользователей ===");
var users = _userUseCase.GetAllUsers();
foreach (var user in users)
{
Console.WriteLine($"ID: {user.Id} | ФИО: {user.FIO} | Группа ID: {user.GroupId}");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
public void DeleteUser()
{
Console.Clear();
Console.WriteLine("=== Удаление пользователя ===");
Console.Write("Введите GUID пользователя: ");
var input = Console.ReadLine();
if (Guid.TryParse(input, out Guid userId))
{
try
{
_userUseCase.DeleteUser(userId);
Console.WriteLine("Пользователь успешно удалён.");
}
catch (UserNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
Console.WriteLine("Неверный формат GUID.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
public void UpdateUser()
{
Console.Clear();
Console.WriteLine("=== Обновление пользователя ===");
Console.Write("Введите GUID пользователя: ");
var input = Console.ReadLine();
if (Guid.TryParse(input, out Guid userId))
{
try
{
var user = _userUseCase.GetUserById(userId);
Console.WriteLine($"Текующее ФИО: {user.FIO}");
Console.Write("Введите новое ФИО (оставьте пустым для сохранения текущего): ");
var newFIO = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(newFIO))
{
user.FIO = newFIO;
}
Console.WriteLine($"Текущая группа ID: {user.GroupId}");
Console.Write("Введите новый Group ID (оставьте пустым для сохранения текущего): ");
var newGroupIdInput = Console.ReadLine();
if (int.TryParse(newGroupIdInput, out int newGroupId))
{
user.GroupId = newGroupId;
}
_userUseCase.UpdateUser(user);
Console.WriteLine("Пользователь успешно обновлён.");
}
catch (UserNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
Console.WriteLine("Неверный формат GUID.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
public void FindUserById()
{
Console.Clear();
Console.WriteLine("=== Поиск пользователя по GUID ===");
Console.Write("Введите GUID пользователя: ");
var input = Console.ReadLine();
if (Guid.TryParse(input, out Guid userId))
{
try
{
var user = _userUseCase.GetUserById(userId);
Console.WriteLine($"ID: {user.Id} | ФИО: {user.FIO} | Группа ID: {user.GroupId}");
}
catch (UserNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
Console.WriteLine("Неверный формат GUID.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
}
}

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -6,6 +6,7 @@
"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.

Some files were not shown because too many files have changed in this diff Show More