0001_initial.py 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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. from misago.core.pgutils import CreatePartialCompositeIndex, CreatePartialIndex
  9. class Migration(migrations.Migration):
  10. dependencies = [
  11. ('misago_categories', '0001_initial'),
  12. migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  13. ]
  14. operations = [
  15. migrations.CreateModel(
  16. name='Post',
  17. fields=[
  18. ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  19. ('poster_name', models.CharField(max_length=255)),
  20. ('poster_ip', models.GenericIPAddressField()),
  21. ('original', models.TextField()),
  22. ('parsed', models.TextField()),
  23. ('checksum', models.CharField(max_length=64, default='-')),
  24. ('has_attachments', models.BooleanField(default=False)),
  25. ('attachments_cache', JSONField(null=True, blank=True)),
  26. ('posted_on', models.DateTimeField()),
  27. ('updated_on', models.DateTimeField()),
  28. ('edits', models.PositiveIntegerField(default=0)),
  29. ('last_editor_name', models.CharField(max_length=255, null=True, blank=True)),
  30. ('last_editor_slug', models.SlugField(max_length=255, null=True, blank=True)),
  31. ('hidden_by', models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, null=True)),
  32. ('hidden_by_name', models.CharField(max_length=255, null=True, blank=True)),
  33. ('hidden_by_slug', models.SlugField(max_length=255, null=True, blank=True)),
  34. ('hidden_on', models.DateTimeField(default=django.utils.timezone.now)),
  35. ('has_reports', models.BooleanField(default=False)),
  36. ('has_open_reports', models.BooleanField(default=False)),
  37. ('is_unapproved', models.BooleanField(default=False, db_index=True)),
  38. ('is_hidden', models.BooleanField(default=False)),
  39. ('is_protected', models.BooleanField(default=False)),
  40. ('category', models.ForeignKey(to='misago_categories.Category')),
  41. ('last_editor', models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, null=True)),
  42. ('mentions', models.ManyToManyField(related_name='mention_set', to=settings.AUTH_USER_MODEL)),
  43. ('poster', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, null=True)),
  44. ('is_event', models.BooleanField(default=False, db_index=True)),
  45. ('event_type', models.CharField(max_length=255, null=True, blank=True)),
  46. ('event_context', JSONField(null=True, blank=True)),
  47. ],
  48. options={
  49. },
  50. bases=(models.Model,),
  51. ),
  52. CreatePartialIndex(
  53. field='Post.has_open_reports',
  54. index_name='misago_post_has_open_reports_partial',
  55. condition='has_open_reports = TRUE',
  56. ),
  57. CreatePartialIndex(
  58. field='Post.is_hidden',
  59. index_name='misago_post_is_hidden_partial',
  60. condition='is_hidden = FALSE',
  61. ),
  62. migrations.CreateModel(
  63. name='Thread',
  64. fields=[
  65. ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  66. ('title', models.CharField(max_length=255)),
  67. ('slug', models.CharField(max_length=255)),
  68. ('replies', models.PositiveIntegerField(default=0, db_index=True)),
  69. ('has_reported_posts', models.BooleanField(default=False)),
  70. ('has_open_reports', models.BooleanField(default=False)),
  71. ('has_unapproved_posts', models.BooleanField(default=False)),
  72. ('has_hidden_posts', models.BooleanField(default=False)),
  73. ('started_on', models.DateTimeField(db_index=True)),
  74. ('starter_name', models.CharField(max_length=255)),
  75. ('starter_slug', models.CharField(max_length=255)),
  76. ('last_post_on', models.DateTimeField(db_index=True)),
  77. ('last_poster_name', models.CharField(max_length=255, null=True, blank=True)),
  78. ('last_poster_slug', models.CharField(max_length=255, null=True, blank=True)),
  79. ('weight', models.PositiveIntegerField(default=0)),
  80. ('is_poll', models.BooleanField(default=False)),
  81. ('is_unapproved', models.BooleanField(default=False, db_index=True)),
  82. ('is_hidden', models.BooleanField(default=False)),
  83. ('is_closed', models.BooleanField(default=False)),
  84. ],
  85. options={
  86. },
  87. bases=(models.Model,),
  88. ),
  89. CreatePartialIndex(
  90. field='Thread.weight',
  91. index_name='misago_thread_is_global',
  92. condition='weight = 2',
  93. ),
  94. CreatePartialIndex(
  95. field='Thread.weight',
  96. index_name='misago_thread_is_local',
  97. condition='weight < 2',
  98. ),
  99. migrations.CreateModel(
  100. name='ThreadParticipant',
  101. fields=[
  102. ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  103. ('thread', models.ForeignKey(to='misago_threads.Thread')),
  104. ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
  105. ('is_owner', models.BooleanField(default=False)),
  106. ],
  107. options={
  108. },
  109. bases=(models.Model,),
  110. ),
  111. migrations.AddField(
  112. model_name='thread',
  113. name='participants',
  114. field=models.ManyToManyField(related_name='private_thread_set', through='misago_threads.ThreadParticipant', through_fields=('thread', 'user'), to=settings.AUTH_USER_MODEL),
  115. preserve_default=True,
  116. ),
  117. CreatePartialIndex(
  118. field='Thread.has_reported_posts',
  119. index_name='misago_thread_has_reported_posts_partial',
  120. condition='has_reported_posts = TRUE',
  121. ),
  122. CreatePartialIndex(
  123. field='Thread.has_unapproved_posts',
  124. index_name='misago_thread_has_unapproved_posts_partial',
  125. condition='has_unapproved_posts = TRUE',
  126. ),
  127. CreatePartialIndex(
  128. field='Thread.is_hidden',
  129. index_name='misago_thread_is_hidden_partial',
  130. condition='is_hidden = FALSE',
  131. ),
  132. CreatePartialIndex(
  133. field='Thread.weight',
  134. index_name='misago_thread_is_pinned_globally_partial',
  135. condition='weight = 2',
  136. ),
  137. CreatePartialIndex(
  138. field='Thread.weight',
  139. index_name='misago_thread_is_pinned_locally_partial',
  140. condition='weight = 1',
  141. ),
  142. CreatePartialIndex(
  143. field='Thread.weight',
  144. index_name='misago_thread_is_unpinned_partial',
  145. condition='weight = 0',
  146. ),
  147. migrations.AddField(
  148. model_name='post',
  149. name='thread',
  150. field=models.ForeignKey(to='misago_threads.Thread'),
  151. preserve_default=True,
  152. ),
  153. migrations.AddField(
  154. model_name='thread',
  155. name='first_post',
  156. field=models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='misago_threads.Post', null=True),
  157. preserve_default=True,
  158. ),
  159. migrations.AddField(
  160. model_name='thread',
  161. name='category',
  162. field=models.ForeignKey(to='misago_categories.Category'),
  163. preserve_default=True,
  164. ),
  165. migrations.AddField(
  166. model_name='thread',
  167. name='last_post',
  168. field=models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='misago_threads.Post', null=True),
  169. preserve_default=True,
  170. ),
  171. migrations.AddField(
  172. model_name='thread',
  173. name='last_poster',
  174. 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),
  175. preserve_default=True,
  176. ),
  177. migrations.AddField(
  178. model_name='thread',
  179. name='starter',
  180. field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, null=True),
  181. preserve_default=True,
  182. ),
  183. migrations.AlterIndexTogether(
  184. name='thread',
  185. index_together=set([
  186. ('category', 'id'),
  187. ('category', 'last_post_on'),
  188. ('category', 'replies'),
  189. ]),
  190. ),
  191. migrations.AlterIndexTogether(
  192. name='post',
  193. index_together=set([
  194. ('is_event', 'is_hidden'),
  195. ('poster', 'posted_on'),
  196. ]),
  197. ),
  198. migrations.CreateModel(
  199. name='Subscription',
  200. fields=[
  201. ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  202. ('last_read_on', models.DateTimeField(default=django.utils.timezone.now)),
  203. ('send_email', models.BooleanField(default=False)),
  204. ('category', models.ForeignKey(to='misago_categories.Category')),
  205. ('thread', models.ForeignKey(to='misago_threads.Thread')),
  206. ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
  207. ],
  208. options={
  209. },
  210. bases=(models.Model,),
  211. ),
  212. ]