feat: завершён этап 1 - Фундамент Core Service

- Удалены зависимости: grpc, redis, prometheus
- Упрощена конфигурация (Server, Database, JWT)
- Создан логгер на основе logrus
- Добавлено подключение к PostgreSQL
- Создана миграция с базовыми таблицами
- Обновлены модели с валидацией
- Создан базовый API сервер с health check
- Добавлен .env.example

Готово для этапа 2 - Аутентификация
This commit is contained in:
2025-08-27 14:40:48 +04:00
parent 725d4c4474
commit 9777114e16
10 changed files with 521 additions and 164 deletions

View File

@@ -15,23 +15,23 @@
## 🚀 Этап 1: Фундамент (Недели 1-2)
### Шаг 1.1: Очистка и настройка проекта
- [ ] Удалить зависимости: `grpc`, `redis`, `prometheus`
- [ ] Обновить `go.mod` - оставить только необходимые пакеты
- [ ] Настроить структуру проекта согласно Go standards
- [ ] Добавить `.env` для конфигурации
- [x] Удалить зависимости: `grpc`, `redis`, `prometheus`
- [x] Обновить `go.mod` - оставить только необходимые пакеты
- [x] Настроить структуру проекта согласно Go standards
- [x] Добавить `.env` для конфигурации
**Файлы для изменения:**
```
go.mod - удалить grpc, redis, prometheus
cmd/main.go - убрать redis, grpc клиенты
internal/config/config.go - упростить конфигурацию
go.mod - удалить grpc, redis, prometheus
cmd/main.go - убрать redis, grpc клиенты
internal/config/config.go - упростить конфигурацию
```
### Шаг 1.2: Базовая конфигурация
- [ ] Создать `internal/config/config.go` с упрощённой структурой
- [ ] Добавить поддержку `.env` файлов
- [ ] Настроить логирование через logrus
- [ ] Добавить health check endpoint
- [x] Создать `internal/config/config.go` с упрощённой структурой
- [x] Добавить поддержку `.env` файлов
- [x] Настроить логирование через logrus
- [x] Добавить health check endpoint
**Структура конфигурации:**
```go
@@ -62,16 +62,16 @@ type JWTConfig struct {
```
### Шаг 1.3: Подключение к базе данных
- [ ] Создать `internal/database/connection.go`
- [ ] Настроить подключение к PostgreSQL
- [ ] Добавить миграции через `golang-migrate`
- [ ] Создать базовые таблицы
- [x] Создать `internal/database/connection.go`
- [x] Настроить подключение к PostgreSQL
- [x] Добавить миграции через `golang-migrate`
- [x] Создать базовые таблицы
**Структура БД (упрощённая):**
```sql
-- organizations
CREATE TABLE organizations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
name VARCHAR(255) NOT NULL,
type VARCHAR(100),
settings JSONB,
@@ -80,8 +80,8 @@ CREATE TABLE organizations (
-- users
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
organization_id UUID REFERENCES organizations(id),
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
organization_id UUID REFERENCES organizations(id) ON DELETE CASCADE,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(50) DEFAULT 'user',
@@ -90,9 +90,9 @@ CREATE TABLE users (
-- storage_locations
CREATE TABLE storage_locations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
organization_id UUID REFERENCES organizations(id),
parent_id UUID REFERENCES storage_locations(id),
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
organization_id UUID REFERENCES organizations(id) ON DELETE CASCADE,
parent_id UUID REFERENCES storage_locations(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL,
address VARCHAR(100) NOT NULL,
type VARCHAR(50) NOT NULL,
@@ -102,8 +102,8 @@ CREATE TABLE storage_locations (
-- items
CREATE TABLE items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
organization_id UUID REFERENCES organizations(id),
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
organization_id UUID REFERENCES organizations(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL,
description TEXT,
category VARCHAR(100),
@@ -112,19 +112,19 @@ CREATE TABLE items (
-- item_placements
CREATE TABLE item_placements (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
organization_id UUID REFERENCES organizations(id),
item_id UUID REFERENCES items(id),
location_id UUID REFERENCES storage_locations(id),
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
organization_id UUID REFERENCES organizations(id) ON DELETE CASCADE,
item_id UUID REFERENCES items(id) ON DELETE CASCADE,
location_id UUID REFERENCES storage_locations(id) ON DELETE CASCADE,
quantity INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT NOW()
);
```
### Шаг 1.4: Базовые модели
- [ ] Создать `internal/models/` с основными структурами
- [ ] Добавить валидацию через `validator`
- [ ] Реализовать JSON теги для API
- [x] Создать `internal/models/` с основными структурами
- [x] Добавить валидацию через `validator`
- [x] Реализовать JSON теги для API
**Основные модели:**
```go
@@ -142,20 +142,21 @@ type User struct {
ID uuid.UUID `json:"id" db:"id"`
OrganizationID uuid.UUID `json:"organization_id" db:"organization_id"`
Email string `json:"email" validate:"required,email"`
PasswordHash string `json:"-" db:"password_hash"`
Role string `json:"role"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
}
// internal/models/storage_location.go
type StorageLocation struct {
ID uuid.UUID `json:"id" db:"id"`
OrganizationID uuid.UUID `json:"organization_id" db:"organization_id"`
ID uuid.UUID `json:"id" db:"id"`
OrganizationID uuid.UUID `json:"organization_id" db:"organization_id"`
ParentID *uuid.UUID `json:"parent_id,omitempty" db:"parent_id"`
Name string `json:"name" validate:"required"`
Address string `json:"address" validate:"required"`
Type string `json:"type" validate:"required"`
Coordinates JSON `json:"coordinates"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
Name string `json:"name" validate:"required"`
Address string `json:"address" validate:"required"`
Type string `json:"type" validate:"required"`
Coordinates JSON `json:"coordinates"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
}
// internal/models/item.go