11 Commits

Author SHA1 Message Date
51a3b0eee9 Merge pull request 'Enhanced role-based authorization and improved system messages.' (#3) from Feat/HttpPut into main
Reviewed-on: #3
2025-03-05 16:51:36 +00:00
1f01c8ba21 Enhanced role-based authorization and improved system messages.
- Added user roles to JWT token generation.
- Assigned default role ("User") during user registration.
- Implemented role-based access control for API endpoints.
- Updated error messages for better clarity.
- Improved AnalyticsService for more accurate survey insights.

Task completed. Awaiting review.
2025-03-05 08:49:17 -08:00
cc1dc612b5 Merge pull request 'feat: Allow full survey editing & restrict editing to unpublished surveys' (#2) from Feat/HttpPut into main
Reviewed-on: #2
2025-02-23 11:06:25 +00:00
5c735417f2 feat: Allow full survey editing & restrict editing to unpublished surveys
- Enabled full survey editing functionality
- Restricted survey editing to unpublished surveys only
- Added various improvements and optimizations
2025-02-14 05:10:28 -08:00
b9036d8b7a Merge pull request 'Add Identity configuration, DTOs and Mappers' (#1) from Feat/Identity into main
Reviewed-on: #1
2025-02-09 08:19:33 +00:00
3aabe1a367 PATCH
Refactored DTOs to use AutoMapper instead of manual mapping and made some additional improvements and fixes.
Added : GetAllSurveys&DeleteUser.
2025-02-07 06:40:57 -08:00
272ef7194e Added HttpDelete For Users 2025-02-02 14:29:09 +02:00
2e8c61f3e3 PATCH 2025-02-02 13:26:44 +02:00
d2a32d35f4 Feat/Controllers
Added- AnalyticsController ResponsesController SurveyController UserController
2025-02-01 14:06:32 -08:00
77fc9dfd92 PATCH :
removed the authored surveys property
removed the responses property
removed CreateAnswerDto&AnswerDto
2025-01-26 13:28:40 +02:00
78900ab7ad Add Identity configuration, DTOs and Mappers
-Configured Identity using a custom User model to manage authentication and authorization, to be used in the project.
- Added multiple DTOs (Data Transfer Objects).
- Added multiple Mappers ( manual mapping).
- Updated AppDbContext and User model to fully integrate with Identity framework for user management.
-Added relationships between models.
Note : no migration yet
2025-01-20 07:17:35 -08:00
268 changed files with 19449 additions and 90 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,7 @@
{
"ExpandedNodes": [
""
],
"SelectedNode": "\\survey-beta.sln",
"PreviewInSolutionExplorer": false
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
.vs/survey-beta/v17/.suo Normal file

Binary file not shown.

View File

@@ -0,0 +1,683 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\services\\analyticsservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\services\\analyticsservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\services\\responsesservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\services\\responsesservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\services\\surveyservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\services\\surveyservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\controllers\\analyticscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\controllers\\analyticscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\controllers\\responsescontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\controllers\\responsescontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\controllers\\surveycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\controllers\\surveycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\controllers\\userscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\controllers\\userscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\databasecontext\\appdbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\databasecontext\\appdbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\userinfodto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\userinfodto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\userdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\userdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\surveyparametersdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\surveyparametersdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\surveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\surveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\responsedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\responsedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\questiondto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\questiondto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\choicedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\choicedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\answerdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\answerdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\create\\logindto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\create\\logindto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\create\\createuserdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\create\\createuserdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\create\\createsurveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\create\\createsurveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\create\\createquestiondto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\create\\createquestiondto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\create\\createchoicedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\create\\createchoicedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\usermapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\usermapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\surveymapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\surveymapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\responsemapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\responsemapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\questionmapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\questionmapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\choicemapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\choicemapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\survey.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\survey.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\response.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\response.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\choice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\choice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\answer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\answer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\services\\usersservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\services\\usersservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\response\\answerrequest.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\response\\answerrequest.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\profiles\\surveyprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\profiles\\surveyprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\update\\surveystats.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\update\\surveystats.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\update\\updatesurveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\update\\updatesurveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 284,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 10,
"Children": [
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "AnalyticsController.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\AnalyticsController.cs",
"RelativeDocumentMoniker": "survey-beta\\Controllers\\AnalyticsController.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\AnalyticsController.cs",
"RelativeToolTip": "survey-beta\\Controllers\\AnalyticsController.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:06:15.47Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "UserInfoDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\UserInfoDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\UserInfoDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\UserInfoDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\UserInfoDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:52.823Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "UserDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\UserDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\UserDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\UserDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\UserDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:52.217Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "SurveyParametersDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\SurveyParametersDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\SurveyParametersDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\SurveyParametersDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\SurveyParametersDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:50.014Z",
"EditorCaption": ""
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "AppDbContext.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DataBaseContext\\AppDbContext.cs",
"RelativeDocumentMoniker": "survey-beta\\DataBaseContext\\AppDbContext.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DataBaseContext\\AppDbContext.cs",
"RelativeToolTip": "survey-beta\\DataBaseContext\\AppDbContext.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAqwAwAAAA2AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:35:35.408Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "UsersController.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\UsersController.cs",
"RelativeDocumentMoniker": "survey-beta\\Controllers\\UsersController.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\UsersController.cs*",
"RelativeToolTip": "survey-beta\\Controllers\\UsersController.cs*",
"ViewState": "AgIAADsAAAAAAAAAAAAIwFYAAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-11T12:13:55.608Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "SurveyController.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\SurveyController.cs",
"RelativeDocumentMoniker": "survey-beta\\Controllers\\SurveyController.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\SurveyController.cs",
"RelativeToolTip": "survey-beta\\Controllers\\SurveyController.cs",
"ViewState": "AgIAAA4AAAAAAAAAAAAkwC8AAABOAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T15:55:26.975Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "SurveyServices.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\SurveyServices.cs",
"RelativeDocumentMoniker": "survey-beta\\Services\\SurveyServices.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\SurveyServices.cs*",
"RelativeToolTip": "survey-beta\\Services\\SurveyServices.cs*",
"ViewState": "AgIAAFQAAAAAAAAAAAAawE0AAAAvAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T15:55:31.702Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "ResponsesServices.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\ResponsesServices.cs",
"RelativeDocumentMoniker": "survey-beta\\Services\\ResponsesServices.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\ResponsesServices.cs",
"RelativeToolTip": "survey-beta\\Services\\ResponsesServices.cs",
"ViewState": "AgIAABcAAAAAAAAAAAAqwD4AAAABAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:46:04.821Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "AnalyticsServices.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\AnalyticsServices.cs",
"RelativeDocumentMoniker": "survey-beta\\Services\\AnalyticsServices.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\AnalyticsServices.cs*",
"RelativeToolTip": "survey-beta\\Services\\AnalyticsServices.cs*",
"ViewState": "AgIAABMAAAAAAAAAAAAkwBYAAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-11T11:29:02.681Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "SurveyDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\SurveyDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\SurveyDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\SurveyDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\SurveyDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:50.628Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 12,
"Title": "ResponseDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\ResponseDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\ResponseDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\ResponseDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\ResponseDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:49.01Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 15,
"Title": "AnswerDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\AnswerDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\AnswerDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\AnswerDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\AnswerDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:46.403Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 16,
"Title": "LoginDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\LoginDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Create\\LoginDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\LoginDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Create\\LoginDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:43.41Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "ResponsesController.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\ResponsesController.cs",
"RelativeDocumentMoniker": "survey-beta\\Controllers\\ResponsesController.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\ResponsesController.cs",
"RelativeToolTip": "survey-beta\\Controllers\\ResponsesController.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T15:55:25.945Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 17,
"Title": "CreateUserDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateUserDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Create\\CreateUserDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateUserDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Create\\CreateUserDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:42.808Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 19,
"Title": "CreateQuestionDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateQuestionDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Create\\CreateQuestionDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateQuestionDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Create\\CreateQuestionDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:39.761Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 20,
"Title": "CreateChoiceDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateChoiceDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Create\\CreateChoiceDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateChoiceDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Create\\CreateChoiceDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:39.044Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 21,
"Title": "UserMapper.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\UserMapper.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\UserMapper.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\UserMapper.cs",
"RelativeToolTip": "survey-beta\\Mappers\\UserMapper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:34.698Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 23,
"Title": "ResponseMapper.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\ResponseMapper.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\ResponseMapper.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\ResponseMapper.cs",
"RelativeToolTip": "survey-beta\\Mappers\\ResponseMapper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:33.572Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 24,
"Title": "QuestionMapper.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\QuestionMapper.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\QuestionMapper.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\QuestionMapper.cs",
"RelativeToolTip": "survey-beta\\Mappers\\QuestionMapper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:32.812Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 14,
"Title": "ChoiceDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\ChoiceDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\ChoiceDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\ChoiceDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\ChoiceDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAqwAQAAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T15:59:30.711Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 13,
"Title": "QuestionDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\QuestionDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\QuestionDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\QuestionDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\QuestionDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAqwAIAAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T15:59:12.839Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 25,
"Title": "ChoiceMapper.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\ChoiceMapper.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\ChoiceMapper.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\ChoiceMapper.cs",
"RelativeToolTip": "survey-beta\\Mappers\\ChoiceMapper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:32.027Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 26,
"Title": "User.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\User.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\User.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\User.cs",
"RelativeToolTip": "survey-beta\\Models\\User.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:29.016Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 27,
"Title": "Survey.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Survey.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\Survey.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Survey.cs",
"RelativeToolTip": "survey-beta\\Models\\Survey.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:28.01Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 29,
"Title": "Question.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Question.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\Question.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Question.cs",
"RelativeToolTip": "survey-beta\\Models\\Question.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:26.546Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 33,
"Title": "appsettings.json",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\appsettings.json",
"RelativeDocumentMoniker": "survey-beta\\appsettings.json",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\appsettings.json",
"RelativeToolTip": "survey-beta\\appsettings.json",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2025-02-12T16:05:14.935Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 18,
"Title": "CreateSurveyDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateSurveyDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Create\\CreateSurveyDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateSurveyDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Create\\CreateSurveyDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T16:01:50.235Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 34,
"Title": "UsersServices.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\UsersServices.cs",
"RelativeDocumentMoniker": "survey-beta\\Services\\UsersServices.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\UsersServices.cs*",
"RelativeToolTip": "survey-beta\\Services\\UsersServices.cs*",
"ViewState": "AgIAAFYAAAAAAAAAAADwv2oAAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-11T12:02:00.909Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 32,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Program.cs",
"RelativeDocumentMoniker": "survey-beta\\Program.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Program.cs",
"RelativeToolTip": "survey-beta\\Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAFQAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:51:24.169Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 36,
"Title": "SurveyProfile.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\Profiles\\SurveyProfile.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\Profiles\\SurveyProfile.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\Profiles\\SurveyProfile.cs",
"RelativeToolTip": "survey-beta\\Mappers\\Profiles\\SurveyProfile.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:35:23.72Z"
},
{
"$type": "Document",
"DocumentIndex": 22,
"Title": "SurveyMapper.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\SurveyMapper.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\SurveyMapper.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\SurveyMapper.cs",
"RelativeToolTip": "survey-beta\\Mappers\\SurveyMapper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:35:16.802Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 37,
"Title": "SurveyStats.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Update\\SurveyStats.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Update\\SurveyStats.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Update\\SurveyStats.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Update\\SurveyStats.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T16:01:11.738Z"
},
{
"$type": "Document",
"DocumentIndex": 31,
"Title": "Answer.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Answer.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\Answer.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Answer.cs",
"RelativeToolTip": "survey-beta\\Models\\Answer.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:57:32.477Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 28,
"Title": "Response.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Response.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\Response.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Response.cs",
"RelativeToolTip": "survey-beta\\Models\\Response.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAsAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:50:24.655Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 30,
"Title": "Choice.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Choice.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\Choice.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Choice.cs",
"RelativeToolTip": "survey-beta\\Models\\Choice.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:57:34.367Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 35,
"Title": "AnswerRequest.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Response\\AnswerRequest.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Response\\AnswerRequest.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Response\\AnswerRequest.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Response\\AnswerRequest.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:57:36.653Z"
},
{
"$type": "Document",
"DocumentIndex": 38,
"Title": "UpdateSurveyDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Update\\UpdateSurveyDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Update\\UpdateSurveyDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Update\\UpdateSurveyDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Update\\UpdateSurveyDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAA4AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T16:01:12.421Z"
}
]
}
]
}
]
}

View File

@@ -0,0 +1,683 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\services\\analyticsservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\services\\analyticsservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\services\\responsesservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\services\\responsesservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\services\\surveyservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\services\\surveyservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\controllers\\analyticscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\controllers\\analyticscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\controllers\\responsescontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\controllers\\responsescontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\controllers\\surveycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\controllers\\surveycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\controllers\\userscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\controllers\\userscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\databasecontext\\appdbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\databasecontext\\appdbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\userinfodto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\userinfodto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\userdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\userdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\surveyparametersdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\surveyparametersdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\surveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\surveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\responsedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\responsedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\questiondto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\questiondto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\choicedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\choicedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\default\\answerdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\default\\answerdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\create\\logindto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\create\\logindto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\create\\createuserdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\create\\createuserdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\create\\createsurveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\create\\createsurveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\create\\createquestiondto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\create\\createquestiondto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\create\\createchoicedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\create\\createchoicedto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\usermapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\usermapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\surveymapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\surveymapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\responsemapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\responsemapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\questionmapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\questionmapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\choicemapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\choicemapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\survey.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\survey.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\response.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\response.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\choice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\choice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\models\\answer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\models\\answer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\services\\usersservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\services\\usersservices.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\response\\answerrequest.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\response\\answerrequest.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\mappers\\profiles\\surveyprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\mappers\\profiles\\surveyprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\update\\surveystats.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\update\\surveystats.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|c:\\users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\dtos\\update\\updatesurveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7A5087A4-5EFE-49C8-AD7A-A2AC9F815C32}|survey-beta\\survey-beta.csproj|solutionrelative:survey-beta\\dtos\\update\\updatesurveydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 284,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 10,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "AnalyticsController.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\AnalyticsController.cs",
"RelativeDocumentMoniker": "survey-beta\\Controllers\\AnalyticsController.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\AnalyticsController.cs",
"RelativeToolTip": "survey-beta\\Controllers\\AnalyticsController.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:06:15.47Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "UserInfoDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\UserInfoDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\UserInfoDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\UserInfoDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\UserInfoDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:52.823Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "UserDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\UserDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\UserDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\UserDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\UserDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:52.217Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "SurveyParametersDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\SurveyParametersDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\SurveyParametersDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\SurveyParametersDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\SurveyParametersDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:50.014Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "AppDbContext.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DataBaseContext\\AppDbContext.cs",
"RelativeDocumentMoniker": "survey-beta\\DataBaseContext\\AppDbContext.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DataBaseContext\\AppDbContext.cs",
"RelativeToolTip": "survey-beta\\DataBaseContext\\AppDbContext.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAqwAwAAAA2AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:35:35.408Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "UsersController.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\UsersController.cs",
"RelativeDocumentMoniker": "survey-beta\\Controllers\\UsersController.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\UsersController.cs",
"RelativeToolTip": "survey-beta\\Controllers\\UsersController.cs",
"ViewState": "AgIAADsAAAAAAAAAAAAIwFYAAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-11T12:13:55.608Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "SurveyController.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\SurveyController.cs",
"RelativeDocumentMoniker": "survey-beta\\Controllers\\SurveyController.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\SurveyController.cs",
"RelativeToolTip": "survey-beta\\Controllers\\SurveyController.cs",
"ViewState": "AgIAAA4AAAAAAAAAAAAkwC8AAABOAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T15:55:26.975Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "SurveyServices.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\SurveyServices.cs",
"RelativeDocumentMoniker": "survey-beta\\Services\\SurveyServices.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\SurveyServices.cs",
"RelativeToolTip": "survey-beta\\Services\\SurveyServices.cs",
"ViewState": "AgIAAFQAAAAAAAAAAAAawE0AAAAvAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T15:55:31.702Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "ResponsesServices.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\ResponsesServices.cs",
"RelativeDocumentMoniker": "survey-beta\\Services\\ResponsesServices.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\ResponsesServices.cs",
"RelativeToolTip": "survey-beta\\Services\\ResponsesServices.cs",
"ViewState": "AgIAABcAAAAAAAAAAAAqwD4AAAABAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:46:04.821Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "AnalyticsServices.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\AnalyticsServices.cs",
"RelativeDocumentMoniker": "survey-beta\\Services\\AnalyticsServices.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\AnalyticsServices.cs",
"RelativeToolTip": "survey-beta\\Services\\AnalyticsServices.cs",
"ViewState": "AgIAABMAAAAAAAAAAAAkwBYAAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-11T11:29:02.681Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "SurveyDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\SurveyDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\SurveyDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\SurveyDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\SurveyDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:50.628Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 12,
"Title": "ResponseDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\ResponseDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\ResponseDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\ResponseDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\ResponseDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:49.01Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 15,
"Title": "AnswerDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\AnswerDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\AnswerDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\AnswerDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\AnswerDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:46.403Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 16,
"Title": "LoginDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\LoginDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Create\\LoginDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\LoginDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Create\\LoginDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:43.41Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "ResponsesController.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\ResponsesController.cs",
"RelativeDocumentMoniker": "survey-beta\\Controllers\\ResponsesController.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Controllers\\ResponsesController.cs",
"RelativeToolTip": "survey-beta\\Controllers\\ResponsesController.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T15:55:25.945Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 17,
"Title": "CreateUserDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateUserDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Create\\CreateUserDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateUserDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Create\\CreateUserDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:42.808Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 19,
"Title": "CreateQuestionDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateQuestionDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Create\\CreateQuestionDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateQuestionDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Create\\CreateQuestionDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:39.761Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 20,
"Title": "CreateChoiceDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateChoiceDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Create\\CreateChoiceDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateChoiceDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Create\\CreateChoiceDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:39.044Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 21,
"Title": "UserMapper.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\UserMapper.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\UserMapper.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\UserMapper.cs",
"RelativeToolTip": "survey-beta\\Mappers\\UserMapper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:34.698Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 23,
"Title": "ResponseMapper.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\ResponseMapper.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\ResponseMapper.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\ResponseMapper.cs",
"RelativeToolTip": "survey-beta\\Mappers\\ResponseMapper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:33.572Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 24,
"Title": "QuestionMapper.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\QuestionMapper.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\QuestionMapper.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\QuestionMapper.cs",
"RelativeToolTip": "survey-beta\\Mappers\\QuestionMapper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:32.812Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 14,
"Title": "ChoiceDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\ChoiceDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\ChoiceDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\ChoiceDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\ChoiceDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAqwAQAAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T15:59:30.711Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 13,
"Title": "QuestionDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\QuestionDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Default\\QuestionDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Default\\QuestionDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Default\\QuestionDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAqwAIAAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T15:59:12.839Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 25,
"Title": "ChoiceMapper.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\ChoiceMapper.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\ChoiceMapper.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\ChoiceMapper.cs",
"RelativeToolTip": "survey-beta\\Mappers\\ChoiceMapper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:32.027Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 26,
"Title": "User.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\User.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\User.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\User.cs",
"RelativeToolTip": "survey-beta\\Models\\User.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:29.016Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 27,
"Title": "Survey.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Survey.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\Survey.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Survey.cs",
"RelativeToolTip": "survey-beta\\Models\\Survey.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:28.01Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 29,
"Title": "Question.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Question.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\Question.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Question.cs",
"RelativeToolTip": "survey-beta\\Models\\Question.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-12T16:05:26.546Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 33,
"Title": "appsettings.json",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\appsettings.json",
"RelativeDocumentMoniker": "survey-beta\\appsettings.json",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\appsettings.json",
"RelativeToolTip": "survey-beta\\appsettings.json",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2025-02-12T16:05:14.935Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 18,
"Title": "CreateSurveyDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateSurveyDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Create\\CreateSurveyDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Create\\CreateSurveyDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Create\\CreateSurveyDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T16:01:50.235Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 34,
"Title": "UsersServices.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\UsersServices.cs",
"RelativeDocumentMoniker": "survey-beta\\Services\\UsersServices.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Services\\UsersServices.cs",
"RelativeToolTip": "survey-beta\\Services\\UsersServices.cs",
"ViewState": "AgIAAFYAAAAAAAAAAADwv2oAAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-11T12:02:00.909Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 32,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Program.cs",
"RelativeDocumentMoniker": "survey-beta\\Program.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Program.cs",
"RelativeToolTip": "survey-beta\\Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAFQAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:51:24.169Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 36,
"Title": "SurveyProfile.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\Profiles\\SurveyProfile.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\Profiles\\SurveyProfile.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\Profiles\\SurveyProfile.cs",
"RelativeToolTip": "survey-beta\\Mappers\\Profiles\\SurveyProfile.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:35:23.72Z"
},
{
"$type": "Document",
"DocumentIndex": 22,
"Title": "SurveyMapper.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\SurveyMapper.cs",
"RelativeDocumentMoniker": "survey-beta\\Mappers\\SurveyMapper.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Mappers\\SurveyMapper.cs",
"RelativeToolTip": "survey-beta\\Mappers\\SurveyMapper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:35:16.802Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 37,
"Title": "SurveyStats.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Update\\SurveyStats.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Update\\SurveyStats.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Update\\SurveyStats.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Update\\SurveyStats.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T16:01:11.738Z"
},
{
"$type": "Document",
"DocumentIndex": 31,
"Title": "Answer.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Answer.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\Answer.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Answer.cs",
"RelativeToolTip": "survey-beta\\Models\\Answer.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:57:32.477Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 28,
"Title": "Response.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Response.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\Response.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Response.cs",
"RelativeToolTip": "survey-beta\\Models\\Response.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAsAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:50:24.655Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 30,
"Title": "Choice.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Choice.cs",
"RelativeDocumentMoniker": "survey-beta\\Models\\Choice.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\Models\\Choice.cs",
"RelativeToolTip": "survey-beta\\Models\\Choice.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:57:34.367Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 35,
"Title": "AnswerRequest.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Response\\AnswerRequest.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Response\\AnswerRequest.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Response\\AnswerRequest.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Response\\AnswerRequest.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T19:57:36.653Z"
},
{
"$type": "Document",
"DocumentIndex": 38,
"Title": "UpdateSurveyDto.cs",
"DocumentMoniker": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Update\\UpdateSurveyDto.cs",
"RelativeDocumentMoniker": "survey-beta\\DTOs\\Update\\UpdateSurveyDto.cs",
"ToolTip": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\survey-beta\\DTOs\\Update\\UpdateSurveyDto.cs",
"RelativeToolTip": "survey-beta\\DTOs\\Update\\UpdateSurveyDto.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAA4AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-10T16:01:12.421Z"
}
]
}
]
}
]
}

BIN
.vs/survey-beta2/v17/.wsuo Normal file

Binary file not shown.

View File

@@ -0,0 +1,23 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\alioa\\source\\repos\\survey-beta2\\",
"Documents": [],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 284,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
}
]
}
]
}
]
}

View File

@@ -0,0 +1,46 @@
using Microsoft.AspNetCore.Mvc;
using survey_beta.Models;
using System;
using System.Threading.Tasks;
using survey_beta.DTOs.Update;
namespace survey_beta.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AnalyticsController : ControllerBase
{
private readonly AnalyticsServices _analyticsService;
public AnalyticsController(AnalyticsServices analyticsService)
{
_analyticsService = analyticsService;
}
[HttpGet("{surveyId}/statistics")]
public async Task<ActionResult<SurveyStats>> GetSurveyStatistics(string surveyId)
{
if (string.IsNullOrWhiteSpace(surveyId))
return BadRequest(new { error = "Survey ID is required." });
var statistics = await Task.Run(() => _analyticsService.GetAggregatedSurveyResponses(surveyId));
if (statistics == null)
return NotFound(new { error = "No data available for the given survey." });
return Ok(statistics);
}
[HttpGet("{surveyId}/export")]
public async Task<IActionResult> ExportSurveyStatistics(string surveyId)
{
if (string.IsNullOrWhiteSpace(surveyId))
return BadRequest(new { error = "Survey ID is required." });
var fileResult = await _analyticsService.ExportResponsesToCsv(surveyId);
if (fileResult == null)
return NotFound(new { error = "No data available to export." });
return fileResult;
}
}
}

View File

@@ -0,0 +1,45 @@
using Microsoft.AspNetCore.Mvc;
using survey_beta.DTOs.Response;
using survey_beta.Models;
using System;
using System.Threading.Tasks;
namespace survey_beta.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ResponseController : ControllerBase
{
private readonly ResponsesService _responsesService;
public ResponseController(ResponsesService responsesService)
{
_responsesService = responsesService;
}
// [Authorize]
[HttpPost("add")]
public async Task<IActionResult> CreateResponse([FromBody] ResponseDto request)
{
try
{
await _responsesService.AddResponseAsync(request);
return Ok(new { message = "Your response has been submitted successfully." });
}
catch (Exception ex)
{
return BadRequest(new { error = ex.Message });
}
}
// [Authorize]
[HttpGet("survey/{surveyId}")]
public async Task<IActionResult> GetSurveyResponses(string surveyId)
{
var responses = await _responsesService.GetSurveyResponsesAsync(surveyId);
if (responses == null || responses.Count == 0)
{
return NotFound(new { message = "No responses found for this survey." });
}
return Ok(responses);
}
}
}

View File

@@ -0,0 +1,86 @@
using Microsoft.AspNet.Identity;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Response;
using survey_beta.DTOs.Update;
using survey_beta.Models;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
[Route("api/[controller]")]
[ApiController]
public class SurveyController : ControllerBase
{
private readonly SurveyService _surveyService;
private readonly Microsoft.AspNetCore.Identity.UserManager<User> _userManager;
public SurveyController(SurveyService surveyService, Microsoft.AspNetCore.Identity.UserManager<User> userManager)
{
_surveyService = surveyService;
_userManager = userManager;
}
[HttpGet("GetAll&ById")]
public async Task<IActionResult> GetAllSurveys([FromQuery] string id = null)
{
var surveys = await _surveyService.GetAllSurveysAsync(id);
return Ok(surveys);
}
[HttpPost("Create-Survey")]
// [Authorize]
public async Task<IActionResult> CreateSurvey([FromBody] CreateSurveyDto request)
{
var userId = _userManager.GetUserId(User);
var survey = await _surveyService.CreateSurveyAsync(request, userId);
return Ok(survey);
}
//[Authorize]
[HttpPut("EditSurvey/{id}")]
public async Task<IActionResult> UpdateSurvey([FromBody] UpdateSurveyDto request)
{
try
{
var success = await _surveyService.UpdateSurveyAsync(request);
if (!success) return NotFound(new { message = "Survey not found." });
return NoContent();
}
catch (InvalidOperationException ex)
{
return BadRequest(new { message = ex.Message });
}
catch (Exception)
{
return StatusCode(500, new { message = "An unexpected error occurred." });
}
}
//[Authorize]
[HttpPatch("publish-Survey/{id}")]
public async Task<IActionResult> PublishSurvey(string id)
{
var success = await _surveyService.PublishSurveyAsync(id);
if (!success) return NotFound(new { message = "Survey not found." });
return Accepted(new { message = "Survey has been published." });
}
//[Authorize]
[HttpPatch("unpublish-Survey/{id}")]
public async Task<IActionResult> UnpublishSurvey(string id)
{
var success = await _surveyService.UnpublishSurveyAsync(id);
if (!success) return NotFound(new { message = "Survey not found." });
return Accepted(new { message = "Survey has been unpublished." });
}
//[Authorize]
[HttpDelete("Delete-Survey{id}")]
public async Task<IActionResult> DeleteSurvey(string id)
{
var success = await _surveyService.DeleteSurveyAsync(id);
if (!success) return NotFound(new { message = "Survey not found." });
return Accepted(new { message = "Survey has been Removed." });
}
}

View File

@@ -0,0 +1,88 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Default;
[Route("api/[controller]")]
[ApiController]
public class UserController : ControllerBase
{
private readonly UsersServices _usersServices;
public UserController(UsersServices usersServices)
{
_usersServices = usersServices;
}
[HttpPost("register")]
public async Task<ActionResult<UserDto>> Register([FromBody] CreateUserDto createUserDto)
{
try
{
var user = await _usersServices.CreateUserAsync(createUserDto);
return Ok(user);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPost("login")]
public async Task<ActionResult<UserDto>> Login([FromBody] LoginDto loginDto)
{
try
{
var user = await _usersServices.SignInAsync(loginDto);
return Ok(user);
}
catch (Exception ex)
{
return Unauthorized(new { error = "Invalid credentials. Please check your username and password." });
}
}
//[Authorize]
[HttpGet("{id}")]
public async Task<IActionResult> GetUserById(string id)
{
try
{
var user = await _usersServices.GetUserByIdAsync(id);
return Ok(user);
}
catch (Exception ex)
{
return NotFound(new { message = ex.Message });
}
}
//[Authorize]
[HttpGet("by-username/{username}")]
public async Task<IActionResult> GetUserByUsername(string username)
{
try
{
var user = await _usersServices.GetUserByUsernameAsync(username);
return Ok(user);
}
catch (Exception ex)
{
return NotFound(new { message = ex.Message });
}
}
//[Authorize]
[HttpGet("All-Users")]
public async Task<IActionResult> GetAllUsers()
{
var users = await _usersServices.GetAllUsersAsync();
return Ok(users);
}
[HttpDelete("Delete-User")]
public async Task<IActionResult> DeleteUser(string id)
{
var users = await _usersServices.GetUserByIdAsync(id);
if (users == null)
return NotFound(new { message = "The specified user does not exist." });
var result = await _usersServices.DeleteUsersAsync(id);
return Ok(result);
}
}

View File

@@ -0,0 +1,8 @@
namespace survey_beta.DTOs.Create
{
public class CreateChoiceDto
{
public string Letter { get; set; }
public string Content { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
namespace survey_beta.DTOs.Create
{
public class CreateQuestionDto
{
public string Content { get; set; }
//public string SurveyId { get; set; }
public List<CreateChoiceDto> Choices { get; set; }
}
}

View File

@@ -0,0 +1,10 @@
namespace survey_beta.DTOs.Create
{
public class CreateResponseDto
{
public string IpAddress { get; set; }
public string SurveyId { get; set; }
public string Id { get; set; } = Guid.NewGuid().ToString();
public string? Answer { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace survey_beta.DTOs.Create
{
public class CreateSurveyDto
{
public string Title { get; set; }
public string Description { get; set; }
public string Category { get; set; }
public DateTime ExpirationDate { get; set; }
public bool IsPublished { get; set; }
public List<CreateQuestionDto> Questions { get; set; }
}
}

View File

@@ -0,0 +1,10 @@
namespace survey_beta.DTOs.Create
{
public class CreateUserDto
{
public string? Email { get; set; }
public string? Username { get; set; }
public string? Fullname { get; set; }
public string? Password { get; set; }
}
}

View File

@@ -0,0 +1,8 @@
namespace survey_beta.DTOs.Create
{
public class LoginDto
{
public string Username { get; set; }
public string Password { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace survey_beta.DTOs.Default
{
public class AnswerDto
{
public string Id { get; set; } = Guid.NewGuid().ToString();
public string QuestionId { get; set; }
public string ResponseId { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using System;
namespace survey_beta.DTOs.Default
{
public class ChoiceDto
{
public string Id { get; set; } = Guid.NewGuid().ToString();
public string Letter { get; set; }
public string Content { get; set; }
public string QuestionId { get; set; }
public bool IsCorrect { get; set; }
}
}

View File

@@ -0,0 +1,12 @@
namespace survey_beta.DTOs.Default
{
public class QuestionDto
{
public string Id { get; set; } = Guid.NewGuid().ToString();
public string Content { get; set; }
public string SurveyId { get; set; }
public string QuestionType { get; set; }
public string QuestionId { get; set; }
public IEnumerable<ChoiceDto> Choices { get; set; }
}
}

View File

@@ -0,0 +1,11 @@
using survey_beta.DTOs.Default;
public class ResponseDto
{
public string Id { get; set; }
public string SurveyId { get; set; }
public string Response { get; set; }
public string ResponseContent { get; set; }
public string? IpAddress { get; set; }
public ICollection<AnswerDto> Answers { get; set; }
}

View File

@@ -0,0 +1,15 @@
namespace survey_beta.DTOs.Default
{
public class SurveyDto
{
public string Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Category { get; set; }
public DateTime ExpirationDate { get; set; }
public DateTime CreatedAt { get; set; }
public bool IsPublished { get; set; }
public string AuthorId { get; set; }
public List<QuestionDto> Questions { get; set; }
}
}

View File

@@ -0,0 +1,8 @@
namespace survey_beta.DTOs.Default
{
public class SurveyParametersDto
{
public string? AuthorId { get; set; }
public string? Category { get; set; }
}
}

View File

@@ -0,0 +1,11 @@
namespace survey_beta.DTOs.Default
{
public class UserDto
{
public string? Id { get; set; }
public string? Email { get; set; }
public string? Username { get; set; }
public string? Fullname { get; set; }
public string Token { get; set; }
}
}

View File

@@ -0,0 +1,6 @@
namespace survey_beta.DTOs.Default
{
public class UserInfoDto
{
}
}

View File

@@ -0,0 +1,8 @@
namespace survey_beta.DTOs.Response
{
public class AnswerRequest
{
public string Question { get; set; }
public string AnswerText { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace survey_beta.DTOs.Response
{
public class AuthorResponseDto
{
public string Id { get; set; }
public string Fullname { get; set; }
public string Username { get; set; }
}
}

View File

@@ -0,0 +1,10 @@
namespace survey_beta.DTOs.Response
{
public class CreatorResponseDto
{
public string Id { get; set; }
// public string? IpAddress { get; set; }
public string SurveyId { get; set; }
//public List<AnswerRequest> Answers { get; set; }
}
}

View File

@@ -0,0 +1,12 @@
namespace survey_beta.DTOs.Response
{
public class SurveyResponseDto
{
public string Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Category { get; set; }
public DateTime? ExpirationDate { get; set; }
public bool IsPublished { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace survey_beta.DTOs.Update
{
public class SurveyAnalytics
{
public string SurveyId { get; set; }
public int TotalResponses { get; set; }
public DateTime CreatedAt { get; set; }
}
}

View File

@@ -0,0 +1,10 @@
namespace survey_beta.DTOs.Update
{
public class SurveyStats
{
public string? SurveyId { get; set; }
public int TotalResponses { get; set; }
public Dictionary<string, int>? AnswerFrequency { get; set; }
public Dictionary<string, int>? QuestionFrequency { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
using survey_beta.DTOs.Default;
namespace survey_beta.DTOs.Update
{
public class UpdateSurveyDto
{
public string Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Category { get; set; }
public DateTime? ExpirationDate { get; set; }
public bool IsPublished { get; set; }
public List<QuestionDto> Questions { get; set; }
}
}

View File

@@ -1,10 +1,12 @@
using Microsoft.EntityFrameworkCore; using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using survey_beta.Models; using survey_beta.Models;
namespace survey_beta.DataBaseContext namespace survey_beta.DataBaseContext
{ {
public class AppDbContext : DbContext public class AppDbContext : Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext<User>
{ {
public DbSet<User> Users { get; set; }
public DbSet<Survey> Surveys { get; set; } public DbSet<Survey> Surveys { get; set; }
public DbSet<Question> Questions { get; set; } public DbSet<Question> Questions { get; set; }
public DbSet<Choice> Choices { get; set; } public DbSet<Choice> Choices { get; set; }
@@ -14,43 +16,44 @@ namespace survey_beta.DataBaseContext
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{ {
} }
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>()
.Property(u => u.Fullname)
.IsRequired();
modelBuilder.Entity<Survey>() modelBuilder.Entity<Survey>()
.HasOne(s => s.Author) .HasOne(s => s.Author)
.WithMany(u => u.Surveys) .WithMany(u => u.Surveys)
.HasForeignKey(s => s.AuthorId); .HasForeignKey(s => s.AuthorId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Question>() modelBuilder.Entity<Question>()
.HasOne(q => q.Survey) .HasIndex(q => q.SurveyId);
.WithMany(s => s.Questions) modelBuilder.Entity<Choice>()
.HasForeignKey(q => q.SurveyId); .HasIndex(c => c.QuestionId);
modelBuilder.Entity<Choice>() modelBuilder.Entity<Choice>()
.HasOne(c => c.Question) .HasOne(c => c.Question)
.WithMany(q => q.Choices) .WithMany(q => q.Choices)
.HasForeignKey(c => c.QuestionId); .HasForeignKey(c => c.QuestionId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Response>()
.HasOne(r => r.Survey)
.WithMany(s => s.Responses)
.HasForeignKey(r => r.SurveyId);
modelBuilder.Entity<Answer>()
.HasOne(a => a.Response)
.WithMany(r => r.Answers)
.HasForeignKey(a => a.ResponseId);
modelBuilder.Entity<Answer>() modelBuilder.Entity<Answer>()
.HasOne(a => a.Question) .HasOne(a => a.Question)
.WithMany() .WithMany()
.HasForeignKey(a => a.QuestionId); .HasForeignKey(a => a.QuestionId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Answer>() modelBuilder.Entity<Answer>()
.HasOne(a => a.Choice) .HasOne(a => a.Choice)
.WithMany() .WithMany()
.HasForeignKey(a => a.ChoiceId); .HasForeignKey(a => a.ChoiceId)
.OnDelete(DeleteBehavior.Cascade);
} }
} }
} }

View File

@@ -0,0 +1,32 @@
#if false
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Default;
using survey_beta.Models;
namespace survey_beta.Mappers
{
public class ChoiceMapper
{
public static ChoiceDto ToDto(Choice choice)
{
return new ChoiceDto
{
Id = choice.Id,
Letter = choice.Letter,
Content = choice.Content,
QuestionId = choice.QuestionId
};
}
public static Choice ToEntity(CreateChoiceDto dto)
{
return new Choice
{
Id = Guid.NewGuid().ToString(),
Letter = dto.Letter,
Content = dto.Content,
};
}
}
}
#endif

View File

@@ -0,0 +1,27 @@
using AutoMapper;
using survey_beta.DTOs.Default;
using survey_beta.DTOs.Response;
using survey_beta.DTOs.Update;
using survey_beta.Models;
namespace survey_beta.Mappers.Profiles
{
public class AnalyticsProfile : Profile
{
public AnalyticsProfile()
{
CreateMap<Response, ResponseDto>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.SurveyId, opt => opt.MapFrom(src => src.SurveyId))
.ForMember(dest => dest.Answers, opt => opt.MapFrom(src => src.Answers));
CreateMap<Answer, AnswerDto>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.QuestionId, opt => opt.MapFrom(src => src.QuestionId));
CreateMap<SurveyAnalytics, SurveyStats>()
.ForMember(dest => dest.SurveyId, opt => opt.MapFrom(src => src.SurveyId))
.ForMember(dest => dest.TotalResponses, opt => opt.MapFrom(src => src.TotalResponses));
}
}
}

View File

@@ -0,0 +1,15 @@
using AutoMapper;
using survey_beta.DTOs.Default;
using survey_beta.DTOs.Response;
using survey_beta.Models;
namespace survey_beta.Mappers.Profiles
{
public class AnswerProfile : Profile
{
public AnswerProfile()
{
CreateMap<Answer, AnswerDto>();
}
}
}

View File

@@ -0,0 +1,15 @@
using AutoMapper;
using survey_beta.DTOs.Default;
using survey_beta.DTOs.Response;
using survey_beta.Models;
namespace survey_beta.Mappers.Profiles
{
public class ChoiceProfile : Profile
{
public ChoiceProfile()
{
CreateMap<Choice, ChoiceDto>();
}
}
}

View File

@@ -0,0 +1,22 @@
using AutoMapper;
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Default;
using survey_beta.DTOs.Response;
using survey_beta.DTOs.Update;
using survey_beta.Models;
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<CreateSurveyDto, Survey>().ForMember(dest => dest.Id, opt => opt.Ignore());
CreateMap<CreateQuestionDto, Question>().ForMember(dest => dest.Id, opt => opt.Ignore());
CreateMap<CreateChoiceDto, Choice>().ForMember(dest => dest.Id, opt => opt.Ignore());
CreateMap<Survey, SurveyDto>();
CreateMap<Question, QuestionDto>();
CreateMap<Choice, ChoiceDto>();
CreateMap<UpdateSurveyDto, Survey>();
}
}

View File

@@ -0,0 +1,15 @@
using AutoMapper;
using survey_beta.DTOs.Default;
using survey_beta.DTOs.Response;
using survey_beta.Models;
namespace survey_beta.Mappers.Profiles
{
public class QuestionProfile : Profile
{
public QuestionProfile()
{
CreateMap<Question, QuestionDto>();
}
}
}

View File

@@ -0,0 +1,23 @@
namespace survey_beta.Mappers.Profiles
{
using AutoMapper;
using survey_beta.DTOs.Default;
using survey_beta.DTOs.Response;
using survey_beta.Models;
public class ResponseProfile : Profile
{
public ResponseProfile()
{
CreateMap<ResponseDto, Response>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.SurveyId, opt => opt.MapFrom(src => src.SurveyId))
.ForMember(dest => dest.CreatedAt, opt => opt.MapFrom(src => DateTime.UtcNow))
.ForMember(dest => dest.Answers, opt => opt.MapFrom(src => src.Answers));
CreateMap<AnswerDto, Answer>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.ResponseId, opt => opt.MapFrom(src => src.ResponseId))
.ForMember(dest => dest.QuestionId, opt => opt.MapFrom(src => src.QuestionId));
}
}
}

View File

@@ -0,0 +1,17 @@
using AutoMapper;
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Default;
using survey_beta.DTOs.Response;
using survey_beta.Models;
namespace survey_beta.Mappers.Profiles
{
public class SurveyProfile : Profile
{
public SurveyProfile()
{
CreateMap<Survey, SurveyDto>();
CreateMap<CreateSurveyDto, Survey>();
}
}
}

View File

@@ -0,0 +1,16 @@
using AutoMapper;
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Default;
using survey_beta.Models;
namespace survey_beta.Mappers.Profiles
{
public class UserProfile : Profile
{
public UserProfile()
{
CreateMap<User, UserDto>();
CreateMap<CreateUserDto, User>();
}
}
}

View File

@@ -0,0 +1,32 @@
#if false
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Default;
using survey_beta.Models;
namespace survey_beta.Mappers
{
public class QuestionMapper
{
public static QuestionDto ToDto(Question question)
{
return new QuestionDto
{
Id = question.Id,
Content = question.Content,
SurveyId = question.SurveyId
};
}
public static Question ToEntity(CreateQuestionDto dto)
{
return new Question
{
Id = Guid.NewGuid().ToString(),
Content = dto.Content,
// SurveyId = dto.SurveyId
};
}
}
}
#endif

View File

@@ -0,0 +1,31 @@
#if false
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Default;
using survey_beta.Models;
namespace survey_beta.Mappers
{
public class ResponseMapper
{
public static ResponseDto ToDto(Response response)
{
return new ResponseDto
{
Id = response.Id,
// IpAddress = response.IpAddress,
SurveyId = response.SurveyId
};
}
public static Response ToEntity(CreateResponseDto dto)
{
return new Response
{
Id = Guid.NewGuid().ToString(),
//IpAddress = dto.IpAddress,
SurveyId = dto.SurveyId
};
}
}
}
#endif

View File

@@ -0,0 +1,38 @@
#if false
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Default;
using survey_beta.Models;
namespace survey_beta.Mappers
{
public class SurveyMapper
{
public static SurveyDto ToDto(Survey survey)
{
return new SurveyDto
{
Id = survey.Id,
Title = survey.Title,
Description = survey.Description,
Category = survey.Category,
IsPublished = survey.IsPublished,
AuthorId = survey.AuthorId
};
}
public static Survey ToEntity(CreateSurveyDto dto, string authorId)
{
return new Survey
{
Id = Guid.NewGuid().ToString(),
Title = dto.Title,
Description = dto.Description,
Category = dto.Category,
ExpirationDate = dto.ExpirationDate,
IsPublished = false,
AuthorId = authorId
};
}
}
}
#endif

View File

@@ -0,0 +1,37 @@
#if false
using Microsoft.AspNetCore.Identity;
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Default;
using survey_beta.Models;
namespace survey_beta.Mappers
{
public class UserMapper
{
public static UserDto ToDto(User user)
{
return new UserDto
{
Id = user.Id,
Email = user.Email,
Username = user.UserName,
Fullname = user.Fullname
};
}
public static User ToEntity(CreateUserDto dto, IPasswordHasher<User> passwordHasher)
{
var user = new User
{
Id = Guid.NewGuid().ToString(),
Email = dto.Email,
UserName = dto.Username,
Fullname = dto.Fullname,
};
user.PasswordHash = passwordHasher.HashPassword(user, dto.Password);
return user;
}
}
}
#endif

View File

@@ -0,0 +1,307 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250126102512_intit")]
partial class intit
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ResponseId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Letter")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("IpAddress")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Category")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.HasColumnType("text");
b.Property<string>("Email")
.HasColumnType("text");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasColumnType("text");
b.Property<string>("NormalizedUserName")
.HasColumnType("text");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasColumnType("text");
b.Property<string>("Username")
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("User");
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Responses")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
b.Navigation("Responses");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,212 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class intit : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "User",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
Username = table.Column<string>(type: "text", nullable: true),
Fullname = table.Column<string>(type: "text", nullable: true),
Email = table.Column<string>(type: "text", nullable: true),
PasswordHash = table.Column<string>(type: "text", nullable: true),
UserName = table.Column<string>(type: "text", nullable: true),
NormalizedUserName = table.Column<string>(type: "text", nullable: true),
NormalizedEmail = table.Column<string>(type: "text", nullable: true),
EmailConfirmed = table.Column<bool>(type: "boolean", nullable: false),
SecurityStamp = table.Column<string>(type: "text", nullable: true),
ConcurrencyStamp = table.Column<string>(type: "text", nullable: true),
PhoneNumber = table.Column<string>(type: "text", nullable: true),
PhoneNumberConfirmed = table.Column<bool>(type: "boolean", nullable: false),
TwoFactorEnabled = table.Column<bool>(type: "boolean", nullable: false),
LockoutEnd = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: true),
LockoutEnabled = table.Column<bool>(type: "boolean", nullable: false),
AccessFailedCount = table.Column<int>(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_User", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Surveys",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
Title = table.Column<string>(type: "text", nullable: false),
Description = table.Column<string>(type: "text", nullable: false),
Category = table.Column<string>(type: "text", nullable: false),
ExpirationDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
IsPublished = table.Column<bool>(type: "boolean", nullable: false),
AuthorId = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Surveys", x => x.Id);
table.ForeignKey(
name: "FK_Surveys_User_AuthorId",
column: x => x.AuthorId,
principalTable: "User",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Questions",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
Content = table.Column<string>(type: "text", nullable: false),
SurveyId = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Questions", x => x.Id);
table.ForeignKey(
name: "FK_Questions_Surveys_SurveyId",
column: x => x.SurveyId,
principalTable: "Surveys",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Responses",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
IpAddress = table.Column<string>(type: "text", nullable: false),
SurveyId = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Responses", x => x.Id);
table.ForeignKey(
name: "FK_Responses_Surveys_SurveyId",
column: x => x.SurveyId,
principalTable: "Surveys",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Choices",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
Letter = table.Column<string>(type: "text", nullable: false),
Content = table.Column<string>(type: "text", nullable: false),
QuestionId = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Choices", x => x.Id);
table.ForeignKey(
name: "FK_Choices_Questions_QuestionId",
column: x => x.QuestionId,
principalTable: "Questions",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Answers",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
ResponseId = table.Column<string>(type: "text", nullable: false),
QuestionId = table.Column<string>(type: "text", nullable: false),
ChoiceId = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Answers", x => x.Id);
table.ForeignKey(
name: "FK_Answers_Choices_ChoiceId",
column: x => x.ChoiceId,
principalTable: "Choices",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Answers_Questions_QuestionId",
column: x => x.QuestionId,
principalTable: "Questions",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Answers_Responses_ResponseId",
column: x => x.ResponseId,
principalTable: "Responses",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_Answers_ChoiceId",
table: "Answers",
column: "ChoiceId");
migrationBuilder.CreateIndex(
name: "IX_Answers_QuestionId",
table: "Answers",
column: "QuestionId");
migrationBuilder.CreateIndex(
name: "IX_Answers_ResponseId",
table: "Answers",
column: "ResponseId");
migrationBuilder.CreateIndex(
name: "IX_Choices_QuestionId",
table: "Choices",
column: "QuestionId");
migrationBuilder.CreateIndex(
name: "IX_Questions_SurveyId",
table: "Questions",
column: "SurveyId");
migrationBuilder.CreateIndex(
name: "IX_Responses_SurveyId",
table: "Responses",
column: "SurveyId");
migrationBuilder.CreateIndex(
name: "IX_Surveys_AuthorId",
table: "Surveys",
column: "AuthorId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Answers");
migrationBuilder.DropTable(
name: "Choices");
migrationBuilder.DropTable(
name: "Responses");
migrationBuilder.DropTable(
name: "Questions");
migrationBuilder.DropTable(
name: "Surveys");
migrationBuilder.DropTable(
name: "User");
}
}
}

View File

@@ -0,0 +1,502 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250128174252_Controllers")]
partial class Controllers
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ResponseId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Letter")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("IpAddress")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Category")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("Username")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Responses")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
b.Navigation("Responses");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,332 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class Controllers : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Surveys_User_AuthorId",
table: "Surveys");
migrationBuilder.DropPrimaryKey(
name: "PK_User",
table: "User");
migrationBuilder.RenameTable(
name: "User",
newName: "AspNetUsers");
migrationBuilder.AlterColumn<string>(
name: "UserName",
table: "AspNetUsers",
type: "character varying(256)",
maxLength: 256,
nullable: true,
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "NormalizedUserName",
table: "AspNetUsers",
type: "character varying(256)",
maxLength: 256,
nullable: true,
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "NormalizedEmail",
table: "AspNetUsers",
type: "character varying(256)",
maxLength: 256,
nullable: true,
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Email",
table: "AspNetUsers",
type: "character varying(256)",
maxLength: 256,
nullable: true,
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AddPrimaryKey(
name: "PK_AspNetUsers",
table: "AspNetUsers",
column: "Id");
migrationBuilder.CreateTable(
name: "AspNetRoles",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
Name = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
NormalizedName = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
ConcurrencyStamp = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetRoles", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AspNetUserClaims",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
UserId = table.Column<string>(type: "text", nullable: false),
ClaimType = table.Column<string>(type: "text", nullable: true),
ClaimValue = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserClaims", x => x.Id);
table.ForeignKey(
name: "FK_AspNetUserClaims_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserLogins",
columns: table => new
{
LoginProvider = table.Column<string>(type: "text", nullable: false),
ProviderKey = table.Column<string>(type: "text", nullable: false),
ProviderDisplayName = table.Column<string>(type: "text", nullable: true),
UserId = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey });
table.ForeignKey(
name: "FK_AspNetUserLogins_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserTokens",
columns: table => new
{
UserId = table.Column<string>(type: "text", nullable: false),
LoginProvider = table.Column<string>(type: "text", nullable: false),
Name = table.Column<string>(type: "text", nullable: false),
Value = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name });
table.ForeignKey(
name: "FK_AspNetUserTokens_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetRoleClaims",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
RoleId = table.Column<string>(type: "text", nullable: false),
ClaimType = table.Column<string>(type: "text", nullable: true),
ClaimValue = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id);
table.ForeignKey(
name: "FK_AspNetRoleClaims_AspNetRoles_RoleId",
column: x => x.RoleId,
principalTable: "AspNetRoles",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserRoles",
columns: table => new
{
UserId = table.Column<string>(type: "text", nullable: false),
RoleId = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId });
table.ForeignKey(
name: "FK_AspNetUserRoles_AspNetRoles_RoleId",
column: x => x.RoleId,
principalTable: "AspNetRoles",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_AspNetUserRoles_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "EmailIndex",
table: "AspNetUsers",
column: "NormalizedEmail");
migrationBuilder.CreateIndex(
name: "UserNameIndex",
table: "AspNetUsers",
column: "NormalizedUserName",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_AspNetRoleClaims_RoleId",
table: "AspNetRoleClaims",
column: "RoleId");
migrationBuilder.CreateIndex(
name: "RoleNameIndex",
table: "AspNetRoles",
column: "NormalizedName",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_AspNetUserClaims_UserId",
table: "AspNetUserClaims",
column: "UserId");
migrationBuilder.CreateIndex(
name: "IX_AspNetUserLogins_UserId",
table: "AspNetUserLogins",
column: "UserId");
migrationBuilder.CreateIndex(
name: "IX_AspNetUserRoles_RoleId",
table: "AspNetUserRoles",
column: "RoleId");
migrationBuilder.AddForeignKey(
name: "FK_Surveys_AspNetUsers_AuthorId",
table: "Surveys",
column: "AuthorId",
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Surveys_AspNetUsers_AuthorId",
table: "Surveys");
migrationBuilder.DropTable(
name: "AspNetRoleClaims");
migrationBuilder.DropTable(
name: "AspNetUserClaims");
migrationBuilder.DropTable(
name: "AspNetUserLogins");
migrationBuilder.DropTable(
name: "AspNetUserRoles");
migrationBuilder.DropTable(
name: "AspNetUserTokens");
migrationBuilder.DropTable(
name: "AspNetRoles");
migrationBuilder.DropPrimaryKey(
name: "PK_AspNetUsers",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "EmailIndex",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "UserNameIndex",
table: "AspNetUsers");
migrationBuilder.RenameTable(
name: "AspNetUsers",
newName: "User");
migrationBuilder.AlterColumn<string>(
name: "UserName",
table: "User",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "character varying(256)",
oldMaxLength: 256,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "NormalizedUserName",
table: "User",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "character varying(256)",
oldMaxLength: 256,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "NormalizedEmail",
table: "User",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "character varying(256)",
oldMaxLength: 256,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Email",
table: "User",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "character varying(256)",
oldMaxLength: 256,
oldNullable: true);
migrationBuilder.AddPrimaryKey(
name: "PK_User",
table: "User",
column: "Id");
migrationBuilder.AddForeignKey(
name: "FK_Surveys_User_AuthorId",
table: "Surveys",
column: "AuthorId",
principalTable: "User",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@@ -0,0 +1,500 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250131114349_ControllersServices")]
partial class ControllersServices
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ResponseId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Letter")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("IpAddress")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.IsRequired()
.HasMaxLength(255)
.HasColumnType("character varying(255)");
b.Property<string>("Category")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Responses")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
b.Navigation("Responses");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,77 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class ControllersServices : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "UserName",
table: "AspNetUsers");
migrationBuilder.RenameColumn(
name: "Username",
table: "AspNetUsers",
newName: "UserName");
migrationBuilder.AlterColumn<string>(
name: "AuthorId",
table: "Surveys",
type: "character varying(255)",
maxLength: 255,
nullable: false,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "UserName",
table: "AspNetUsers",
type: "character varying(256)",
maxLength: 256,
nullable: true,
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameColumn(
name: "UserName",
table: "AspNetUsers",
newName: "Username");
migrationBuilder.AlterColumn<string>(
name: "AuthorId",
table: "Surveys",
type: "text",
nullable: false,
oldClrType: typeof(string),
oldType: "character varying(255)",
oldMaxLength: 255);
migrationBuilder.AlterColumn<string>(
name: "Username",
table: "AspNetUsers",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "character varying(256)",
oldMaxLength: 256,
oldNullable: true);
migrationBuilder.AddColumn<string>(
name: "UserName",
table: "AspNetUsers",
type: "character varying(256)",
maxLength: 256,
nullable: true);
}
}
}

View File

@@ -0,0 +1,560 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250131180518_ControllersServices2")]
partial class ControllersServices2
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("Surveys", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Category")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime?>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ResponseId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Letter")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveysId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.HasIndex("SurveysId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("IpAddress")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("text");
b.Property<string>("AuthorId")
.IsRequired()
.HasMaxLength(255)
.HasColumnType("character varying(255)");
b.Property<string>("Category")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Survey");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Surveys", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany()
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Surveys", null)
.WithMany("Questions")
.HasForeignKey("SurveysId");
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Responses")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Author");
});
modelBuilder.Entity("Surveys", b =>
{
b.Navigation("Questions");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
b.Navigation("Responses");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,164 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class ControllersServices2 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Questions_Surveys_SurveyId",
table: "Questions");
migrationBuilder.DropForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses");
migrationBuilder.AlterColumn<DateTime>(
name: "ExpirationDate",
table: "Surveys",
type: "timestamp with time zone",
nullable: true,
oldClrType: typeof(DateTime),
oldType: "timestamp with time zone");
migrationBuilder.AlterColumn<string>(
name: "AuthorId",
table: "Surveys",
type: "text",
nullable: false,
oldClrType: typeof(string),
oldType: "character varying(255)",
oldMaxLength: 255);
migrationBuilder.AddColumn<string>(
name: "SurveysId",
table: "Questions",
type: "text",
nullable: true);
migrationBuilder.CreateTable(
name: "Survey",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
Title = table.Column<string>(type: "text", nullable: false),
Description = table.Column<string>(type: "text", nullable: false),
Category = table.Column<string>(type: "text", nullable: false),
ExpirationDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
IsPublished = table.Column<bool>(type: "boolean", nullable: false),
AuthorId = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Survey", x => x.Id);
table.ForeignKey(
name: "FK_Survey_AspNetUsers_AuthorId",
column: x => x.AuthorId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_Questions_SurveysId",
table: "Questions",
column: "SurveysId");
migrationBuilder.CreateIndex(
name: "IX_Survey_AuthorId",
table: "Survey",
column: "AuthorId");
migrationBuilder.AddForeignKey(
name: "FK_Questions_Survey_SurveyId",
table: "Questions",
column: "SurveyId",
principalTable: "Survey",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
name: "FK_Questions_Surveys_SurveysId",
table: "Questions",
column: "SurveysId",
principalTable: "Surveys",
principalColumn: "Id");
migrationBuilder.AddForeignKey(
name: "FK_Responses_Survey_SurveyId",
table: "Responses",
column: "SurveyId",
principalTable: "Survey",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Questions_Survey_SurveyId",
table: "Questions");
migrationBuilder.DropForeignKey(
name: "FK_Questions_Surveys_SurveysId",
table: "Questions");
migrationBuilder.DropForeignKey(
name: "FK_Responses_Survey_SurveyId",
table: "Responses");
migrationBuilder.DropTable(
name: "Survey");
migrationBuilder.DropIndex(
name: "IX_Questions_SurveysId",
table: "Questions");
migrationBuilder.DropColumn(
name: "SurveysId",
table: "Questions");
migrationBuilder.AlterColumn<DateTime>(
name: "ExpirationDate",
table: "Surveys",
type: "timestamp with time zone",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
oldClrType: typeof(DateTime),
oldType: "timestamp with time zone",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "AuthorId",
table: "Surveys",
type: "character varying(255)",
maxLength: 255,
nullable: false,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AddForeignKey(
name: "FK_Questions_Surveys_SurveyId",
table: "Questions",
column: "SurveyId",
principalTable: "Surveys",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses",
column: "SurveyId",
principalTable: "Surveys",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@@ -0,0 +1,500 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250131190914_Con")]
partial class Con
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ResponseId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Letter")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("IpAddress")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Category")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime?>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("Username")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany()
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,169 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class Con : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Questions_Survey_SurveyId",
table: "Questions");
migrationBuilder.DropForeignKey(
name: "FK_Questions_Surveys_SurveysId",
table: "Questions");
migrationBuilder.DropForeignKey(
name: "FK_Responses_Survey_SurveyId",
table: "Responses");
migrationBuilder.DropTable(
name: "Survey");
migrationBuilder.DropIndex(
name: "IX_Questions_SurveysId",
table: "Questions");
migrationBuilder.DropColumn(
name: "SurveysId",
table: "Questions");
migrationBuilder.RenameColumn(
name: "UserName",
table: "AspNetUsers",
newName: "Username");
migrationBuilder.AlterColumn<string>(
name: "Username",
table: "AspNetUsers",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "character varying(256)",
oldMaxLength: 256,
oldNullable: true);
migrationBuilder.AddColumn<string>(
name: "UserName",
table: "AspNetUsers",
type: "character varying(256)",
maxLength: 256,
nullable: true);
migrationBuilder.AddForeignKey(
name: "FK_Questions_Surveys_SurveyId",
table: "Questions",
column: "SurveyId",
principalTable: "Surveys",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses",
column: "SurveyId",
principalTable: "Surveys",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Questions_Surveys_SurveyId",
table: "Questions");
migrationBuilder.DropForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses");
migrationBuilder.DropColumn(
name: "UserName",
table: "AspNetUsers");
migrationBuilder.RenameColumn(
name: "Username",
table: "AspNetUsers",
newName: "UserName");
migrationBuilder.AddColumn<string>(
name: "SurveysId",
table: "Questions",
type: "text",
nullable: true);
migrationBuilder.AlterColumn<string>(
name: "UserName",
table: "AspNetUsers",
type: "character varying(256)",
maxLength: 256,
nullable: true,
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.CreateTable(
name: "Survey",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
AuthorId = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
Category = table.Column<string>(type: "text", nullable: false),
Description = table.Column<string>(type: "text", nullable: false),
ExpirationDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
IsPublished = table.Column<bool>(type: "boolean", nullable: false),
Title = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Survey", x => x.Id);
table.ForeignKey(
name: "FK_Survey_AspNetUsers_AuthorId",
column: x => x.AuthorId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_Questions_SurveysId",
table: "Questions",
column: "SurveysId");
migrationBuilder.CreateIndex(
name: "IX_Survey_AuthorId",
table: "Survey",
column: "AuthorId");
migrationBuilder.AddForeignKey(
name: "FK_Questions_Survey_SurveyId",
table: "Questions",
column: "SurveyId",
principalTable: "Survey",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
name: "FK_Questions_Surveys_SurveysId",
table: "Questions",
column: "SurveysId",
principalTable: "Surveys",
principalColumn: "Id");
migrationBuilder.AddForeignKey(
name: "FK_Responses_Survey_SurveyId",
table: "Responses",
column: "SurveyId",
principalTable: "Survey",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@@ -0,0 +1,498 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250131192348_AddFullnameToUser")]
partial class AddFullnameToUser
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ResponseId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Letter")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("IpAddress")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Category")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime?>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany()
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,77 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class AddFullnameToUser : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "UserName",
table: "AspNetUsers");
migrationBuilder.RenameColumn(
name: "Username",
table: "AspNetUsers",
newName: "UserName");
migrationBuilder.AlterColumn<string>(
name: "UserName",
table: "AspNetUsers",
type: "character varying(256)",
maxLength: 256,
nullable: true,
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Fullname",
table: "AspNetUsers",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameColumn(
name: "UserName",
table: "AspNetUsers",
newName: "Username");
migrationBuilder.AlterColumn<string>(
name: "Username",
table: "AspNetUsers",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "character varying(256)",
oldMaxLength: 256,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Fullname",
table: "AspNetUsers",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AddColumn<string>(
name: "UserName",
table: "AspNetUsers",
type: "character varying(256)",
maxLength: 256,
nullable: true);
}
}
}

View File

@@ -0,0 +1 @@


View File

@@ -0,0 +1,52 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class responses : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<DateTime>(
name: "CreatedAt",
table: "Responses",
type: "timestamp with time zone",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
migrationBuilder.AddColumn<string>(
name: "Text",
table: "Questions",
type: "text",
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "Type",
table: "Questions",
type: "text",
nullable: false,
defaultValue: "");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "CreatedAt",
table: "Responses");
migrationBuilder.DropColumn(
name: "Text",
table: "Questions");
migrationBuilder.DropColumn(
name: "Type",
table: "Questions");
}
}
}

View File

@@ -0,0 +1,507 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250201210414_Serviecs")]
partial class Serviecs
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ResponseId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Letter")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Text")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("IpAddress")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.HasColumnType("text");
b.Property<string>("Category")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime?>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany()
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,36 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class Serviecs : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "AuthorId",
table: "Surveys",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "AuthorId",
table: "Surveys",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
}
}
}

View File

@@ -0,0 +1,495 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250201210920_Serviecs2")]
partial class Serviecs2
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ResponseId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.HasColumnType("text");
b.Property<string>("Letter")
.HasColumnType("text");
b.Property<string>("QuestionId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.HasColumnType("text");
b.Property<string>("SurveyId")
.HasColumnType("text");
b.Property<string>("Text")
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("IpAddress")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.HasColumnType("text");
b.Property<string>("Category")
.HasColumnType("text");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<DateTime?>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany()
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,198 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class Serviecs2 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Title",
table: "Surveys",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "Description",
table: "Surveys",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "Category",
table: "Surveys",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "Type",
table: "Questions",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "Text",
table: "Questions",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "SurveyId",
table: "Questions",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "Content",
table: "Questions",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "QuestionId",
table: "Choices",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "Letter",
table: "Choices",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "Content",
table: "Choices",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Title",
table: "Surveys",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Description",
table: "Surveys",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Category",
table: "Surveys",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Type",
table: "Questions",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Text",
table: "Questions",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "SurveyId",
table: "Questions",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Content",
table: "Questions",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "QuestionId",
table: "Choices",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Letter",
table: "Choices",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Content",
table: "Choices",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
}
}
}

View File

@@ -0,0 +1,491 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250202101403_reomveIp")]
partial class reomveIp
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("QuestionId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ResponseId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.HasColumnType("text");
b.Property<string>("Letter")
.HasColumnType("text");
b.Property<string>("QuestionId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.HasColumnType("text");
b.Property<string>("SurveyId")
.HasColumnType("text");
b.Property<string>("Text")
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.HasColumnType("text");
b.Property<string>("Category")
.HasColumnType("text");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<DateTime?>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany()
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class reomveIp : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IpAddress",
table: "Responses");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "IpAddress",
table: "Responses",
type: "text",
nullable: false,
defaultValue: "");
}
}
}

View File

@@ -0,0 +1,485 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250204184529_answer")]
partial class answer
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.HasColumnType("text");
b.Property<string>("QuestionId")
.HasColumnType("text");
b.Property<string>("ResponseId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.HasColumnType("text");
b.Property<string>("Letter")
.HasColumnType("text");
b.Property<string>("QuestionId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.HasColumnType("text");
b.Property<string>("SurveyId")
.HasColumnType("text");
b.Property<string>("Text")
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("IpAddress")
.HasColumnType("text");
b.Property<string>("SurveyId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.HasColumnType("text");
b.Property<string>("Category")
.HasColumnType("text");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<DateTime?>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany()
.HasForeignKey("SurveyId");
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,123 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class answer : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses");
migrationBuilder.AlterColumn<string>(
name: "SurveyId",
table: "Responses",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AddColumn<string>(
name: "IpAddress",
table: "Responses",
type: "text",
nullable: true);
migrationBuilder.AlterColumn<string>(
name: "ResponseId",
table: "Answers",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "QuestionId",
table: "Answers",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AlterColumn<string>(
name: "ChoiceId",
table: "Answers",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AddForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses",
column: "SurveyId",
principalTable: "Surveys",
principalColumn: "Id");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses");
migrationBuilder.DropColumn(
name: "IpAddress",
table: "Responses");
migrationBuilder.AlterColumn<string>(
name: "SurveyId",
table: "Responses",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "ResponseId",
table: "Answers",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "QuestionId",
table: "Answers",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "ChoiceId",
table: "Answers",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AddForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses",
column: "SurveyId",
principalTable: "Surveys",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@@ -0,0 +1,487 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20250205124722_Choice")]
partial class Choice
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.HasColumnType("text");
b.Property<string>("QuestionId")
.HasColumnType("text");
b.Property<string>("ResponseId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.HasColumnType("text");
b.Property<string>("Letter")
.HasColumnType("text");
b.Property<string>("QuestionId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.HasColumnType("text");
b.Property<string>("SurveyId")
.HasColumnType("text");
b.Property<string>("Text")
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("IpAddress")
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.HasColumnType("text");
b.Property<string>("Category")
.HasColumnType("text");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<DateTime?>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId");
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany()
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,82 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace survey_beta.Migrations
{
/// <inheritdoc />
public partial class Choice : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Answers_Responses_ResponseId",
table: "Answers");
migrationBuilder.DropForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses");
migrationBuilder.AlterColumn<string>(
name: "SurveyId",
table: "Responses",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AddForeignKey(
name: "FK_Answers_Responses_ResponseId",
table: "Answers",
column: "ResponseId",
principalTable: "Responses",
principalColumn: "Id");
migrationBuilder.AddForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses",
column: "SurveyId",
principalTable: "Surveys",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Answers_Responses_ResponseId",
table: "Answers");
migrationBuilder.DropForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses");
migrationBuilder.AlterColumn<string>(
name: "SurveyId",
table: "Responses",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AddForeignKey(
name: "FK_Answers_Responses_ResponseId",
table: "Answers",
column: "ResponseId",
principalTable: "Responses",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
name: "FK_Responses_Surveys_SurveyId",
table: "Responses",
column: "SurveyId",
principalTable: "Surveys",
principalColumn: "Id");
}
}
}

View File

@@ -0,0 +1,484 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using survey_beta.DataBaseContext;
#nullable disable
namespace survey_beta.Migrations
{
[DbContext(typeof(AppDbContext))]
partial class AppDbContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.1")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("text");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("RoleId")
.HasColumnType("text");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("text");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("ChoiceId")
.HasColumnType("text");
b.Property<string>("QuestionId")
.HasColumnType("text");
b.Property<string>("ResponseId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ChoiceId");
b.HasIndex("QuestionId");
b.HasIndex("ResponseId");
b.ToTable("Answers");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.HasColumnType("text");
b.Property<string>("Letter")
.HasColumnType("text");
b.Property<string>("QuestionId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("QuestionId");
b.ToTable("Choices");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Content")
.HasColumnType("text");
b.Property<string>("SurveyId")
.HasColumnType("text");
b.Property<string>("Text")
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Questions");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("IpAddress")
.HasColumnType("text");
b.Property<string>("SurveyId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("SurveyId");
b.ToTable("Responses");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorId")
.HasColumnType("text");
b.Property<string>("Category")
.HasColumnType("text");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<DateTime?>("ExpirationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuthorId");
b.ToTable("Surveys");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("Fullname")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("survey_beta.Models.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("survey_beta.Models.Answer", b =>
{
b.HasOne("survey_beta.Models.Choice", "Choice")
.WithMany()
.HasForeignKey("ChoiceId")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany()
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("survey_beta.Models.Response", "Response")
.WithMany("Answers")
.HasForeignKey("ResponseId");
b.Navigation("Choice");
b.Navigation("Question");
b.Navigation("Response");
});
modelBuilder.Entity("survey_beta.Models.Choice", b =>
{
b.HasOne("survey_beta.Models.Question", "Question")
.WithMany("Choices")
.HasForeignKey("QuestionId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Question");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany("Questions")
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.HasOne("survey_beta.Models.Survey", "Survey")
.WithMany()
.HasForeignKey("SurveyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Survey");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.HasOne("survey_beta.Models.User", "Author")
.WithMany("Surveys")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Author");
});
modelBuilder.Entity("survey_beta.Models.Question", b =>
{
b.Navigation("Choices");
});
modelBuilder.Entity("survey_beta.Models.Response", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("survey_beta.Models.Survey", b =>
{
b.Navigation("Questions");
});
modelBuilder.Entity("survey_beta.Models.User", b =>
{
b.Navigation("Surveys");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -1,13 +1,15 @@
namespace survey_beta.Models using System;
namespace survey_beta.Models
{ {
public class Answer public class Answer
{ {
public string Id { get; set; } public string? Id { get; set; } = Guid.NewGuid().ToString();
public string ResponseId { get; set; } public string? ResponseId { get; set; }
public Response Response { get; set; } public Response? Response { get; set; }
public string QuestionId { get; set; } public string? QuestionId { get; set; }
public Question Question { get; set; } public Question? Question { get; set; }
public string ChoiceId { get; set; } public string? ChoiceId { get; set; }
public Choice Choice { get; set; } public Choice? Choice { get; set; }
} }
} }

View File

@@ -1,11 +1,13 @@
namespace survey_beta.Models using System;
namespace survey_beta.Models
{ {
public class Choice public class Choice
{ {
public string Id { get; set; } public string? Id { get; set; } = Guid.NewGuid().ToString();
public string Letter { get; set; } public string? Letter { get; set; }
public string Content { get; set; } public string? Content { get; set; }
public string QuestionId { get; set; } public string? QuestionId { get; set; }
public Question Question { get; set; } public Question? Question { get; set; }
} }
} }

View File

@@ -1,11 +1,18 @@
namespace survey_beta.Models using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace survey_beta.Models
{ {
public class Question public class Question
{ {
public string Id { get; set; } public string? Id { get; set; } = Guid.NewGuid().ToString();
public string Content { get; set; } public string? Content { get; set; }
public string SurveyId { get; set; } public string? Text { get; set; }
public Survey Survey { get; set; } public string? Type { get; set; }
public ICollection<Choice> Choices { get; set; } public string? SurveyId { get; set; }
[JsonIgnore]
public Survey? Survey { get; set; }
public ICollection<Choice> Choices { get; set; } = new List<Choice>();
} }
} }

View File

@@ -1,11 +1,15 @@
namespace survey_beta.Models using System;
using System.Collections.Generic;
namespace survey_beta.Models
{ {
public class Response public class Response
{ {
public string Id { get; set; } public string Id { get; set; } = Guid.NewGuid().ToString();
public string IpAddress { get; set; } public string? IpAddress { get; set; }
public string SurveyId { get; set; } public string SurveyId { get; set; }
public Survey Survey { get; set; } public Survey? Survey { get; set; }
public ICollection<Answer> Answers { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public ICollection<Answer> Answers { get; set; } = new List<Answer>();
} }
} }

View File

@@ -1,16 +1,18 @@
namespace survey_beta.Models using System;
using System.Collections.Generic;
namespace survey_beta.Models
{ {
public class Survey public class Survey
{ {
public string Id { get; set; } public string? Id { get; set; } = Guid.NewGuid().ToString();
public string Title { get; set; } public string? Title { get; set; }
public string Description { get; set; } public string? Description { get; set; }
public string Category { get; set; } public string? Category { get; set; }
public DateTime ExpirationDate { get; set; } public DateTime? ExpirationDate { get; set; }
public bool IsPublished { get; set; } public bool IsPublished { get; set; }
public string AuthorId { get; set; } public string? AuthorId { get; set; }
public User Author { get; set; } public User? Author { get; set; }
public ICollection<Question> Questions { get; set; } public ICollection<Question>? Questions { get; set; }
public ICollection<Response> Responses { get; set; }
} }
} }

View File

@@ -1,13 +1,10 @@
namespace survey_beta.Models using Microsoft.AspNetCore.Identity;
{
public class User
{
public string? Id { get; set; }
public string? Username { get; set; }
public string? Fullname { get; set; }
public string? Email { get; set; }
public string? PasswordHash { get; set; }
public ICollection<Survey> Surveys { get; set; } = new List<Survey>();
namespace survey_beta.Models
{
public class User : IdentityUser
{
public string Fullname { get; set; }
public ICollection<Survey> Surveys { get; set; } = new List<Survey>();
} }
} }

View File

@@ -1,23 +1,90 @@
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using survey_beta.DataBaseContext; using survey_beta.DataBaseContext;
using survey_beta.Mappers.Profiles;
using survey_beta.Models;
using System.Text;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Add services to the container
builder.Services.AddDbContext<AppDbContext>(options => builder.Services.AddDbContext<AppDbContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"))); options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
// Add services to the container.
builder.Services.AddControllers(); builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
{
In = Microsoft.OpenApi.Models.ParameterLocation.Header,
Description = "Please enter JWT with Bearer into field",
Name = "Authorization",
Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey
});
c.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
{
{
new Microsoft.OpenApi.Models.OpenApiSecurityScheme
{
Reference = new Microsoft.OpenApi.Models.OpenApiReference
{
Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] {}
}
});
});
builder.Services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<AppDbContext>()
.AddDefaultTokenProviders();
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
};
});
builder.Services.AddScoped<UsersServices>();
builder.Services.AddScoped<SurveyService>();
builder.Services.AddScoped<ResponsesService>();
builder.Services.AddScoped<AnalyticsServices>();
builder.Services.AddAutoMapper(typeof(MappingProfile));
builder.Services.AddAutoMapper(typeof(UserProfile));
builder.Services.AddAutoMapper(typeof(ResponseProfile));
builder.Services.AddAutoMapper(typeof(AnalyticsProfile));
builder.Services.AddAutoMapper(typeof(AnswerProfile));
builder.Services.AddAutoMapper(typeof(ChoiceProfile));
builder.Services.AddAutoMapper(typeof(QuestionProfile));
builder.Services.AddAutoMapper(typeof(SurveyProfile));
var app = builder.Build(); var app = builder.Build();
// Configure the HTTP request pipeline. // HTTP request pipeline
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection(); app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization(); app.UseAuthorization();
app.MapControllers(); app.MapControllers();
app.Run(); app.Run();

View File

@@ -23,7 +23,7 @@
"commandName": "Project", "commandName": "Project",
"dotnetRunMessages": true, "dotnetRunMessages": true,
"launchBrowser": true, "launchBrowser": true,
"launchUrl": "weatherforecast", "launchUrl": "swagger",
"applicationUrl": "https://localhost:7002;http://localhost:5036", "applicationUrl": "https://localhost:7002;http://localhost:5036",
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"

View File

@@ -0,0 +1,146 @@
using AutoMapper;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using survey_beta.DataBaseContext;
using survey_beta.DTOs.Default;
using survey_beta.DTOs.Update;
using survey_beta.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
public class AnalyticsServices
{
private readonly AppDbContext _context;
private readonly IMapper _mapper;
public AnalyticsServices(AppDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public void UpdateAnalytics(string surveyId)
{
var responses = _context.Responses
.Where(r => r.SurveyId == surveyId)
.Include(r => r.Answers)
.ThenInclude(a => a.Choice)
.ToList();
var analyticsData = CalculateAnalytics(responses);
SaveAnalytics(surveyId, analyticsData);
}
private SurveyStats CalculateAnalytics(List<Response> responses)
{
var answerFrequency = new Dictionary<string, int>();
var questionFrequency = new Dictionary<string, int>();
foreach (var response in responses)
{
foreach (var answer in response.Answers)
{
var choiceText = answer.Choice?.Letter;
if (!string.IsNullOrEmpty(choiceText))
{
if (answerFrequency.ContainsKey(choiceText))
answerFrequency[choiceText]++;
else
answerFrequency[choiceText] = 1;
}
var questionText = answer.Question?.Text;
if (!string.IsNullOrEmpty(questionText))
{
if (questionFrequency.ContainsKey(questionText))
questionFrequency[questionText]++;
else
questionFrequency[questionText] = 1;
}
}
}
return new SurveyStats
{
SurveyId = responses.FirstOrDefault()?.SurveyId,
TotalResponses = responses.Count,
AnswerFrequency = answerFrequency,
QuestionFrequency = questionFrequency
};
}
private void SaveAnalytics(string surveyId, SurveyStats analyticsData)
{
var analytics = _mapper.Map<SurveyAnalytics>(analyticsData);
analytics.SurveyId = surveyId;
analytics.CreatedAt = DateTime.UtcNow;
_context.Add(analytics);
_context.SaveChanges();
}
public SurveyStats GetAggregatedSurveyResponses(string surveyId)
{
var responses = _context.Responses
.Where(r => r.SurveyId == surveyId)
.Include(r => r.Answers)
.ThenInclude(a => a.Choice)
.ToList();
return CalculateAnalytics(responses);
}
public async Task<IActionResult> ExportResponsesToCsv(string surveyId)
{
var responses = await _context.Responses
.Where(r => r.SurveyId == surveyId)
.Include(r => r.Answers)
.ThenInclude(a => a.Question)
.Include(r => r.Answers)
.ThenInclude(a => a.Choice)
.ToListAsync();
if (!responses.Any())
{
return null;
}
var csvLines = new List<string>
{
"Survey Analysis",
$"Total Responses: {responses.Count}",
"",
"ResponseId,Question,ChoiceText,ChoiceCount,ChoicePercentage"
};
var choiceStats = responses
.SelectMany(r => r.Answers)
.Where(a => a.Choice != null)
.GroupBy(a => new { a.Question.Content, a.Choice.Letter })
.Select(g => new
{
Question = g.Key.Content,
Choice = g.Key.Letter,
Count = g.Count(),
Percentage = (double)g.Count() / responses.Count * 100
})
.OrderByDescending(s => s.Count)
.ToList();
foreach (var response in responses)
{
foreach (var answer in response.Answers)
{
var questionText = answer.Question.Content;
var choiceText = answer.Choice?.Letter ?? "N/A";
var choiceStat = choiceStats.FirstOrDefault(s => s.Question == questionText && s.Choice == choiceText);
csvLines.Add($"{response.Id},{questionText},{choiceText},{choiceStat?.Count ?? 0},{choiceStat?.Percentage.ToString("0.00") ?? "0"}%");
}
}
var fileName = $"Survey_{surveyId}_Analysis.csv";
var fileBytes = Encoding.UTF8.GetBytes(string.Join(Environment.NewLine, csvLines));
return new FileContentResult(fileBytes, "text/csv")
{
FileDownloadName = fileName
};
}
}

View File

@@ -0,0 +1,59 @@
using AutoMapper;
using Microsoft.EntityFrameworkCore;
using survey_beta.DataBaseContext;
using survey_beta.DTOs.Default;
using survey_beta.DTOs.Response;
using survey_beta.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
public class ResponsesService
{
private readonly AppDbContext _context;
private readonly IMapper _mapper;
public ResponsesService(AppDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public async Task AddResponseAsync(ResponseDto responseDto)
{
var response = new Response
{
Id = responseDto.Id,
SurveyId = responseDto.SurveyId,
IpAddress = responseDto.IpAddress,
CreatedAt = DateTime.UtcNow,
};
response.Answers = responseDto.Answers.Select(answer => new Answer
{
QuestionId = answer.QuestionId,
ResponseId = response.Id
}).ToList();
await _context.Responses.AddAsync(response);
await _context.SaveChangesAsync();
}
public async Task<List<ResponseDto>> GetSurveyResponsesAsync(string surveyId)
{
var responses = await _context.Responses
.AsNoTracking()
.Where(r => r.SurveyId == surveyId)
.Include(r => r.Answers)
.ToListAsync();
return responses.Select(r => new ResponseDto
{
Id = r.Id,
Answers = r.Answers.Select(a => new AnswerDto
{
Id = a.Id,
}).ToList()
}).ToList();
}
}

View File

@@ -0,0 +1,137 @@
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using survey_beta.DataBaseContext;
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Update;
using survey_beta.DTOs.Response;
using survey_beta.Models;
using AutoMapper;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System;
using survey_beta.DTOs.Default;
public class SurveyService
{
private readonly AppDbContext _context;
private readonly IMapper _mapper;
private readonly ResponsesService _responsesService;
public SurveyService(AppDbContext context, IMapper mapper, ResponsesService responsesService)
{
_context = context;
_mapper = mapper;
_responsesService = responsesService;
}
public async Task<List<SurveyDto>> GetAllSurveysAsync(string id = null)
{
IQueryable<Survey> query = _context.Surveys.Include(s => s.Questions).ThenInclude(q =>q.Choices);
if (!string.IsNullOrEmpty(id))
{
query = query.Where(s => s.Id == id);
}
var surveys = await query.ToListAsync();
return _mapper.Map<List<SurveyDto>>(surveys);
}
public async Task<SurveyDto> CreateSurveyAsync(CreateSurveyDto request, string userId)
{
var survey = _mapper.Map<Survey>(request);
survey.Id = Guid.NewGuid().ToString();
survey.AuthorId = userId;
_context.Surveys.Add(survey);
await _context.SaveChangesAsync();
return _mapper.Map<SurveyDto>(survey);
}
public async Task<bool> UpdateSurveyAsync(UpdateSurveyDto request)
{
var survey = await _context.Surveys
.Include(s => s.Questions)
.ThenInclude(q => q.Choices)
.FirstOrDefaultAsync(s => s.Id == request.Id);
if (survey == null) return false;
if (survey.IsPublished)
{
throw new InvalidOperationException("Cannot update a published survey. Unpublish it first.");
}
survey.Title = request.Title != "string" ? request.Title : survey.Title;
survey.Description = request.Description != "string" ? request.Description : survey.Description;
survey.Category = request.Category != "string" ? request.Category : survey.Category;
survey.ExpirationDate = request.ExpirationDate ?? survey.ExpirationDate;
foreach (var updatedQuestion in request.Questions)
{
var existingQuestion = survey.Questions.FirstOrDefault(q => q.Id == updatedQuestion.Id);
if (existingQuestion != null)
{
existingQuestion.Content = updatedQuestion.Content != "string" ? updatedQuestion.Content : existingQuestion.Content;
existingQuestion.Type = updatedQuestion.QuestionType != "string" ? updatedQuestion.QuestionType : existingQuestion.Type;
foreach (var updatedChoice in updatedQuestion.Choices)
{
var existingChoice = existingQuestion.Choices.FirstOrDefault(c => c.Id == updatedChoice.Id);
if (existingChoice != null)
{
existingChoice.Letter = updatedChoice.Letter != "string" ? updatedChoice.Letter : existingChoice.Letter;
existingChoice.Content = updatedChoice.Content != "string" ? updatedChoice.Content : existingChoice.Content;
}
}
}
else
{
survey.Questions.Add(new Question
{
Content = updatedQuestion.Content,
Type = updatedQuestion.QuestionType,
SurveyId = survey.Id,
Choices = updatedQuestion.Choices.Select(c => new Choice
{
Letter = c.Letter,
Content = c.Content,
}).ToList()
});
}
}
survey.IsPublished = true;
await _context.SaveChangesAsync();
return true;
}
public async Task<bool> PublishSurveyAsync(string id)
{
var survey = await _context.Surveys.FindAsync(id);
if (survey == null) return false;
survey.IsPublished = true;
await _context.SaveChangesAsync();
return true;
}
public async Task<bool> UnpublishSurveyAsync(string id)
{
var survey = await _context.Surveys.FindAsync(id);
if (survey == null) return false;
survey.IsPublished = false;
await _context.SaveChangesAsync();
return true;
}
public async Task<bool> DeleteSurveyAsync(string id, CancellationToken cancellationToken)
{
var survey = await _context.Surveys
.Include(s => s.Questions)
.ThenInclude(q => q.Choices)
.FirstOrDefaultAsync(s => s.Id == id, cancellationToken);
if (survey == null) return false;
_context.Surveys.Remove(survey);
await _context.SaveChangesAsync(cancellationToken);
return true;
}
}

View File

@@ -0,0 +1,127 @@
using Microsoft.AspNetCore.Identity;
using Microsoft.IdentityModel.Tokens;
using survey_beta.DTOs.Create;
using survey_beta.DTOs.Default;
using survey_beta.Models;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using AutoMapper;
public class UsersServices
{
private readonly UserManager<User> _userManager;
private readonly SignInManager<User> _signInManager;
private readonly IConfiguration _configuration;
private readonly IMapper _mapper;
public UsersServices(UserManager<User> userManager, SignInManager<User> signInManager, IConfiguration configuration, IMapper mapper)
{
_userManager = userManager;
_signInManager = signInManager;
_configuration = configuration;
_mapper = mapper;
}
public async Task<UserDto> CreateUserAsync(CreateUserDto createUserDto)
{
var existingUser = await _userManager.FindByEmailAsync(createUserDto.Email);
if (existingUser != null)
{
throw new Exception("User with this email already exists.");
}
var user = _mapper.Map<User>(createUserDto);
var result = await _userManager.CreateAsync(user, createUserDto.Password);
if (!result.Succeeded)
{
if (!result.Succeeded)
{
throw new Exception("Failed to create user. Please check your inputs and try again.");
}
}
var userDto = _mapper.Map<UserDto>(user);
userDto.Token = GenerateJwtToken(user);
return userDto;
}
public async Task<UserDto> SignInAsync(LoginDto loginDto)
{
var user = await _userManager.FindByNameAsync(loginDto.Username);
if (user == null)
{
throw new Exception("Invalid login attempt.");
}
var result = await _signInManager.PasswordSignInAsync(user, loginDto.Password, false, false);
if (!result.Succeeded)
{
throw new Exception("Invalid login attempt.");
}
var userDto = _mapper.Map<UserDto>(user);
userDto.Token = GenerateJwtToken(user);
return userDto;
}
public async Task<UserDto> GetUserByIdAsync(string userId)
{
var user = await _userManager.FindByIdAsync(userId);
if (user == null)
{
throw new Exception("User not found.");
}
return _mapper.Map<UserDto>(user);
}
public async Task<UserDto> GetUserByUsernameAsync(string username)
{
var user = await _userManager.FindByNameAsync(username);
if (user == null)
{
throw new Exception("User not found.");
}
return _mapper.Map<UserDto>(user);
}
private string GenerateJwtToken(User user)
{
var userRoles = _userManager.GetRolesAsync(user).Result;
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.Email, user.Email),
new Claim(ClaimTypes.Name, user.Fullname)
};
claims.AddRange(userRoles.Select(role => new Claim(ClaimTypes.Role, role)));
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: _configuration["Jwt:Issuer"],
audience: _configuration["Jwt:Audience"],
claims: claims,
expires: DateTime.UtcNow.AddMinutes(30),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
public async Task<List<UserDto>> GetAllUsersAsync()
{
var users = _userManager.Users.ToList();
return _mapper.Map<List<UserDto>>(users);
}
public async Task<bool> DeleteUsersAsync(string userid)
{
var user = await _userManager.FindByIdAsync(userid);
if (user == null) return false;
var result = await _userManager.DeleteAsync(user);
return result.Succeeded;
}
}

View File

@@ -1,12 +1,11 @@
{ {
"Logging": { "Jwt": {
"LogLevel": { "Key": "YourSuperSecretKeyYourSuperSecretKey",
"Default": "Information", "Issuer": "YourIssuer",
"Microsoft.AspNetCore": "Warning" "Audience": "YourAudience"
}
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"ConnectionStrings": { "ConnectionStrings": {
"DefaultConnection": "Host=localhost;Database=SurveyDB;Username=postgre;Password=MAJEDali645" "DefaultConnection": "Host=localhost;Database=SurveyBeta;Username=postgres;Password=MAJEDali645"
} }
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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