-
Notifications
You must be signed in to change notification settings - Fork 0
Models
n0pashkov edited this page Mar 2, 2025
·
1 revision
В этом разделе описаны основные модели данных, используемые в системе заявок на ремонт техники.
Модель пользователя представляет собой учетную запись в системе.
| Поле | Тип | Описание |
|---|---|---|
| id | Integer | Уникальный идентификатор пользователя |
| username | String | Имя пользователя для входа в систему |
| String | Электронная почта пользователя | |
| full_name | String | Полное имя пользователя |
| hashed_password | String | Хэшированный пароль пользователя |
| is_active | Boolean | Флаг активности пользователя |
| role | String | Роль пользователя (user, agent, admin) |
- tickets - заявки, созданные пользователем (отношение один-ко-многим)
- assigned_tickets - заявки, назначенные пользователю (отношение один-ко-многим)
- comments - комментарии, оставленные пользователем (отношение один-ко-многим)
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username VARCHAR(255) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE,
full_name VARCHAR(255),
hashed_password VARCHAR(255) NOT NULL,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
role VARCHAR(50) NOT NULL DEFAULT 'user'
);Модель заявки представляет собой запрос на ремонт технического оборудования.
| Поле | Тип | Описание |
|---|---|---|
| id | Integer | Уникальный идентификатор заявки |
| title | String | Заголовок заявки |
| description | String | Описание проблемы |
| status | String | Статус заявки (new, assigned, in_progress, need_info, completed, rejected) |
| priority | String | Приоритет заявки (low, medium, high, critical) |
| category | String | Категория оборудования |
| equipment_id | Integer | Идентификатор оборудования (опционально) |
| resolution | String | Решение проблемы (заполняется при завершении) |
| created_at | DateTime | Дата и время создания заявки |
| updated_at | DateTime | Дата и время последнего обновления заявки |
| user_id | Integer | Идентификатор пользователя, создавшего заявку |
| assigned_to_id | Integer | Идентификатор пользователя, которому назначена заявка (опционально) |
- user - пользователь, создавший заявку (отношение многие-к-одному)
- assigned_to - пользователь, которому назначена заявка (отношение многие-к-одному)
- comments - комментарии к заявке (отношение один-ко-многим)
CREATE TABLE tickets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
status VARCHAR(50) NOT NULL DEFAULT 'new',
priority VARCHAR(50) NOT NULL DEFAULT 'medium',
category VARCHAR(100),
equipment_id INTEGER,
resolution TEXT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
user_id INTEGER NOT NULL,
assigned_to_id INTEGER,
FOREIGN KEY (user_id) REFERENCES users (id),
FOREIGN KEY (assigned_to_id) REFERENCES users (id)
);Модель комментария представляет собой сообщение, оставленное к заявке.
| Поле | Тип | Описание |
|---|---|---|
| id | Integer | Уникальный идентификатор комментария |
| text | String | Текст комментария |
| created_at | DateTime | Дата и время создания комментария |
| ticket_id | Integer | Идентификатор заявки, к которой относится комментарий |
| author_id | Integer | Идентификатор пользователя, оставившего комментарий |
- ticket - заявка, к которой относится комментарий (отношение многие-к-одному)
- author - пользователь, оставивший комментарий (отношение многие-к-одному)
CREATE TABLE comments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
text TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
ticket_id INTEGER NOT NULL,
author_id INTEGER NOT NULL,
FOREIGN KEY (ticket_id) REFERENCES tickets (id),
FOREIGN KEY (author_id) REFERENCES users (id)
);+----------------+ +----------------+ +----------------+
| User | | Ticket | | Comment |
+----------------+ +----------------+ +----------------+
| id |<----->| user_id | | id |
| username | | assigned_to_id |<----->| text |
| email | | title | | created_at |
| full_name | | description |<----->| ticket_id |
| hashed_password| | status | | author_id |
| is_active | | priority | +----------------+
| role | | category |
+----------------+ | equipment_id |
| resolution |
| created_at |
| updated_at |
+----------------+
Для валидации данных и сериализации/десериализации используются следующие схемы Pydantic:
- UserBase - базовая схема с общими полями
- UserCreate - схема для создания пользователя (включает пароль)
- UserUpdate - схема для обновления пользователя (все поля опциональны)
- UserResponse - схема для ответа API (без хэшированного пароля)
- TicketBase - базовая схема с общими полями
- TicketCreate - схема для создания заявки
- TicketUpdate - схема для обновления заявки (все поля опциональны)
- TicketResponse - схема для ответа API (включает дополнительные поля)
- CommentBase - базовая схема с общими полями
- CommentCreate - схема для создания комментария
- CommentResponse - схема для ответа API (включает дополнительные поля)
Для оптимизации запросов в базе данных созданы следующие индексы:
-- Индекс для поиска заявок по статусу
CREATE INDEX idx_tickets_status ON tickets (status);
-- Индекс для поиска заявок по пользователю
CREATE INDEX idx_tickets_user_id ON tickets (user_id);
-- Индекс для поиска заявок, назначенных агенту
CREATE INDEX idx_tickets_assigned_to_id ON tickets (assigned_to_id);
-- Индекс для поиска комментариев по заявке
CREATE INDEX idx_comments_ticket_id ON comments (ticket_id);