Это API для управления организациями, тендерами и предложениями. API позволяет создавать, читать, обновлять и удалять данные организаций, тендеров и предложений, а так же устанавливать им разные статусы.
-
Установите Go (версия 1.21 или выше). Вы можете скачать Go с https://go.dev/dl/.
-
Установите Docker и Docker Compose. Docker Desktop можно скачать отсюда https://www.docker.com/products/docker-desktop/.
-
Установите GolangCI-lint с https://github.com/golangci/golangci-lint#installation
-
Клонируйте репозиторий:
git clone https://github.com/your-username/Tender-Service.git cd Tender-Service
-
Создайте файл
.env
в корневой директории проекта и заполните переменные окружения:PORT=8080 DB_HOST=postgres DB_PORT=5432 DB_USER=ito21 DB_PASSWORD=1899 DB_NAME=TENDER --> ВАЖНО ИСПОЛЬЗОВАТЬ ИМЯ ДБ TENDER
-
Убедитесь что значения в файле
docker-compose.yaml
совпадают с файлом.env
- Для запуска приложения с использованием Docker Compose:
make up
- Для остановки приложения с использованием Docker Compose:
make down
- Для остановки и удаления контейнеров и volumes:
make down-v
- Для удаления docker сетей:
make network-prune
- Для запуска приложения в dev режиме:
make run
Вы можете использовать Postman или cURL для тестирования API, отправляя запросы на http://localhost:8080
.
Метод: POST
URL: http://localhost:8080/organizations
Тело запроса (JSON):
{
"name": "Test Organization",
"description": "This is a test organization.",
"type": "LLC"
}
{
"id": 1,
"name": "Test Organization",
"description": "This is a test organization.",
"type": "LLC",
"created_at": "2024-01-19T21:07:35.766786Z",
"updated_at": "2024-01-19T21:07:35.766786Z"
}
Метод: GET
URL: http://localhost:8080/tenders
[
{
"id": 1,
"name": "test tender",
"description": "this is a test tender",
"organization_id": 1,
"publication_date": "2024-01-19T21:38:01.190237Z",
"end_date": "2024-01-20T21:38:01.190237Z",
"status": "published",
"created_at": "2024-01-19T21:38:01.190237Z",
"updated_at": "2024-01-19T21:38:01.190237Z"
}
]
Метод: GET
URL: http://localhost:8080/tenders/{tender_id}/proposals
(где {tender_id}
- это id тендера)
[
{
"id": 1,
"tender_id": 1,
"organization_id": 1,
"description": "proposal description",
"price": 100,
"status": "pending",
"created_at": "2024-01-20T00:35:30.151671Z",
"updated_at": "2024-01-20T00:35:30.151671Z"
}
]
Метод: POST
URL: http://localhost:8080/tenders
Тело запроса (JSON):
{
"name": "Test Tender",
"description": "This is a test tender.",
"organization_id": 1,
"publication_date": "2024-01-20T12:00:00Z",
"end_date": "2024-01-27T12:00:00Z"
}
{
"id": 1,
"name": "Test Tender",
"description": "This is a test tender.",
"organization_id": 1,
"publication_date": "2024-01-20T12:00:00Z",
"end_date": "2024-01-27T12:00:00Z",
"status": "draft",
"created_at": "2024-01-20T09:15:00Z",
"updated_at": "2024-01-20T09:15:00Z"
}
Метод: POST
URL: http://localhost:8080/proposals
Тело запроса (JSON):
{
"tender_id": 1,
"organization_id": 1,
"description": "proposal description",
"price": 100
}
{
"id": 1,
"tender_id": 1,
"organization_id": 1,
"description": "proposal description",
"price": 100,
"status": "pending",
"created_at": "2024-01-20T09:15:00Z",
"updated_at": "2024-01-20T09:15:00Z"
}
Метод: PUT
URL: http://localhost:8080/organizations/{id}
где {id}
- это id организации)
Тело запроса (JSON):
{
"name": "Updated Test Organization",
"description": "This is an updated test organization.",
"type": "JSC"
}
{
"id": 1,
"name": "Updated Test Organization",
"description": "This is an updated test organization.",
"type": "JSC",
"created_at": "2024-01-19T21:07:35.766786Z",
"updated_at": "2024-01-20T10:00:00Z"
}
Метод: DELETE
URL: http://localhost:8080/organizations/{id}
где {id}
- это id организации)
Тело запроса (JSON):
{
"message": "Organization deleted successfully"
}
Метод: GET
URL: http://localhost:8080/organizations/{id}
где {id}
- это id организации)
{
"id": 1,
"name": "Test Organization",
"description": "This is a test organization.",
"type": "LLC",
"created_at": "2024-01-19T21:07:35.766786Z",
"updated_at": "2024-01-19T21:07:35.766786Z"
}
Метод: PUT
URL: http://localhost:8080/tenders/{id}
(где {id}
- это id тендера)
Тело запроса (JSON):
{
"name": "Updated Test Tender",
"description": "This is updated test tender",
"publication_date": "2024-01-22T12:00:00Z",
"end_date": "2024-01-29T12:00:00Z"
}
{
"id": 1,
"name": "Updated Test Tender",
"description": "This is updated test tender",
"organization_id": 1,
"publication_date": "2024-01-22T12:00:00Z",
"end_date": "2024-01-29T12:00:00Z",
"status": "draft",
"created_at": "2024-01-20T09:15:00Z",
"updated_at": "2024-01-20T10:00:00Z"
}
Метод: PUT
URL: http://localhost:8080/proposals/{id}
(где {id}
- это id предложения)
Тело запроса (JSON):
{
"description": "Updated proposal description",
"price": 200
}
{
"id": 1,
"tender_id": 1,
"organization_id": 1,
"description": "Updated proposal description",
"price": 200,
"status": "pending",
"created_at": "2024-01-20T09:15:00Z",
"updated_at": "2024-01-20T10:00:00Z"
}