-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO.txt
150 lines (126 loc) · 3.81 KB
/
TODO.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# Articles
[] database is for reading last version. revisions are stored in files (may even be compressed)
[]
`CREATE EXTENSION IF NOT EXISTS "uuid-ossp";`
`ALTER TABLE tableA ALTER COLUMN colA SET DATA TYPE UUID USING (uuid_generate_v4());`
I have psql 9.5
additional article fields:
+ author
+ content
+ content_type: markdown+html, html
+ modified_by:
+ modified_at:
+ created_at:
+ created_by
[] Насколько оптимален тип TEXT?
[] Перечисляемый тип?
```
CREATE TABLE article (
id integer NOT NULL,
name text,
-- TODO! global_id UUID default uuid_generate_v4(),
system_name text NOT NULL,
-- path text,
content text,
content_type: markdown+html, html,
active boolean DEFAULT true NOT NULL,
)
CREATE TABLE object_changed(
id INT SERIAL,
author_login text NOT NULL,
table_name text NOT NULL,
global_id
datetime timestamp without time zone NOT NULL,
-- TODO action_type: modify/create/delete
)
```
from pyragrid:
```
CREATE TABLE article (
id integer NOT NULL,
name text,
"systemName" text NOT NULL,
path text,
"activeRevisionId" integer,
"isTemplate" boolean DEFAULT false NOT NULL,
active boolean DEFAULT true NOT NULL
);
CREATE TABLE article_revision (
id integer NOT NULL,
"articleId" integer NOT NULL,
"parentRevisionId" integer,
code text NOT NULL,
"dateTime" timestamp without time zone NOT NULL,
"authorId" integer NOT NULL
);
```
```
class Article(Base):
__tablename__ = 'article'
id = Column(
Integer, primary_key=True,
info={'colanderalchemy': {
'title': 'id статьи',
'widget': deform.widget.TextInputWidget(readonly=True)
}})
global_id = Column(
postgresql.UUID,
index=True,
nullable=False,
server_default=text('gen_random_uuid()')
)
name = Column(
Text,
info={'colanderalchemy': {
'title': 'Название статьи',
'missing': None,
}})
system_name = Column(
Text,
nullable=False,
unique=True,
info={'colanderalchemy': {
'title': 'Системное имя',
'description': '(index для главной страницы)',
'validator': colander.Regex(
'^[a-z0-9_\-/]+$',
'Логин должен содержать только цифры и английские буквы'
),
'missing': colander.required
}})
// path = Column(
// Text,
// unique=True,
// info={'colanderalchemy': {
// 'title': 'Путь к статье',
// # TODO description to validator
// 'description': '(должен начинаться с /)',
// 'validator': colander.Regex(
// '^[a-z0-9_\-/]+$',
// 'Путь должен содержать только цифры и английские буквы'
// ),
// # 'missing': colander.required
// }})
// active_revision_id = Column(
// Integer,
// nullable=True,
// info={'colanderalchemy': {
// 'title': 'id активной ревизии',
// 'widget': deform.widget.TextInputWidget(readonly=True),
// 'typ': NullableInt
// }})
active = Column(
Boolean, default=True, server_default='true',
nullable=False,
info={'colanderalchemy': {
'title': 'Статья опубликована',
}})
// по-умолчанию всегда шаблон!
//
// is_template = Column(
// Boolean, default=False, server_default='false',
// nullable=False,
// info={'colanderalchemy': {
// 'title': 'Является шаблоном',
// }})
```