Данный проект представляет собой систему опросов, которая позволяет создавать, обновлять опросы с вопросами и вариантами ответов. Пользователи могут отправлять свои ответы на вопросы, а также просматривать результаты опросов.
Проект состоит из нескольких ключевых компонентов:
-
Модели данных: определяют структуру данных, используемых в системе.
-
Сервисы: содержат бизнес-логику для работы с данными.
-
DTO (Data Transfer Object): объекты, предназначенные для передачи данных между слоями приложения и клиентами.
-
Backend: ASP.NET
-
База данных: PostgreSQL
-
ORM: Entity Framework Core
-
Контейнеризация: Docker
-
Swagger: Для тестирования и документации API
-
Docker (опционально)
-
Survey (Опрос)
Id: уникальный идентификатор опроса.Title: название опроса.Description: описание опроса.CreatedAt: дата создания.Type: тип опроса (публичный или частный).Questions: вопросы, связанные с опросом.
-
Question (Вопрос)
Id: уникальный идентификатор вопроса.Text: текст вопроса.Type: тип вопроса (например, выбор из нескольких вариантов или текстовый ответ).SurveyId: ссылка на опрос, к которому относится вопрос.Options: варианты ответов для вопросов с выбором.
-
Option (Вариант ответа)
Id: уникальный идентификатор варианта.Text: текст варианта ответа.QuestionId: ссылка на вопрос, к которому относится вариант.
-
Answer (Ответ)
Id: уникальный идентификатор ответа.QuestionId: идентификатор вопроса, на который был дан ответ.TextAnswer: текстовый ответ (для текстовых вопросов).UserId: идентификатор пользователя, который дал ответ.SelectedOptions: список выбранных вариантов ответов (для вопросов с выбором).
Сервис для работы с ответами на вопросы.
- SubmitAnswerAsync: сохраняет ответ пользователя на вопрос.
- GetAnswerByIdAsync: получает ответ по его идентификатору.
- GetOptionsWithAnswerCountAsync: возвращает количество ответов на каждый вариант ответа в опросе.
Сервис для работы с вопросами.
- UpdateQuestionAsync: обновляет текст вопроса.
- UpdateOptionAsync: обновляет варианты ответа для вопроса.
- DeleteQuestionAsync: удаляет вопрос из базы данных.
Сервис для работы с опросами.
- CreateSurveyAsync: создает новый опрос.
- GetSurveyByIdAsync: получает информацию об опросе по его идентификатору.
- UpdateSurveyAsync: обновляет данные о опросе.
Сервис для работы с пользователями.
- CreateUserAsync: создает нового пользователя.
- GetUserByIdAsync: получает пользователя по его идентификатору.
- GetAllUsersAsync: возвращает всех пользователей системы.
Пример создания опроса:
var surveyService = new SurveyService(context);
var surveyDto = new SurveyCreateDto
{
Title = "Новый опрос",
Description = "Описание опроса",
Type = SurveyType.PublicType,
Questions = new List<QuestionCreateDto>
{
new QuestionCreateDto
{
Text = "Какой ваш любимый язык программирования?",
Type = QuestionType.SingleChoice,
Options = new List<OptionCreateDto>
{
new OptionCreateDto { Text = "C#" },
new OptionCreateDto { Text = "Java" },
new OptionCreateDto { Text = "Python" }
}
}
}
};
var createdSurvey = await surveyService.CreateSurveyAsync(surveyDto);
Json
{
"title": "string",
"description": "string",
"type": "PublicType",
"questions": [
{
"text": "string",
"type": "MultipleChoice",
"options": [
{
"text": "string"
}
]
}
]
}Пример отправки ответа:
var answerService = new AnswerService(context);
var answer = await answerService.SubmitAnswerAsync(questionId, userId, null, new List<Guid> { optionId });
{
"questionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"userId": "string",
"answerText": "string", (если ответ в текстовом формате)
"optionsId": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
]
}- Запустите контейнер с PostgreSQL с помощью Docker:
docker run --name survey-db -e POSTGRES_PASSWORD=qwe123 -p 5432:5432 -d postgres- Обновите строку подключения в файле
appsettings.json:
"ConnectionStrings": {
"postgres": "Server=127.0.0.1;Port=5432;Database=postgres;User Id=survey;Password=qwe123; Include Error Detail=true"
}- Построить и запустить проект:
dotnet build
dotnet runДанная система позволяет управлять опросами, вопросами и ответами. Каждый компонент API работает асинхронно для обеспечения высокой производительности.
