Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alexscience/surveysystem
Система позволяет создавать опросы, отвечать на вопросы и просматривать результаты. Этот проект включает API для создания опросов, добавления ответов и получения статистики по ответам.
https://github.com/alexscience/surveysystem
Last synced: 1 day ago
JSON representation
Система позволяет создавать опросы, отвечать на вопросы и просматривать результаты. Этот проект включает API для создания опросов, добавления ответов и получения статистики по ответам.
- Host: GitHub
- URL: https://github.com/alexscience/surveysystem
- Owner: AlexScience
- Created: 2024-11-22T11:58:03.000Z (2 months ago)
- Default Branch: master
- Last Pushed: 2024-12-12T14:48:23.000Z (about 1 month ago)
- Last Synced: 2024-12-12T15:38:00.228Z (about 1 month ago)
- Language: C#
- Homepage:
- Size: 104 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Описание API для системы опросов
## Введение
Данный проект представляет собой систему опросов, которая позволяет создавать, обновлять опросы с вопросами и вариантами ответов. Пользователи могут отправлять свои ответы на вопросы, а также просматривать результаты опросов.![{0D854A87-F49D-42FF-B786-BD0D7EE37106}](https://github.com/user-attachments/assets/958885bc-077a-483e-8f07-ddcffdcd0e66)
## Структура проекта
Проект состоит из нескольких ключевых компонентов:
- **Модели данных**: определяют структуру данных, используемых в системе.
- **Сервисы**: содержат бизнес-логику для работы с данными.
- **DTO (Data Transfer Object)**: объекты, предназначенные для передачи данных между слоями приложения и клиентами.- ## Технологии
- **Backend**: ASP.NET
- **База данных**: PostgreSQL
- **ORM**: Entity Framework Core
- **Контейнеризация**: Docker
- **Swagger**: Для тестирования и документации API- ### Требования
- [.NET 8 SDK](https://dotnet.microsoft.com/download)
- [PostgreSQL](https://www.postgresql.org/download/)
- [Docker](https://www.docker.com/get-started) (опционально)## Модели данных
1. **Survey (Опрос)**
- `Id`: уникальный идентификатор опроса.
- `Title`: название опроса.
- `Description`: описание опроса.
- `CreatedAt`: дата создания.
- `Type`: тип опроса (публичный или частный).
- `Questions`: вопросы, связанные с опросом.2. **Question (Вопрос)**
- `Id`: уникальный идентификатор вопроса.
- `Text`: текст вопроса.
- `Type`: тип вопроса (например, выбор из нескольких вариантов или текстовый ответ).
- `SurveyId`: ссылка на опрос, к которому относится вопрос.
- `Options`: варианты ответов для вопросов с выбором.3. **Option (Вариант ответа)**
- `Id`: уникальный идентификатор варианта.
- `Text`: текст варианта ответа.
- `QuestionId`: ссылка на вопрос, к которому относится вариант.4. **Answer (Ответ)**
- `Id`: уникальный идентификатор ответа.
- `QuestionId`: идентификатор вопроса, на который был дан ответ.
- `TextAnswer`: текстовый ответ (для текстовых вопросов).
- `UserId`: идентификатор пользователя, который дал ответ.
- `SelectedOptions`: список выбранных вариантов ответов (для вопросов с выбором).## Описание сервисов
### 1. AnswerService
Сервис для работы с ответами на вопросы.
- **SubmitAnswerAsync**: сохраняет ответ пользователя на вопрос.
- **GetAnswerByIdAsync**: получает ответ по его идентификатору.
- **GetOptionsWithAnswerCountAsync**: возвращает количество ответов на каждый вариант ответа в опросе.### 2. QuestionService
Сервис для работы с вопросами.
- **UpdateQuestionAsync**: обновляет текст вопроса.
- **UpdateOptionAsync**: обновляет варианты ответа для вопроса.
- **DeleteQuestionAsync**: удаляет вопрос из базы данных.### 3. SurveyService
Сервис для работы с опросами.
- **CreateSurveyAsync**: создает новый опрос.
- **GetSurveyByIdAsync**: получает информацию об опросе по его идентификатору.
- **UpdateSurveyAsync**: обновляет данные о опросе.### 4. UserService
Сервис для работы с пользователями.
- **CreateUserAsync**: создает нового пользователя.
- **GetUserByIdAsync**: получает пользователя по его идентификатору.
- **GetAllUsersAsync**: возвращает всех пользователей системы.## Использование API
Пример создания опроса:
```csharp
var surveyService = new SurveyService(context);
var surveyDto = new SurveyCreateDto
{
Title = "Новый опрос",
Description = "Описание опроса",
Type = SurveyType.PublicType,
Questions = new List
{
new QuestionCreateDto
{
Text = "Какой ваш любимый язык программирования?",
Type = QuestionType.SingleChoice,
Options = new List
{
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"
}
]
}
]
}
```Пример отправки ответа:
```csharp
var answerService = new AnswerService(context);
var answer = await answerService.SubmitAnswerAsync(questionId, userId, null, new List { optionId });{
"questionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"userId": "string",
"answerText": "string", (если ответ в текстовом формате)
"optionsId": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
]
}```
## Настройка базы данных PostgreSQL
1. Запустите контейнер с PostgreSQL с помощью Docker:
```bash
docker run --name survey-db -e POSTGRES_PASSWORD=qwe123 -p 5432:5432 -d postgres
```2. Обновите строку подключения в файле `appsettings.json`:
```json
"ConnectionStrings": {
"postgres": "Server=127.0.0.1;Port=5432;Database=postgres;User Id=survey;Password=qwe123; Include Error Detail=true"
}
```
## Запуск приложения1. Построить и запустить проект:
```bash
dotnet build
dotnet run
```## Заключение
Данная система позволяет управлять опросами, вопросами и ответами. Каждый компонент API работает асинхронно для обеспечения высокой производительности.