121 lines
4.7 KiB
Go
121 lines
4.7 KiB
Go
package models
|
||
|
||
import (
|
||
"time"
|
||
|
||
"github.com/google/uuid"
|
||
)
|
||
|
||
// Organization представляет организацию/компанию
|
||
type Organization struct {
|
||
ID uuid.UUID `json:"id" db:"id"`
|
||
Name string `json:"name" db:"name"`
|
||
Type string `json:"type" db:"type"`
|
||
Settings map[string]any `json:"settings" db:"settings"`
|
||
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
||
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
||
}
|
||
|
||
// User представляет пользователя системы
|
||
type User struct {
|
||
ID uuid.UUID `json:"id" db:"id"`
|
||
OrganizationID uuid.UUID `json:"organization_id" db:"organization_id"`
|
||
Email string `json:"email" db:"email"`
|
||
Role string `json:"role" db:"role"`
|
||
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
||
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
||
}
|
||
|
||
// StorageLocation представляет место хранения
|
||
type StorageLocation struct {
|
||
ID uuid.UUID `json:"id" db:"id"`
|
||
OrganizationID uuid.UUID `json:"organization_id" db:"organization_id"`
|
||
ParentID *uuid.UUID `json:"parent_id" db:"parent_id"`
|
||
Name string `json:"name" db:"name"`
|
||
Address string `json:"address" db:"address"`
|
||
Type string `json:"type" db:"type"`
|
||
Coordinates map[string]any `json:"coordinates" db:"coordinates"`
|
||
QRCode string `json:"qr_code" db:"qr_code"`
|
||
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
||
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
||
}
|
||
|
||
// Item представляет товар/материал
|
||
type Item struct {
|
||
ID uuid.UUID `json:"id" db:"id"`
|
||
OrganizationID uuid.UUID `json:"organization_id" db:"organization_id"`
|
||
Name string `json:"name" db:"name"`
|
||
Description string `json:"description" db:"description"`
|
||
Category string `json:"category" db:"category"`
|
||
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
||
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
||
}
|
||
|
||
// ItemPlacement представляет размещение товара в месте хранения
|
||
type ItemPlacement struct {
|
||
ID uuid.UUID `json:"id" db:"id"`
|
||
OrganizationID uuid.UUID `json:"organization_id" db:"organization_id"`
|
||
ItemID uuid.UUID `json:"item_id" db:"item_id"`
|
||
LocationID uuid.UUID `json:"location_id" db:"location_id"`
|
||
Quantity int `json:"quantity" db:"quantity"`
|
||
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
||
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
||
}
|
||
|
||
// LoginRequest запрос на аутентификацию
|
||
type LoginRequest struct {
|
||
Email string `json:"email" binding:"required,email"`
|
||
Password string `json:"password" binding:"required"`
|
||
}
|
||
|
||
// LoginResponse ответ на аутентификацию
|
||
type LoginResponse struct {
|
||
Token string `json:"token"`
|
||
RefreshToken string `json:"refresh_token"`
|
||
User User `json:"user"`
|
||
ExpiresAt time.Time `json:"expires_at"`
|
||
}
|
||
|
||
// CreateLocationRequest запрос на создание места хранения
|
||
type CreateLocationRequest struct {
|
||
Name string `json:"name" binding:"required"`
|
||
Address string `json:"address" binding:"required"`
|
||
Type string `json:"type" binding:"required"`
|
||
ParentID *uuid.UUID `json:"parent_id"`
|
||
Coordinates map[string]any `json:"coordinates"`
|
||
}
|
||
|
||
// CreateItemRequest запрос на создание товара
|
||
type CreateItemRequest struct {
|
||
Name string `json:"name" binding:"required"`
|
||
Description string `json:"description"`
|
||
Category string `json:"category" binding:"required"`
|
||
}
|
||
|
||
// PlaceItemRequest запрос на размещение товара
|
||
type PlaceItemRequest struct {
|
||
ItemID uuid.UUID `json:"item_id" binding:"required"`
|
||
LocationID uuid.UUID `json:"location_id" binding:"required"`
|
||
Quantity int `json:"quantity" binding:"required,min=1"`
|
||
}
|
||
|
||
// SearchRequest запрос на поиск
|
||
type SearchRequest struct {
|
||
Query string `json:"query" binding:"required"`
|
||
Category string `json:"category"`
|
||
LocationID *uuid.UUID `json:"location_id"`
|
||
}
|
||
|
||
// SearchResponse результат поиска
|
||
type SearchResponse struct {
|
||
Items []ItemWithLocation `json:"items"`
|
||
TotalCount int `json:"total_count"`
|
||
}
|
||
|
||
// ItemWithLocation товар с информацией о месте размещения
|
||
type ItemWithLocation struct {
|
||
Item Item `json:"item"`
|
||
Location StorageLocation `json:"location"`
|
||
Quantity int `json:"quantity"`
|
||
}
|