BugzillaORM
Материал из YourcmcWiki
Версия от 17:21, 2 августа 2010; VitaliyFilippov (обсуждение | вклад)
В Bugzilla (например, 3.6) половина кода в шаблонах, половина на основе полу-ORM’а, а большая часть не пойми как. А ORM бы туда, было бы классно, что-то в духе:
Есть сущности:
- баг
- классификация, продукт, компонент
- ключевое слово, milestone, версия, статус бага, agreement (кастомное поле!)
- вложение, комментарий, флаг, тип флага
- пользователь, группа
- как ни странно, «сущность» — «метакласс» (класс сущности)
У сущностей есть:
- ID — первичный ключ
- атрибуты
- ссылка на контролирующую сущность (тип + ID)
то есть если другая сущность ссылается на эту, другим полем она должна ссылаться и на контролирующую - способ преобразования в строку
- Возможно, права доступа к сущности — привязка действий над сущностью (просмотр, правка, возможно, другие) к группам пользователей. Возможно, не нужно это сюда пихать.
Типы атрибутов:
- Строка
- Boolean
- Decimal
- Дата
- Время
- Дата+время
- Single-Select → ссылка на сущность (то есть «многие к 1»)
- Необязательный вариант синглселекта — «1 к 1».
- Multi-Select → ссылка на несколько сущностей одного типа (то есть «многие ко многим»)
- Атрибут атрибута — в каком виде показывать список (если в коде/шаблонах не задано специального поведения).
- Вариант мультиселекта — «список подчинённых» (то есть 1 ко многим). Например, список аттачментов бага, список комментов к багу.
У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них).
Поля багов:
поле | тип | примечания |
---|---|---|
short_desc | строка | |
classification | single-select | |
product | single-select | контролируется classification (или никем), у поля есть привязка к правам пользователя |
component | single-select | контролируется product |
version | single-select | контролируется product |
rep_platform | single-select | специальная функция «угадывания» дефолтного значения |
bug_file_loc | строка | |
op_sys | single-select | специальная функция «угадывания» дефолтного значения |
bug_status | single-select | есть функция валидации (Bug Status Workflow) |
resolution | single-select | у атрибута есть контролирующая сущность (показывается только при bug_status.closed=1) |
status_whiteboard | строка | |
keywords | multi-select | показ в виде списка |
bug_severity | single-select | |
priority | single-select | есть желание сделать decimal |
assigned_to | single-select | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
reporter | single-select | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
qa_contact | single-select | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
votes | decimal(,0) | |
cc | multi-select | показ в виде combo-box’а, есть функция валидации (угадывания юзера по некорректному имени) |
dependson | multi-select | показ в виде списка |
blocked | multi-select | показ в виде списка |
target_milestone | строка | |
see_also | multi-select | показ в виде списка (багов) |
alias | строка | |
reporter_accessible | boolean | |
cclist_accessible | boolean | |
estimated_time | время | |
remaining_time | время | |
deadline | дата | |
creation_ts | дата+время | |
delta_ts | дата+время | |
cf_agreement | single-select | контролируется product |
*** нет в fielddescs *** | ||
lastdiffed | дата+время | скрыто в интерфейсе |
attachments | multi-select | 1 ко многим |
longdescs | multi-select | 1 ко многим |
flags | multi-select | 1 ко многим |
Устаревшие поля / поля, которые ХЗ зачем нужны в таблице полей багов:
- assignee_accessible
- qacontact_accessible
- longdesc
- commenter
- longdescs.isprivate
- content
- bug_group
- flagtypes.name
- requestees.login_name
- setters.login_name
Вычисляемые поля багов:
work_time | Сумма work_time от связанных longdescs |
---|---|
percentage_complete | (Сумма work_time от dependson)/(Сумма estimated_time от dependson) |
owner_idle_time | Текущая дата минус MAX(дата последнего коммента от Assignee, дата последней активности от Assignee) |
days_elapsed | Текущая дата минус delta_ts |
everconfirmed | Менялся ли статус хоть раз на != UNCONFIRMED |
Поля вложений:
submitter | single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
---|---|
description | single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
filename | строка |
mimetype | строка |
ispatch | boolean |
isobsolete | boolean |
isprivate | boolean |
isurl | boolean |
thedata | потенциально строка, а вообще-то обычно NULL, так как данные хранятся в локальных файлах |