{"id":24472608,"url":"https://github.com/alexscience/surveysystem","last_synced_at":"2025-10-05T11:19:17.643Z","repository":{"id":266278517,"uuid":"892588661","full_name":"AlexScience/SurveySystem","owner":"AlexScience","description":"Система позволяет создавать опросы, отвечать на вопросы и просматривать результаты. Этот проект включает API для создания опросов, добавления ответов и получения статистики по ответам.","archived":false,"fork":false,"pushed_at":"2024-12-14T15:38:27.000Z","size":151,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-14T14:47:04.179Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlexScience.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-22T11:58:03.000Z","updated_at":"2024-12-14T15:39:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"78409773-f540-444a-8483-50670ab126dd","html_url":"https://github.com/AlexScience/SurveySystem","commit_stats":null,"previous_names":["alexscience/surveysystem"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AlexScience/SurveySystem","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexScience%2FSurveySystem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexScience%2FSurveySystem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexScience%2FSurveySystem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexScience%2FSurveySystem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexScience","download_url":"https://codeload.github.com/AlexScience/SurveySystem/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexScience%2FSurveySystem/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261162066,"owners_count":23118221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-21T08:13:01.595Z","updated_at":"2025-10-05T11:19:12.602Z","avatar_url":"https://github.com/AlexScience.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Описание API для системы опросов\n\n## Введение\nДанный проект представляет собой систему опросов, которая позволяет создавать, обновлять опросы с вопросами и вариантами ответов. Пользователи могут отправлять свои ответы на вопросы, а также просматривать результаты опросов.\n\n![{0D854A87-F49D-42FF-B786-BD0D7EE37106}](https://github.com/user-attachments/assets/958885bc-077a-483e-8f07-ddcffdcd0e66)\n\n## Структура проекта\nПроект состоит из нескольких ключевых компонентов:\n- **Модели данных**: определяют структуру данных, используемых в системе.\n- **Сервисы**: содержат бизнес-логику для работы с данными.\n- **DTO (Data Transfer Object)**: объекты, предназначенные для передачи данных между слоями приложения и клиентами.\n\n- ## Технологии\n\n- **Backend**: ASP.NET \n- **База данных**: PostgreSQL\n- **ORM**: Entity Framework Core\n- **Контейнеризация**: Docker\n- **Swagger**: Для тестирования и документации API\n\n- ### Требования\n\n- [.NET 8 SDK](https://dotnet.microsoft.com/download)\n- [PostgreSQL](https://www.postgresql.org/download/)\n- [Docker](https://www.docker.com/get-started) (опционально)\n\n## Модели данных\n\n1. **Survey (Опрос)**\n   - `Id`: уникальный идентификатор опроса.\n   - `Title`: название опроса.\n   - `Description`: описание опроса.\n   - `CreatedAt`: дата создания.\n   - `Type`: тип опроса (публичный или частный).\n   - `Questions`: вопросы, связанные с опросом.\n\n2. **Question (Вопрос)**\n   - `Id`: уникальный идентификатор вопроса.\n   - `Text`: текст вопроса.\n   - `Type`: тип вопроса (например, выбор из нескольких вариантов или текстовый ответ).\n   - `SurveyId`: ссылка на опрос, к которому относится вопрос.\n   - `Options`: варианты ответов для вопросов с выбором.\n\n3. **Option (Вариант ответа)**\n   - `Id`: уникальный идентификатор варианта.\n   - `Text`: текст варианта ответа.\n   - `QuestionId`: ссылка на вопрос, к которому относится вариант.\n\n4. **Answer (Ответ)**\n   - `Id`: уникальный идентификатор ответа.\n   - `QuestionId`: идентификатор вопроса, на который был дан ответ.\n   - `TextAnswer`: текстовый ответ (для текстовых вопросов).\n   - `UserId`: идентификатор пользователя, который дал ответ.\n   - `SelectedOptions`: список выбранных вариантов ответов (для вопросов с выбором).\n\n## Описание сервисов\n\n### 1. AnswerService\nСервис для работы с ответами на вопросы.\n- **SubmitAnswerAsync**: сохраняет ответ пользователя на вопрос.\n- **GetAnswerByIdAsync**: получает ответ по его идентификатору.\n- **GetOptionsWithAnswerCountAsync**: возвращает количество ответов на каждый вариант ответа в опросе.\n\n### 2. QuestionService\nСервис для работы с вопросами.\n- **UpdateQuestionAsync**: обновляет текст вопроса.\n- **UpdateOptionAsync**: обновляет варианты ответа для вопроса.\n- **DeleteQuestionAsync**: удаляет вопрос из базы данных.\n\n### 3. SurveyService\nСервис для работы с опросами.\n- **CreateSurveyAsync**: создает новый опрос.\n- **GetSurveyByIdAsync**: получает информацию об опросе по его идентификатору.\n- **UpdateSurveyAsync**: обновляет данные о опросе.\n\n### 4. UserService\nСервис для работы с пользователями.\n- **CreateUserAsync**: создает нового пользователя.\n- **GetUserByIdAsync**: получает пользователя по его идентификатору.\n- **GetAllUsersAsync**: возвращает всех пользователей системы.\n\n## Использование API\n\nПример создания опроса:\n```csharp\nvar surveyService = new SurveyService(context);\nvar surveyDto = new SurveyCreateDto\n{\n    Title = \"Новый опрос\",\n    Description = \"Описание опроса\",\n    Type = SurveyType.PublicType,\n    Questions = new List\u003cQuestionCreateDto\u003e\n    {\n        new QuestionCreateDto\n        {\n            Text = \"Какой ваш любимый язык программирования?\",\n            Type = QuestionType.SingleChoice,\n            Options = new List\u003cOptionCreateDto\u003e\n            {\n                new OptionCreateDto { Text = \"C#\" },\n                new OptionCreateDto { Text = \"Java\" },\n                new OptionCreateDto { Text = \"Python\" }\n            }\n        }\n    }\n};\nvar createdSurvey = await surveyService.CreateSurveyAsync(surveyDto);\n\nJson\n{\n  \"title\": \"string\",\n  \"description\": \"string\",\n  \"type\": \"PublicType\",\n  \"questions\": [\n    {\n      \"text\": \"string\",\n      \"type\": \"MultipleChoice\",\n      \"options\": [\n        {\n          \"text\": \"string\"\n        }\n      ]\n    }\n  ]\n}\n```\n\nПример отправки ответа:\n```csharp\nvar answerService = new AnswerService(context);\nvar answer = await answerService.SubmitAnswerAsync(questionId, userId, null, new List\u003cGuid\u003e { optionId });\n\n{\n  \"questionId\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n  \"userId\": \"string\",\n  \"answerText\": \"string\", (если ответ в текстовом формате)\n  \"optionsId\": [\n    \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n  ]\n}\n\n```\n\n## Настройка базы данных PostgreSQL\n\n1. Запустите контейнер с PostgreSQL с помощью Docker:\n\n```bash\ndocker run --name survey-db -e POSTGRES_PASSWORD=qwe123 -p 5432:5432 -d postgres\n```\n\n2. Обновите строку подключения в файле `appsettings.json`:\n\n```json\n\"ConnectionStrings\": {\n  \"postgres\": \"Server=127.0.0.1;Port=5432;Database=postgres;User Id=survey;Password=qwe123; Include Error Detail=true\"\n}\n```\n## Запуск приложения\n\n1. Построить и запустить проект:\n\n```bash\ndotnet build\ndotnet run\n```\n\n## Заключение\n\nДанная система позволяет управлять опросами, вопросами и ответами. Каждый компонент API работает асинхронно для обеспечения высокой производительности.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexscience%2Fsurveysystem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexscience%2Fsurveysystem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexscience%2Fsurveysystem/lists"}