initial commit
This commit is contained in:
parent
ad36f40a57
commit
06b1f95063
BIN
.vs/Demo1/DesignTimeBuild/.dtbcache.v2
Normal file
BIN
.vs/Demo1/DesignTimeBuild/.dtbcache.v2
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.vs/Demo1/v17/.futdcache.v2
Normal file
BIN
.vs/Demo1/v17/.futdcache.v2
Normal file
Binary file not shown.
BIN
.vs/Demo1/v17/.suo
Normal file
BIN
.vs/Demo1/v17/.suo
Normal file
Binary file not shown.
683
.vs/Demo1/v17/DocumentLayout.json
Normal file
683
.vs/Demo1/v17/DocumentLayout.json
Normal 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": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
BIN
.vs/ProjectEvaluation/demo1.metadata.v7.bin
Normal file
BIN
.vs/ProjectEvaluation/demo1.metadata.v7.bin
Normal file
Binary file not shown.
BIN
.vs/ProjectEvaluation/demo1.projects.v7.bin
Normal file
BIN
.vs/ProjectEvaluation/demo1.projects.v7.bin
Normal file
Binary file not shown.
6
.vs/VSWorkspaceState.json
Normal file
6
.vs/VSWorkspaceState.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ExpandedNodes": [
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"PreviewInSolutionExplorer": false
|
||||||
|
}
|
BIN
.vs/slarny4/v17/.wsuo
Normal file
BIN
.vs/slarny4/v17/.wsuo
Normal file
Binary file not shown.
12
.vs/slarny4/v17/DocumentLayout.json
Normal file
12
.vs/slarny4/v17/DocumentLayout.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"Version": 1,
|
||||||
|
"WorkspaceRootPath": "C:\\Users\\class_Student\\source\\repos\\slarny4\\",
|
||||||
|
"Documents": [],
|
||||||
|
"DocumentGroupContainers": [
|
||||||
|
{
|
||||||
|
"Orientation": 0,
|
||||||
|
"VerticalTabListWidth": 256,
|
||||||
|
"DocumentGroups": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -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 class GroupNotFoundException : Exception
|
||||||
{
|
{
|
||||||
public GroupNotFoundException(string message) : base(message) { }
|
public GroupNotFoundException(int groupId)
|
||||||
|
: base($"Group with ID {groupId} was not found.")
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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 class RepositoryException : Exception
|
||||||
{
|
{
|
||||||
public RepositoryException(string message) : base(message) { }
|
public RepositoryException(string message)
|
||||||
|
: base(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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 class UserNotFoundException : Exception
|
||||||
{
|
{
|
||||||
public UserNotFoundException(string message) : base(message) { }
|
public UserNotFoundException(Guid userId)
|
||||||
|
: base($"User with ID {userId} was not found.")
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
9
Demo1/Data/LocalData/Entity/Group.cs
Normal file
9
Demo1/Data/LocalData/Entity/Group.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
13
Demo1/Data/LocalData/Entity/LocalPresence.cs
Normal file
13
Demo1/Data/LocalData/Entity/LocalPresence.cs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
12
Demo1/Data/LocalData/Entity/User.cs
Normal file
12
Demo1/Data/LocalData/Entity/User.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +0,0 @@
|
|||||||
namespace AttendanceApp.Data.LocalData
|
|
||||||
{
|
|
||||||
public class LocalGroup
|
|
||||||
{
|
|
||||||
public int Id { get; set; }
|
|
||||||
public string Name { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -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; }
|
|
||||||
}
|
|
||||||
}
|
|
29
Demo1/Data/LocalData/LocalStaticData.cs
Normal file
29
Demo1/Data/LocalData/LocalStaticData.cs
Normal 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>();
|
||||||
|
}
|
||||||
|
}
|
@ -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; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -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>();
|
|
||||||
}
|
|
||||||
}
|
|
12
Demo1/Data/Migrations/20241025085326_InitialCreate.cs
Normal file
12
Demo1/Data/Migrations/20241025085326_InitialCreate.cs
Normal 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
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
44
Demo1/Data/Migrations/RemoteDatabaseContextModelSnapshot.cs
Normal file
44
Demo1/Data/Migrations/RemoteDatabaseContextModelSnapshot.cs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
Demo1/Data/RemoteData/RemoteDataBase/DAO/Group.cs
Normal file
9
Demo1/Data/RemoteData/RemoteDataBase/DAO/Group.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
16
Demo1/Data/RemoteData/RemoteDataBase/DAO/Presence.cs
Normal file
16
Demo1/Data/RemoteData/RemoteDataBase/DAO/Presence.cs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
12
Demo1/Data/RemoteData/RemoteDataBase/DAO/User.cs
Normal file
12
Demo1/Data/RemoteData/RemoteDataBase/DAO/User.cs
Normal 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; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
8
Demo1/Data/RemoteData/RemoteDataBase/RemoteDatabase.cs
Normal file
8
Demo1/Data/RemoteData/RemoteDataBase/RemoteDatabase.cs
Normal 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
|
||||||
|
{
|
||||||
|
// Логика подключения к удаленной базе данных
|
||||||
|
}
|
||||||
|
}
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,60 +1,52 @@
|
|||||||
using AttendanceApp.Data.Exceptions;
|
// C:\Users\adm\Source\Repos\presence1\Demo\Data\Repository\GroupRepositoryImpl.cs
|
||||||
using AttendanceApp.Data.LocalData;
|
using System.Collections.Generic;
|
||||||
using AttendanceApp.Domain.Models;
|
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
|
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
|
this.context = context;
|
||||||
{
|
|
||||||
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
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddGroup(Group group)
|
public void AddGroup(Group group)
|
||||||
{
|
{
|
||||||
_groups.Add(new LocalGroup
|
if (LocalStaticData.Groups.Any(g => g.Id == group.Id))
|
||||||
{
|
throw new RepositoryException("Group with the same ID already exists.");
|
||||||
Id = group.Id,
|
LocalStaticData.Groups.Add(group);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteGroup(int id)
|
public void DeleteGroup(int id)
|
||||||
{
|
{
|
||||||
var group = _groups.FirstOrDefault(g => g.Id == id);
|
var group = GetGroupById(id);
|
||||||
if (group == null)
|
LocalStaticData.Groups.Remove(group);
|
||||||
throw new GroupNotFoundException($"Группа с ID {id} не найдена.");
|
}
|
||||||
|
|
||||||
_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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,8 @@
|
|||||||
using System.Collections.Generic;
|
// C:\Users\adm\Source\Repos\presence1\Demo\Data\Repository\IGroupRepository.cs
|
||||||
using AttendanceApp.Domain.Models;
|
using System.Collections.Generic;
|
||||||
|
using Demo.Data.LocalData.Entity;
|
||||||
|
|
||||||
namespace AttendanceApp.Data.Repository
|
namespace Demo.Data.Repository
|
||||||
{
|
{
|
||||||
public interface IGroupRepository
|
public interface IGroupRepository
|
||||||
{
|
{
|
||||||
|
@ -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
|
public interface IPresenceRepository
|
||||||
{
|
{
|
||||||
IEnumerable<Presence> GetPresenceByGroupAndDate(int groupId, DateTime date);
|
IEnumerable<LocalPresence> GetPresencesByGroupAndDate(int groupId, DateTime date);
|
||||||
IEnumerable<Presence> GetPresenceByGroup(int groupId);
|
void AddPresence(LocalPresence presence);
|
||||||
void AddPresence(Presence presence);
|
void UpdatePresence(LocalPresence presence);
|
||||||
|
IEnumerable<LocalPresence> GetAllPresences();
|
||||||
|
IEnumerable<LocalPresence> GetPresenceByGroup(int groupId);
|
||||||
void UpdatePresence(Presence presence);
|
void UpdatePresence(Presence presence);
|
||||||
// Дополнительные методы по необходимости
|
// Удалите этот метод, так как он дублирует GetPresencesByGroupAndDate
|
||||||
|
// IEnumerable<object> GetPresenceByGroupAndDate(int groupId, DateTime date);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
public interface IUserRepository
|
||||||
{
|
{
|
||||||
|
@ -1,70 +1,70 @@
|
|||||||
using AttendanceApp.Data.Exceptions;
|
// C:\Users\adm\Source\Repos\presence1\Demo\Data\Repository\PresenceRepositoryImpl.cs
|
||||||
using AttendanceApp.Data.LocalData;
|
using System;
|
||||||
using AttendanceApp.Domain.Models;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
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
|
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);
|
this.context = context;
|
||||||
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
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<Presence> GetPresenceByGroup(int groupId)
|
public void AddPresence(LocalPresence presence)
|
||||||
{
|
{
|
||||||
var usersInGroup = LocalStaticData.Users
|
LocalStaticData.Presences.Add(presence);
|
||||||
.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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
existingPresence.WasPresent = presence.WasPresent;
|
||||||
ClassNumber = presence.ClassNumber,
|
}
|
||||||
IsPresent = presence.IsPresent,
|
|
||||||
UserId = presence.UserId
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdatePresence(Presence presence)
|
public void UpdatePresence(Presence presence)
|
||||||
{
|
{
|
||||||
var localPresence = _presences.FirstOrDefault(p =>
|
throw new NotImplementedException();
|
||||||
p.UserId == presence.UserId &&
|
}
|
||||||
p.ClassDate.Date == presence.ClassDate.Date &&
|
|
||||||
p.ClassNumber == presence.ClassNumber);
|
|
||||||
|
|
||||||
if (localPresence == null)
|
IEnumerable<LocalPresence> IPresenceRepository.GetPresenceByGroup(int groupId)
|
||||||
throw new RepositoryException("Посещаемость не найдена.");
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
localPresence.IsPresent = presence.IsPresent;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
12
Demo1/Data/Repository/SQLGroupRepositoryImpl.cs
Normal file
12
Demo1/Data/Repository/SQLGroupRepositoryImpl.cs
Normal 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
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
12
Demo1/Data/Repository/SQLPresenceRepository.cs
Normal file
12
Demo1/Data/Repository/SQLPresenceRepository.cs
Normal 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
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
75
Demo1/Data/Repository/SQLUserRepositoryImpl.cs
Normal file
75
Demo1/Data/Repository/SQLUserRepositoryImpl.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,64 +1,65 @@
|
|||||||
using AttendanceApp.Data.Exceptions;
|
using System;
|
||||||
using AttendanceApp.Data.LocalData;
|
using System.Collections.Generic;
|
||||||
using AttendanceApp.Domain.Models;
|
using System.Linq;
|
||||||
|
using Demo.Domain.Models;
|
||||||
|
using Demo.Data.LocalData;
|
||||||
|
|
||||||
namespace AttendanceApp.Data.Repository
|
namespace Demo.Data.Repository
|
||||||
{
|
{
|
||||||
public class UserRepositoryImpl : IUserRepository
|
public class UserRepositoryImpl : IUserRepository
|
||||||
{
|
{
|
||||||
private readonly List<LocalUser> _users = LocalStaticData.Users;
|
|
||||||
|
|
||||||
public IEnumerable<User> GetAllUsers()
|
public IEnumerable<User> GetAllUsers()
|
||||||
{
|
{
|
||||||
return _users.Select(u => new User
|
return LocalStaticData.Users.Select(u => new User
|
||||||
{
|
{
|
||||||
Id = u.Id,
|
Id = u.Id,
|
||||||
FIO = u.FIO,
|
FIO = u.FIO,
|
||||||
GroupId = u.GroupID
|
GroupID = u.GroupID
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public User GetUserById(Guid id)
|
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)
|
if (localUser == null)
|
||||||
throw new UserNotFoundException($"Пользователь с ID {id} не найден.");
|
throw new Exception("User not found");
|
||||||
|
|
||||||
return new User
|
return new User
|
||||||
{
|
{
|
||||||
Id = localUser.Id,
|
Id = localUser.Id,
|
||||||
FIO = localUser.FIO,
|
FIO = localUser.FIO,
|
||||||
GroupId = localUser.GroupID
|
GroupID = localUser.GroupID
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddUser(User user)
|
public void AddUser(User user)
|
||||||
{
|
{
|
||||||
_users.Add(new LocalUser
|
var localUser = new LocalData.Entity.User
|
||||||
{
|
{
|
||||||
Id = user.Id,
|
Id = user.Id,
|
||||||
FIO = user.FIO,
|
FIO = user.FIO,
|
||||||
GroupID = user.GroupId
|
GroupID = user.GroupID
|
||||||
});
|
};
|
||||||
|
LocalStaticData.Users.Add(localUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateUser(User user)
|
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)
|
if (localUser == null)
|
||||||
throw new UserNotFoundException($"Пользователь с ID {user.Id} не найден.");
|
throw new Exception("User not found");
|
||||||
|
|
||||||
localUser.FIO = user.FIO;
|
localUser.FIO = user.FIO;
|
||||||
localUser.GroupID = user.GroupId;
|
localUser.GroupID = user.GroupID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteUser(Guid id)
|
public void DeleteUser(Guid id)
|
||||||
{
|
{
|
||||||
var user = _users.FirstOrDefault(u => u.Id == id);
|
var user = LocalStaticData.Users.FirstOrDefault(u => u.Id == id);
|
||||||
if (user == null)
|
if (user != null)
|
||||||
throw new UserNotFoundException($"Пользователь с ID {id} не найден.");
|
{
|
||||||
|
LocalStaticData.Users.Remove(user);
|
||||||
_users.Remove(user);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
5
Demo1/Data/appsettings.json
Normal file
5
Demo1/Data/appsettings.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"ConnectionStrings": {
|
||||||
|
"DefaultConnection": "Host=45.67.56.214;Port=5421;Database=PresenceDB;Username=user5;Password=EtEJqhsf"
|
||||||
|
}
|
||||||
|
}
|
@ -7,4 +7,24 @@
|
|||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</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>
|
</Project>
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
namespace AttendanceApp.Domain.Models
|
public class Group
|
||||||
{
|
{
|
||||||
public class Group
|
public int Id { get; set; }
|
||||||
{
|
public string Name { get; set; } = string.Empty; // Добавляем значение по умолчанию
|
||||||
public int Id { get; set; }
|
|
||||||
public string Name { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -8,5 +8,7 @@ namespace AttendanceApp.Domain.Models
|
|||||||
public int ClassNumber { get; set; }
|
public int ClassNumber { get; set; }
|
||||||
public bool IsPresent { get; set; }
|
public bool IsPresent { get; set; }
|
||||||
public Guid UserId { get; set; }
|
public Guid UserId { get; set; }
|
||||||
|
public bool WasPresent { get; internal set; }
|
||||||
|
public int LessonNumber { get; internal set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,11 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace AttendanceApp.Domain.Models
|
namespace Demo.Domain.Models
|
||||||
{
|
{
|
||||||
public class User
|
public class User
|
||||||
{
|
{
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
public string FIO { get; set; }
|
public string FIO { get; set; } = string.Empty;
|
||||||
public int GroupId { get; set; }
|
public int GroupID { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,10 @@
|
|||||||
using System.Collections.Generic;
|
// C:\Users\class_Student\source\repos\slarny4\Demo1\Domain\UseCase\GroupUseCase.cs
|
||||||
using AttendanceApp.Data.Repository;
|
using System.Collections.Generic;
|
||||||
using AttendanceApp.Domain.Models;
|
using System.Linq;
|
||||||
|
using Demo.Data.LocalData.Entity;
|
||||||
|
using Demo.Data.Repository;
|
||||||
|
|
||||||
namespace AttendanceApp.Domain.UseCases
|
namespace Demo.Domain.UseCase
|
||||||
{
|
{
|
||||||
public class GroupUseCase
|
public class GroupUseCase
|
||||||
{
|
{
|
||||||
@ -37,5 +39,7 @@ namespace AttendanceApp.Domain.UseCases
|
|||||||
{
|
{
|
||||||
_groupRepository.DeleteGroup(id);
|
_groupRepository.DeleteGroup(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Дополнительные методы, если нужны
|
||||||
}
|
}
|
||||||
}
|
}
|
45
Demo1/Domain/UseCase/PresenceUseCase.cs
Normal file
45
Demo1/Domain/UseCase/PresenceUseCase.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,51 +1,59 @@
|
|||||||
using System;
|
// C:\Users\adm\Source\Repos\presence1\Demo\Domain\UseCase\UseCaseGeneratePresence.cs
|
||||||
using System.Collections.Generic;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using AttendanceApp.Data.Repository;
|
using Demo.Data.LocalData;
|
||||||
using AttendanceApp.Domain.Models;
|
using Demo.Data.LocalData.Entity;
|
||||||
|
using Demo.Data.Repository;
|
||||||
|
|
||||||
namespace AttendanceApp.Domain.UseCases
|
namespace Demo.Domain.UseCase
|
||||||
{
|
{
|
||||||
public class UseCaseGeneratePresence
|
public class UseCaseGeneratePresence
|
||||||
{
|
{
|
||||||
private readonly IPresenceRepository _presenceRepository;
|
private readonly IPresenceRepository _presenceRepository;
|
||||||
private readonly IUserRepository _userRepository;
|
private readonly IUserRepository _userRepository;
|
||||||
private readonly IGroupRepository _groupRepository;
|
|
||||||
|
|
||||||
public UseCaseGeneratePresence(IPresenceRepository presenceRepository, IUserRepository userRepository, IGroupRepository groupRepository)
|
public UseCaseGeneratePresence(IPresenceRepository presenceRepository, IUserRepository userRepository)
|
||||||
{
|
{
|
||||||
_presenceRepository = presenceRepository;
|
_presenceRepository = presenceRepository;
|
||||||
_userRepository = userRepository;
|
_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).ToList();
|
||||||
var users = _userRepository.GetAllUsers().Where(u => u.GroupId == groupId);
|
|
||||||
|
|
||||||
foreach (var user in users)
|
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,
|
var presence = new LocalPresence
|
||||||
ClassNumber = classNum,
|
{
|
||||||
IsPresent = true,
|
UserId = user.Id,
|
||||||
UserId = user.Id
|
ClassDate = date.Date,
|
||||||
};
|
LessonNumber = lesson,
|
||||||
_presenceRepository.AddPresence(presence);
|
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++)
|
for (int i = 0; i < 7; i++)
|
||||||
{
|
{
|
||||||
var currentDate = startDate.AddDays(i);
|
var date = startDate.AddDays(i);
|
||||||
GenerateDailyPresence(firstClassNumber, lastClassNumber, groupId, currentDate);
|
if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
|
||||||
|
continue; // Пропускаем выходные
|
||||||
|
GenerateDailyPresence(groupId, firstLesson, lastLesson, date);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using AttendanceApp.Data.Repository;
|
using Demo.Data.LocalData.Entity; // Убедитесь, что это пространство имен присутствует
|
||||||
using AttendanceApp.Domain.Models;
|
using Demo.Data.Repository;
|
||||||
|
using Demo.Domain.Models;
|
||||||
|
|
||||||
namespace AttendanceApp.Domain.UseCases
|
namespace Demo.Domain.UseCase
|
||||||
{
|
{
|
||||||
public class UserUseCase
|
public class UserUseCase
|
||||||
{
|
{
|
||||||
@ -14,29 +15,30 @@ namespace AttendanceApp.Domain.UseCases
|
|||||||
_userRepository = userRepository;
|
_userRepository = userRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<User> GetAllUsers()
|
public IEnumerable<Domain.Models.User> GetAllUsers()
|
||||||
{
|
{
|
||||||
return _userRepository.GetAllUsers();
|
return _userRepository.GetAllUsers();
|
||||||
}
|
}
|
||||||
|
|
||||||
public User GetUserById(Guid id)
|
public void AddUser(Domain.Models.User user)
|
||||||
{
|
|
||||||
return _userRepository.GetUserById(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AddUser(User user)
|
|
||||||
{
|
{
|
||||||
_userRepository.AddUser(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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
47
Demo1/Migrations/20241028115815_InitialCreate.Designer.cs
generated
Normal file
47
Demo1/Migrations/20241028115815_InitialCreate.Designer.cs
generated
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
Demo1/Migrations/20241028115815_InitialCreate.cs
Normal file
35
Demo1/Migrations/20241028115815_InitialCreate.cs
Normal 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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,14 +1,13 @@
|
|||||||
using System;
|
using Demo.UI;
|
||||||
using AttendanceApp.UI;
|
|
||||||
|
|
||||||
namespace AttendanceApp
|
namespace Demo
|
||||||
{
|
{
|
||||||
class Program
|
class Program
|
||||||
{
|
{
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
var mainMenu = new MainMenu();
|
MainMenu menu = new MainMenu();
|
||||||
mainMenu.Show();
|
menu.Show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using AttendanceApp.Domain.UseCases;
|
using Demo.Domain.UseCase;
|
||||||
using AttendanceApp.Domain.Models;
|
using Demo.Data.Repository;
|
||||||
using AttendanceApp.Data.Exceptions;
|
using Demo.Data.LocalData.Entity;
|
||||||
|
using Demo.Data.Exceptions;
|
||||||
namespace AttendanceApp.UI
|
namespace AttendanceApp.UI
|
||||||
{
|
{
|
||||||
public class GroupConsole
|
public class GroupConsole
|
||||||
|
@ -1,37 +1,58 @@
|
|||||||
using AttendanceApp.Domain.UseCases;
|
// C:\Users\class_Student\source\repos\slarny4\Demo1\UI\MainMenu.cs
|
||||||
using AttendanceApp.Data.Repository;
|
using System;
|
||||||
using Demo1;
|
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
|
public class MainMenu
|
||||||
{
|
{
|
||||||
private readonly UserConsole _userConsole;
|
private readonly UserUseCase _userUseCase;
|
||||||
private readonly GroupConsole _groupConsole;
|
private readonly GroupUseCase _groupUseCase;
|
||||||
private readonly PresenceConsole _presenceConsole;
|
private readonly UseCaseGeneratePresence _presenceGenerator;
|
||||||
|
private readonly PresenceUseCase _presenceUseCase;
|
||||||
|
|
||||||
public MainMenu()
|
private readonly RemoteDatabaseContext _context;
|
||||||
|
|
||||||
|
public MainMenu(RemoteDatabaseContext context = null)
|
||||||
{
|
{
|
||||||
// Инициализация репозиториев и use cases
|
if (context == null)
|
||||||
var userRepository = new UserRepositoryImpl();
|
{
|
||||||
var groupRepository = new GroupRepositoryImpl();
|
// Если контекст не предоставлен, создаем новый
|
||||||
var presenceRepository = new PresenceRepositoryImpl();
|
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);
|
IUserRepository userRepository = new SQLUserRepositoryImpl(_context);
|
||||||
var generatePresenceUseCase = new UseCaseGeneratePresence(presenceRepository, userRepository, groupRepository);
|
IGroupRepository groupRepository = new GroupRepositoryImpl(_context);
|
||||||
|
IPresenceRepository presenceRepository = new PresenceRepositoryImpl(_context);
|
||||||
|
|
||||||
_userConsole = new UserConsole(userUseCase);
|
// Инициализация use cases
|
||||||
_groupConsole = new GroupConsole(groupUseCase);
|
_userUseCase = new UserUseCase(userRepository);
|
||||||
_presenceConsole = new PresenceConsole(generatePresenceUseCase, presenceRepository, groupRepository);
|
_groupUseCase = new GroupUseCase(groupRepository);
|
||||||
|
_presenceGenerator = new UseCaseGeneratePresence(presenceRepository, userRepository);
|
||||||
|
_presenceUseCase = new PresenceUseCase(presenceRepository, groupRepository, userRepository);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Show()
|
public void Show()
|
||||||
{
|
{
|
||||||
while (true)
|
bool exit = false;
|
||||||
|
while (!exit)
|
||||||
{
|
{
|
||||||
Console.Clear();
|
Console.Clear();
|
||||||
Console.WriteLine("=== Меню ===");
|
Console.WriteLine("=== Учёт Посещаемости ===");
|
||||||
Console.WriteLine("1. Показать всех пользователей");
|
Console.WriteLine("1. Показать всех пользователей");
|
||||||
Console.WriteLine("2. Удалить пользователя по GUID");
|
Console.WriteLine("2. Удалить пользователя по GUID");
|
||||||
Console.WriteLine("3. Обновить пользователя");
|
Console.WriteLine("3. Обновить пользователя");
|
||||||
@ -45,63 +66,459 @@ namespace AttendanceApp.UI
|
|||||||
Console.WriteLine("11. Генерация посещаемости на неделю");
|
Console.WriteLine("11. Генерация посещаемости на неделю");
|
||||||
Console.WriteLine("12. Показать посещаемость по группе и дате");
|
Console.WriteLine("12. Показать посещаемость по группе и дате");
|
||||||
Console.WriteLine("13. Отметить пользователя как отсутствующего");
|
Console.WriteLine("13. Отметить пользователя как отсутствующего");
|
||||||
Console.WriteLine("14. Показать посещаемость по группе");
|
Console.WriteLine("14. Вывести всю посещаемость");
|
||||||
Console.WriteLine("0. Выход");
|
Console.WriteLine("0. Выход");
|
||||||
Console.Write("Выберите опцию: ");
|
Console.Write("Выберите пункт меню: ");
|
||||||
|
|
||||||
|
var input = Console.ReadLine() ?? string.Empty;
|
||||||
|
|
||||||
|
Console.WriteLine();
|
||||||
|
|
||||||
var input = Console.ReadLine();
|
|
||||||
switch (input)
|
switch (input)
|
||||||
{
|
{
|
||||||
case "1":
|
case "1":
|
||||||
_userConsole.ShowAllUsers();
|
ShowAllUsers();
|
||||||
break;
|
break;
|
||||||
case "2":
|
case "2":
|
||||||
_userConsole.DeleteUser();
|
DeleteUserByGuid();
|
||||||
break;
|
break;
|
||||||
case "3":
|
case "3":
|
||||||
_userConsole.UpdateUser();
|
UpdateUser();
|
||||||
break;
|
break;
|
||||||
case "4":
|
case "4":
|
||||||
_userConsole.FindUserById();
|
FindUserByGuid();
|
||||||
break;
|
break;
|
||||||
case "5":
|
case "5":
|
||||||
_groupConsole.ShowAllGroups();
|
ShowAllGroups();
|
||||||
break;
|
break;
|
||||||
case "6":
|
case "6":
|
||||||
_groupConsole.AddGroup();
|
AddGroup();
|
||||||
break;
|
break;
|
||||||
case "7":
|
case "7":
|
||||||
_groupConsole.UpdateGroup();
|
UpdateGroup();
|
||||||
break;
|
break;
|
||||||
case "8":
|
case "8":
|
||||||
_groupConsole.DeleteGroup();
|
DeleteGroupById();
|
||||||
break;
|
break;
|
||||||
case "9":
|
case "9":
|
||||||
_groupConsole.FindGroupById();
|
FindGroupById();
|
||||||
break;
|
break;
|
||||||
case "10":
|
case "10":
|
||||||
_presenceConsole.GenerateDailyPresence();
|
GenerateDailyPresence();
|
||||||
break;
|
break;
|
||||||
case "11":
|
case "11":
|
||||||
_presenceConsole.GenerateWeeklyPresence();
|
GenerateWeeklyPresence();
|
||||||
break;
|
break;
|
||||||
case "12":
|
case "12":
|
||||||
_presenceConsole.ShowPresenceByGroupAndDate();
|
ShowPresenceByGroupAndDate();
|
||||||
break;
|
break;
|
||||||
case "13":
|
case "13":
|
||||||
_presenceConsole.MarkUserAbsent();
|
MarkUserAbsent();
|
||||||
break;
|
break;
|
||||||
case "14":
|
case "14":
|
||||||
_presenceConsole.ShowPresenceByGroup();
|
ShowAllPresences();
|
||||||
break;
|
break;
|
||||||
case "0":
|
case "0":
|
||||||
return;
|
exit = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Console.WriteLine("Неверная опция. Нажмите любую клавишу для продолжения...");
|
Console.WriteLine("Неверный выбор. Нажмите любую клавишу для продолжения...");
|
||||||
Console.ReadKey();
|
Console.ReadKey();
|
||||||
break;
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using AttendanceApp.Domain.UseCases;
|
using System.Globalization;
|
||||||
using AttendanceApp.Data.Repository;
|
using Demo.Domain.UseCase;
|
||||||
|
using Demo.Data.Repository;
|
||||||
|
using Demo.Data.LocalData.Entity;
|
||||||
|
using Demo.Data.Exceptions;
|
||||||
using AttendanceApp.Domain.Models;
|
using AttendanceApp.Domain.Models;
|
||||||
using AttendanceApp.Data.Exceptions;
|
|
||||||
|
|
||||||
namespace AttendanceApp.UI
|
namespace AttendanceApp.UI
|
||||||
{
|
{
|
||||||
@ -31,9 +33,9 @@ namespace AttendanceApp.UI
|
|||||||
var groupIdInput = Console.ReadLine();
|
var groupIdInput = Console.ReadLine();
|
||||||
var currentDate = DateTime.Now.Date;
|
var currentDate = DateTime.Now.Date;
|
||||||
|
|
||||||
if (int.TryParse(firstClassInput, out int firstClassNum) &&
|
if (int.TryParse(firstClassInput, out int firstClassNum)
|
||||||
int.TryParse(lastClassInput, out int lastClassNum) &&
|
&& int.TryParse(lastClassInput, out int lastClassNum)
|
||||||
int.TryParse(groupIdInput, out int groupId))
|
&& int.TryParse(groupIdInput, out int groupId))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -49,6 +51,7 @@ namespace AttendanceApp.UI
|
|||||||
{
|
{
|
||||||
Console.WriteLine("Неверный формат ввода.");
|
Console.WriteLine("Неверный формат ввода.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||||
Console.ReadKey();
|
Console.ReadKey();
|
||||||
}
|
}
|
||||||
@ -66,10 +69,10 @@ namespace AttendanceApp.UI
|
|||||||
Console.Write("Введите стартовую дату (yyyy-MM-dd): ");
|
Console.Write("Введите стартовую дату (yyyy-MM-dd): ");
|
||||||
var startDateInput = Console.ReadLine();
|
var startDateInput = Console.ReadLine();
|
||||||
|
|
||||||
if (int.TryParse(firstClassInput, out int firstClassNum) &&
|
if (int.TryParse(firstClassInput, out int firstClassNum)
|
||||||
int.TryParse(lastClassInput, out int lastClassNum) &&
|
&& int.TryParse(lastClassInput, out int lastClassNum)
|
||||||
int.TryParse(groupIdInput, out int groupId) &&
|
&& int.TryParse(groupIdInput, out int groupId)
|
||||||
DateTime.TryParse(startDateInput, out DateTime startDate))
|
&& DateTime.TryParseExact(startDateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime startDate))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -85,6 +88,7 @@ namespace AttendanceApp.UI
|
|||||||
{
|
{
|
||||||
Console.WriteLine("Неверный формат ввода.");
|
Console.WriteLine("Неверный формат ввода.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||||
Console.ReadKey();
|
Console.ReadKey();
|
||||||
}
|
}
|
||||||
@ -98,17 +102,25 @@ namespace AttendanceApp.UI
|
|||||||
Console.Write("Введите дату (yyyy-MM-dd): ");
|
Console.Write("Введите дату (yyyy-MM-dd): ");
|
||||||
var dateInput = Console.ReadLine();
|
var dateInput = Console.ReadLine();
|
||||||
|
|
||||||
if (int.TryParse(groupIdInput, out int groupId) &&
|
if (int.TryParse(groupIdInput, out int groupId) && DateTime.TryParse(dateInput, out DateTime date))
|
||||||
DateTime.TryParse(dateInput, out DateTime date))
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var group = _groupRepository.GetGroupById(groupId);
|
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()}:");
|
Console.WriteLine($"Посещаемость группы {group.Name} на {date.ToShortDateString()}:");
|
||||||
foreach (var presence in presences)
|
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)
|
catch (GroupNotFoundException ex)
|
||||||
@ -120,6 +132,7 @@ namespace AttendanceApp.UI
|
|||||||
{
|
{
|
||||||
Console.WriteLine("Неверный формат ввода.");
|
Console.WriteLine("Неверный формат ввода.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||||
Console.ReadKey();
|
Console.ReadKey();
|
||||||
}
|
}
|
||||||
@ -133,10 +146,10 @@ namespace AttendanceApp.UI
|
|||||||
Console.Write("Введите диапазон занятий (через запятую, например: 1,3): ");
|
Console.Write("Введите диапазон занятий (через запятую, например: 1,3): ");
|
||||||
var classRangeInput = Console.ReadLine();
|
var classRangeInput = Console.ReadLine();
|
||||||
|
|
||||||
if (Guid.TryParse(userIdInput, out Guid userId) &&
|
if (Guid.TryParse(userIdInput, out Guid userId)
|
||||||
classRangeInput.Contains(",") &&
|
&& classRangeInput.Contains(",")
|
||||||
int.TryParse(classRangeInput.Split(',')[0], out int startClass) &&
|
&& int.TryParse(classRangeInput.Split(',')[0], out int startClass)
|
||||||
int.TryParse(classRangeInput.Split(',')[1], out int endClass))
|
&& int.TryParse(classRangeInput.Split(',')[1], out int endClass))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -146,8 +159,8 @@ namespace AttendanceApp.UI
|
|||||||
var presence = new Presence
|
var presence = new Presence
|
||||||
{
|
{
|
||||||
ClassDate = currentDate,
|
ClassDate = currentDate,
|
||||||
ClassNumber = classNum,
|
LessonNumber = classNum,
|
||||||
IsPresent = false,
|
WasPresent = false,
|
||||||
UserId = userId
|
UserId = userId
|
||||||
};
|
};
|
||||||
_presenceRepository.UpdatePresence(presence);
|
_presenceRepository.UpdatePresence(presence);
|
||||||
@ -163,6 +176,7 @@ namespace AttendanceApp.UI
|
|||||||
{
|
{
|
||||||
Console.WriteLine("Неверный формат ввода.");
|
Console.WriteLine("Неверный формат ввода.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||||
Console.ReadKey();
|
Console.ReadKey();
|
||||||
}
|
}
|
||||||
@ -180,14 +194,14 @@ namespace AttendanceApp.UI
|
|||||||
{
|
{
|
||||||
var group = _groupRepository.GetGroupById(groupId);
|
var group = _groupRepository.GetGroupById(groupId);
|
||||||
var presences = _presenceRepository.GetPresenceByGroup(groupId);
|
var presences = _presenceRepository.GetPresenceByGroup(groupId);
|
||||||
Console.WriteLine($"Посещаемость группы {group.Name}:");
|
|
||||||
|
|
||||||
|
Console.WriteLine($"Посещаемость группы {group.Name}:");
|
||||||
foreach (var presence in presences)
|
foreach (var presence in presences)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Дата: {presence.ClassDate.ToShortDateString()} | " +
|
Console.WriteLine($"Дата: {presence.ClassDate.ToShortDateString()} | " +
|
||||||
$"Занятие №{presence.ClassNumber} | " +
|
$"Занятие №{presence.LessonNumber} | " +
|
||||||
$"Присутствует: {(presence.IsPresent ? "Да" : "Нет")} | " +
|
$"Присутствует: {(presence.WasPresent ? "Да" : "Нет")} | " +
|
||||||
$"Студент ID: {presence.UserId}");
|
$"Студент ID: {presence.UserId}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (GroupNotFoundException ex)
|
catch (GroupNotFoundException ex)
|
||||||
|
12
Demo1/UI/UserConsole.cs
Normal file
12
Demo1/UI/UserConsole.cs
Normal 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
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
BIN
Demo1/bin/Debug/net8.0/Azure.Core.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Azure.Core.dll
Normal file
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Azure.Identity.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Azure.Identity.dll
Normal file
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.
@ -6,6 +6,7 @@
|
|||||||
"version": "8.0.0"
|
"version": "8.0.0"
|
||||||
},
|
},
|
||||||
"configProperties": {
|
"configProperties": {
|
||||||
|
"System.Reflection.NullabilityInfoContext.IsSupported": true,
|
||||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BIN
Demo1/bin/Debug/net8.0/Humanizer.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Humanizer.dll
Normal file
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.Bcl.AsyncInterfaces.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.Bcl.AsyncInterfaces.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.CodeAnalysis.CSharp.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.CodeAnalysis.CSharp.dll
Normal file
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.CodeAnalysis.Workspaces.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.CodeAnalysis.Workspaces.dll
Normal file
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.CodeAnalysis.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.CodeAnalysis.dll
Normal file
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.Data.SqlClient.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.Data.SqlClient.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Design.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Design.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.EntityFrameworkCore.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.EntityFrameworkCore.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.Extensions.Caching.Memory.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.Extensions.Caching.Memory.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.Extensions.Configuration.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.Extensions.Configuration.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.Extensions.DependencyModel.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.Extensions.DependencyModel.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.Extensions.Diagnostics.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.Extensions.Diagnostics.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Demo1/bin/Debug/net8.0/Microsoft.Extensions.Hosting.dll
Normal file
BIN
Demo1/bin/Debug/net8.0/Microsoft.Extensions.Hosting.dll
Normal file
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user