0001_initial.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. import django.db.models.deletion
  4. import django.utils.timezone
  5. from django.conf import settings
  6. from django.contrib.postgres.fields import JSONField
  7. from django.db import migrations, models
  8. import misago.threads.models.attachment
  9. from misago.core.pgutils import CreatePartialCompositeIndex, CreatePartialIndex
  10. class Migration(migrations.Migration):
  11. dependencies = [
  12. ('misago_categories', '0001_initial'),
  13. migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  14. ]
  15. operations = [
  16. migrations.CreateModel(
  17. name='Post',
  18. fields=[
  19. ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  20. ('poster_name', models.CharField(max_length=255)),
  21. ('poster_ip', models.GenericIPAddressField()),
  22. ('original', models.TextField()),
  23. ('parsed', models.TextField()),
  24. ('checksum', models.CharField(max_length=64, default='-')),
  25. ('has_attachments', models.BooleanField(default=False)),
  26. ('attachments_cache', JSONField(null=True, blank=True)),
  27. ('posted_on', models.DateTimeField()),
  28. ('updated_on', models.DateTimeField()),
  29. ('edits', models.PositiveIntegerField(default=0)),
  30. ('last_editor_name', models.CharField(max_length=255, null=True, blank=True)),
  31. ('last_editor_slug', models.SlugField(max_length=255, null=True, blank=True)),
  32. ('hidden_by', models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, null=True)),
  33. ('hidden_by_name', models.CharField(max_length=255, null=True, blank=True)),
  34. ('hidden_by_slug', models.SlugField(max_length=255, null=True, blank=True)),
  35. ('hidden_on', models.DateTimeField(default=django.utils.timezone.now)),
  36. ('has_reports', models.BooleanField(default=False)),
  37. ('has_open_reports', models.BooleanField(default=False)),
  38. ('is_unapproved', models.BooleanField(default=False, db_index=True)),
  39. ('is_hidden', models.BooleanField(default=False)),
  40. ('is_protected', models.BooleanField(default=False)),
  41. ('category', models.ForeignKey(to='misago_categories.Category')),
  42. ('last_editor', models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, null=True)),
  43. ('mentions', models.ManyToManyField(related_name='mention_set', to=settings.AUTH_USER_MODEL)),
  44. ('poster', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, null=True)),
  45. ('is_event', models.BooleanField(default=False, db_index=True)),
  46. ('event_type', models.CharField(max_length=255, null=True, blank=True)),
  47. ('event_context', JSONField(null=True, blank=True)),
  48. ],
  49. options={
  50. },
  51. bases=(models.Model,),
  52. ),
  53. CreatePartialIndex(
  54. field='Post.has_open_reports',
  55. index_name='misago_post_has_open_reports_partial',
  56. condition='has_open_reports = TRUE',
  57. ),
  58. CreatePartialIndex(
  59. field='Post.is_hidden',
  60. index_name='misago_post_is_hidden_partial',
  61. condition='is_hidden = FALSE',
  62. ),
  63. migrations.CreateModel(
  64. name='Thread',
  65. fields=[
  66. ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  67. ('title', models.CharField(max_length=255)),
  68. ('slug', models.CharField(max_length=255)),
  69. ('replies', models.PositiveIntegerField(default=0, db_index=True)),
  70. ('has_reported_posts', models.BooleanField(default=False)),
  71. ('has_open_reports', models.BooleanField(default=False)),
  72. ('has_unapproved_posts', models.BooleanField(default=False)),
  73. ('has_hidden_posts', models.BooleanField(default=False)),
  74. ('started_on', models.DateTimeField(db_index=True)),
  75. ('starter_name', models.CharField(max_length=255)),
  76. ('starter_slug', models.CharField(max_length=255)),
  77. ('last_post_on', models.DateTimeField(db_index=True)),
  78. ('last_poster_name', models.CharField(max_length=255, null=True, blank=True)),
  79. ('last_poster_slug', models.CharField(max_length=255, null=True, blank=True)),
  80. ('weight', models.PositiveIntegerField(default=0)),
  81. ('is_poll', models.BooleanField(default=False)),
  82. ('is_unapproved', models.BooleanField(default=False, db_index=True)),
  83. ('is_hidden', models.BooleanField(default=False)),
  84. ('is_closed', models.BooleanField(default=False)),
  85. ],
  86. options={
  87. },
  88. bases=(models.Model,),
  89. ),
  90. CreatePartialIndex(
  91. field='Thread.weight',
  92. index_name='misago_thread_is_global',
  93. condition='weight = 2',
  94. ),
  95. CreatePartialIndex(
  96. field='Thread.weight',
  97. index_name='misago_thread_is_local',
  98. condition='weight < 2',
  99. ),
  100. migrations.CreateModel(
  101. name='ThreadParticipant',
  102. fields=[
  103. ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  104. ('thread', models.ForeignKey(to='misago_threads.Thread')),
  105. ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
  106. ('is_owner', models.BooleanField(default=False)),
  107. ],
  108. options={
  109. },
  110. bases=(models.Model,),
  111. ),
  112. migrations.AddField(
  113. model_name='thread',
  114. name='participants',
  115. field=models.ManyToManyField(related_name='private_thread_set', through='misago_threads.ThreadParticipant', through_fields=('thread', 'user'), to=settings.AUTH_USER_MODEL),
  116. preserve_default=True,
  117. ),
  118. CreatePartialIndex(
  119. field='Thread.has_reported_posts',
  120. index_name='misago_thread_has_reported_posts_partial',
  121. condition='has_reported_posts = TRUE',
  122. ),
  123. CreatePartialIndex(
  124. field='Thread.has_unapproved_posts',
  125. index_name='misago_thread_has_unapproved_posts_partial',
  126. condition='has_unapproved_posts = TRUE',
  127. ),
  128. CreatePartialIndex(
  129. field='Thread.is_hidden',
  130. index_name='misago_thread_is_hidden_partial',
  131. condition='is_hidden = FALSE',
  132. ),
  133. CreatePartialIndex(
  134. field='Thread.weight',
  135. index_name='misago_thread_is_pinned_globally_partial',
  136. condition='weight = 2',
  137. ),
  138. CreatePartialIndex(
  139. field='Thread.weight',
  140. index_name='misago_thread_is_pinned_locally_partial',
  141. condition='weight = 1',
  142. ),
  143. CreatePartialIndex(
  144. field='Thread.weight',
  145. index_name='misago_thread_is_unpinned_partial',
  146. condition='weight = 0',
  147. ),
  148. migrations.AddField(
  149. model_name='post',
  150. name='thread',
  151. field=models.ForeignKey(to='misago_threads.Thread'),
  152. preserve_default=True,
  153. ),
  154. migrations.AddField(
  155. model_name='thread',
  156. name='first_post',
  157. field=models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='misago_threads.Post', null=True),
  158. preserve_default=True,
  159. ),
  160. migrations.AddField(
  161. model_name='thread',
  162. name='category',
  163. field=models.ForeignKey(to='misago_categories.Category'),
  164. preserve_default=True,
  165. ),
  166. migrations.AddField(
  167. model_name='thread',
  168. name='last_post',
  169. field=models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='misago_threads.Post', null=True),
  170. preserve_default=True,
  171. ),
  172. migrations.AddField(
  173. model_name='thread',
  174. name='last_poster',
  175. field=models.ForeignKey(related_name='last_poster_set', on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, null=True),
  176. preserve_default=True,
  177. ),
  178. migrations.AddField(
  179. model_name='thread',
  180. name='starter',
  181. field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, null=True),
  182. preserve_default=True,
  183. ),
  184. migrations.AlterIndexTogether(
  185. name='thread',
  186. index_together=set([
  187. ('category', 'id'),
  188. ('category', 'last_post_on'),
  189. ('category', 'replies'),
  190. ]),
  191. ),
  192. migrations.AlterIndexTogether(
  193. name='post',
  194. index_together=set([
  195. ('is_event', 'is_hidden'),
  196. ('poster', 'posted_on'),
  197. ]),
  198. ),
  199. migrations.CreateModel(
  200. name='Subscription',
  201. fields=[
  202. ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  203. ('last_read_on', models.DateTimeField(default=django.utils.timezone.now)),
  204. ('send_email', models.BooleanField(default=False)),
  205. ('category', models.ForeignKey(to='misago_categories.Category')),
  206. ('thread', models.ForeignKey(to='misago_threads.Thread')),
  207. ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
  208. ],
  209. options={
  210. },
  211. bases=(models.Model,),
  212. ),
  213. migrations.AlterIndexTogether(
  214. name='subscription',
  215. index_together=set([
  216. ('send_email', 'last_read_on'),
  217. ]),
  218. ),
  219. migrations.CreateModel(
  220. name='Attachment',
  221. fields=[
  222. ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  223. ('secret', models.CharField(max_length=64)),
  224. ('uploaded_on', models.DateTimeField(default=django.utils.timezone.now)),
  225. ('uploader_name', models.CharField(max_length=255)),
  226. ('uploader_slug', models.CharField(max_length=255)),
  227. ('uploader_ip', models.GenericIPAddressField()),
  228. ('filename', models.CharField(max_length=255)),
  229. ('size', models.PositiveIntegerField(default=0)),
  230. ('thumbnail', models.ImageField(blank=True, null=True, upload_to=misago.threads.models.attachment.upload_to)),
  231. ('image', models.ImageField(blank=True, null=True, upload_to=misago.threads.models.attachment.upload_to)),
  232. ('file', models.FileField(blank=True, null=True, upload_to=misago.threads.models.attachment.upload_to)),
  233. ('post', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='misago_threads.Post')),
  234. ],
  235. ),
  236. migrations.CreateModel(
  237. name='AttachmentType',
  238. fields=[
  239. ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  240. ('name', models.CharField(max_length=255)),
  241. ('extensions', models.CharField(max_length=255)),
  242. ('mimetypes', models.CharField(blank=True, max_length=255, null=True)),
  243. ('size_limit', models.PositiveIntegerField(default=1024)),
  244. ('status', models.PositiveIntegerField(choices=[(0, 'Allow uploads and downloads'), (1, 'Allow downloads only'), (2, 'Disallow both uploading and downloading')], default=0)),
  245. ('limit_downloads_to', models.ManyToManyField(blank=True, related_name='_attachmenttype_limit_downloads_to_+', to='misago_acl.Role')),
  246. ('limit_uploads_to', models.ManyToManyField(blank=True, related_name='_attachmenttype_limit_uploads_to_+', to='misago_acl.Role')),
  247. ],
  248. ),
  249. migrations.AddField(
  250. model_name='attachment',
  251. name='filetype',
  252. field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='misago_threads.AttachmentType'),
  253. ),
  254. migrations.AddField(
  255. model_name='attachment',
  256. name='uploader',
  257. field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
  258. ),
  259. ]