feat: завершён этап 1 - Фундамент Core Service
- Удалены зависимости: grpc, redis, prometheus - Упрощена конфигурация (Server, Database, JWT) - Создан логгер на основе logrus - Добавлено подключение к PostgreSQL - Создана миграция с базовыми таблицами - Обновлены модели с валидацией - Создан базовый API сервер с health check - Добавлен .env.example Готово для этапа 2 - Аутентификация
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user