lib.itmens/takahe/migrations/0001_initial.py
2024-06-02 15:28:14 -04:00

925 lines
36 KiB
Python

# Generated by Django 4.2.13 on 2024-06-01 05:38
import functools
import django.db.models.deletion
import django.utils.timezone
from django.db import migrations, models
import takahe.models
class Migration(migrations.Migration):
initial = True
dependencies = []
operations = [
migrations.CreateModel(
name="Domain",
fields=[
(
"domain",
models.CharField(max_length=250, primary_key=True, serialize=False),
),
(
"service_domain",
models.CharField(
blank=True,
db_index=True,
max_length=250,
null=True,
unique=True,
),
),
("state", models.CharField(default="outdated", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
("nodeinfo", models.JSONField(blank=True, null=True)),
("local", models.BooleanField()),
("blocked", models.BooleanField(default=False)),
("public", models.BooleanField(default=False)),
("default", models.BooleanField(default=False)),
("notes", models.TextField(blank=True, null=True)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
],
options={
"db_table": "users_domain",
},
),
migrations.CreateModel(
name="Emoji",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("shortcode", models.SlugField(max_length=100)),
("local", models.BooleanField(default=True)),
("public", models.BooleanField(null=True)),
(
"object_uri",
models.CharField(
blank=True, max_length=500, null=True, unique=True
),
),
("mimetype", models.CharField(max_length=200)),
("file", models.ImageField(blank=True, null=True, upload_to="")),
("remote_url", models.CharField(blank=True, max_length=500, null=True)),
("category", models.CharField(blank=True, max_length=100, null=True)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
(
"domain",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to="takahe.domain",
),
),
],
options={
"db_table": "activities_emoji",
},
),
migrations.CreateModel(
name="Hashtag",
fields=[
(
"hashtag",
models.SlugField(max_length=100, primary_key=True, serialize=False),
),
(
"name_override",
models.CharField(blank=True, max_length=100, null=True),
),
("public", models.BooleanField(null=True)),
("state", models.CharField(default="outdated", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
("stats", models.JSONField(blank=True, null=True)),
("stats_updated", models.DateTimeField(blank=True, null=True)),
("aliases", models.JSONField(blank=True, null=True)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
],
options={
"db_table": "activities_hashtag",
},
),
migrations.CreateModel(
name="Identity",
fields=[
(
"id",
models.BigIntegerField(
default=takahe.models.Snowflake.generate_identity,
primary_key=True,
serialize=False,
),
),
("actor_uri", models.CharField(max_length=500, unique=True)),
("state", models.CharField(default="outdated", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
("state_next_attempt", models.DateTimeField(blank=True, null=True)),
(
"state_locked_until",
models.DateTimeField(blank=True, db_index=True, null=True),
),
("local", models.BooleanField(db_index=True)),
("username", models.CharField(blank=True, max_length=500, null=True)),
(
"name",
models.CharField(
blank=True,
max_length=500,
null=True,
verbose_name="Display Name",
),
),
(
"summary",
models.TextField(blank=True, null=True, verbose_name="Bio"),
),
(
"manually_approves_followers",
models.BooleanField(
default=False, verbose_name="Manually approve new followers"
),
),
(
"discoverable",
models.BooleanField(
default=True,
verbose_name="Include profile and posts in search and discovery",
),
),
(
"profile_uri",
models.CharField(blank=True, max_length=500, null=True),
),
("inbox_uri", models.CharField(blank=True, max_length=500, null=True)),
(
"shared_inbox_uri",
models.CharField(blank=True, max_length=500, null=True),
),
("outbox_uri", models.CharField(blank=True, max_length=500, null=True)),
("icon_uri", models.CharField(blank=True, max_length=500, null=True)),
("image_uri", models.CharField(blank=True, max_length=500, null=True)),
(
"followers_uri",
models.CharField(blank=True, max_length=500, null=True),
),
(
"following_uri",
models.CharField(blank=True, max_length=500, null=True),
),
(
"featured_collection_uri",
models.CharField(blank=True, max_length=500, null=True),
),
("actor_type", models.CharField(default="person", max_length=100)),
(
"icon",
models.ImageField(
blank=True,
null=True,
storage=takahe.models.upload_store,
upload_to=functools.partial(
takahe.models.upload_namer, *("profile_images",), **{}
),
verbose_name="Profile picture",
),
),
(
"image",
models.ImageField(
blank=True,
null=True,
storage=takahe.models.upload_store,
upload_to=functools.partial(
takahe.models.upload_namer, *("background_images",), **{}
),
verbose_name="Header picture",
),
),
("metadata", models.JSONField(blank=True, null=True)),
("pinned", models.JSONField(blank=True, null=True)),
("sensitive", models.BooleanField(default=False)),
(
"restriction",
models.IntegerField(
choices=[(0, "None"), (1, "Limited"), (2, "Blocked")],
db_index=True,
default=0,
),
),
("admin_notes", models.TextField(blank=True, null=True)),
("private_key", models.TextField(blank=True, null=True)),
("public_key", models.TextField(blank=True, null=True)),
("public_key_id", models.TextField(blank=True, null=True)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
("fetched", models.DateTimeField(blank=True, null=True)),
("deleted", models.DateTimeField(blank=True, null=True)),
(
"domain",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="identities",
to="takahe.domain",
),
),
],
options={
"verbose_name_plural": "identities",
"db_table": "users_identity",
},
),
migrations.CreateModel(
name="InboxMessage",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("message", models.JSONField()),
("state", models.CharField(default="received", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
],
options={
"db_table": "users_inboxmessage",
},
),
migrations.CreateModel(
name="Invite",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("token", models.CharField(max_length=500, unique=True)),
("note", models.TextField(blank=True, null=True)),
("uses", models.IntegerField(blank=True, null=True)),
("expires", models.DateTimeField(blank=True, null=True)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
],
options={
"db_table": "users_invite",
},
),
migrations.CreateModel(
name="Post",
fields=[
(
"id",
models.BigIntegerField(
default=takahe.models.Snowflake.generate_post,
primary_key=True,
serialize=False,
),
),
("state", models.CharField(default="new", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
("local", models.BooleanField()),
(
"object_uri",
models.CharField(
blank=True, max_length=2048, null=True, unique=True
),
),
(
"visibility",
models.IntegerField(
choices=[
(0, "Public"),
(4, "Local Only"),
(1, "Unlisted"),
(2, "Followers"),
(3, "Mentioned"),
],
default=0,
),
),
("content", models.TextField()),
("language", models.CharField(blank=True, default="")),
(
"type",
models.CharField(
choices=[
("Article", "Article"),
("Audio", "Audio"),
("Event", "Event"),
("Image", "Image"),
("Note", "Note"),
("Page", "Page"),
("Question", "Question"),
("Video", "Video"),
],
default="Note",
max_length=20,
),
),
("type_data", models.JSONField(blank=True, null=True)),
("sensitive", models.BooleanField(default=False)),
("summary", models.TextField(blank=True, null=True)),
("url", models.CharField(blank=True, max_length=2048, null=True)),
(
"in_reply_to",
models.CharField(
blank=True, db_index=True, max_length=500, null=True
),
),
("hashtags", models.JSONField(blank=True, null=True)),
("stats", models.JSONField(blank=True, null=True)),
("published", models.DateTimeField(default=django.utils.timezone.now)),
("edited", models.DateTimeField(blank=True, null=True)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
(
"author",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="posts",
to="takahe.identity",
),
),
(
"emojis",
models.ManyToManyField(
blank=True, related_name="posts_using_emoji", to="takahe.emoji"
),
),
(
"mentions",
models.ManyToManyField(
blank=True,
related_name="posts_mentioning",
to="takahe.identity",
),
),
(
"to",
models.ManyToManyField(
blank=True, related_name="posts_to", to="takahe.identity"
),
),
],
options={
"db_table": "activities_post",
},
),
migrations.CreateModel(
name="PostInteraction",
fields=[
(
"id",
models.BigIntegerField(
default=takahe.models.Snowflake.generate_post_interaction,
primary_key=True,
serialize=False,
),
),
("state", models.CharField(default="new", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
(
"object_uri",
models.CharField(
blank=True, max_length=500, null=True, unique=True
),
),
(
"type",
models.CharField(
choices=[
("like", "Like"),
("boost", "Boost"),
("vote", "Vote"),
("pin", "Pin"),
],
max_length=100,
),
),
("value", models.CharField(blank=True, max_length=50, null=True)),
("published", models.DateTimeField(default=django.utils.timezone.now)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
(
"identity",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="interactions",
to="takahe.identity",
),
),
(
"post",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="interactions",
to="takahe.post",
),
),
],
options={
"db_table": "activities_postinteraction",
},
),
migrations.CreateModel(
name="Relay",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("inbox_uri", models.CharField(max_length=500, unique=True)),
("state", models.CharField(default="new", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
("state_next_attempt", models.DateTimeField(blank=True, null=True)),
(
"state_locked_until",
models.DateTimeField(blank=True, db_index=True, null=True),
),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
],
options={
"db_table": "users_relay",
},
),
migrations.CreateModel(
name="User",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("password", models.CharField(max_length=128, verbose_name="password")),
(
"last_login",
models.DateTimeField(
blank=True, null=True, verbose_name="last login"
),
),
("email", models.EmailField(max_length=254, unique=True)),
("admin", models.BooleanField(default=False)),
("moderator", models.BooleanField(default=False)),
("banned", models.BooleanField(default=False)),
("deleted", models.BooleanField(default=False)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
("last_seen", models.DateTimeField(auto_now_add=True)),
],
options={
"db_table": "users_user",
},
),
migrations.CreateModel(
name="PostAttachment",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("state", models.CharField(default="new", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
("mimetype", models.CharField(max_length=200)),
(
"file",
models.FileField(
blank=True,
null=True,
storage=takahe.models.upload_store,
upload_to=functools.partial(
takahe.models.upload_namer, *("attachments",), **{}
),
),
),
(
"thumbnail",
models.ImageField(
blank=True,
null=True,
storage=takahe.models.upload_store,
upload_to=functools.partial(
takahe.models.upload_namer,
*("attachment_thumbnails",),
**{},
),
),
),
("remote_url", models.CharField(blank=True, max_length=500, null=True)),
("name", models.TextField(blank=True, null=True)),
("width", models.IntegerField(blank=True, null=True)),
("height", models.IntegerField(blank=True, null=True)),
("focal_x", models.FloatField(blank=True, null=True)),
("focal_y", models.FloatField(blank=True, null=True)),
("blurhash", models.TextField(blank=True, null=True)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
(
"author",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="attachments",
to="takahe.identity",
),
),
(
"post",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="attachments",
to="takahe.post",
),
),
],
options={
"db_table": "activities_postattachment",
},
),
migrations.AddField(
model_name="identity",
name="users",
field=models.ManyToManyField(
blank=True, related_name="identities", to="takahe.user"
),
),
migrations.CreateModel(
name="FanOut",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("state", models.CharField(default="outdated", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
(
"type",
models.CharField(
choices=[
("post", "Post"),
("post_edited", "Post Edited"),
("post_deleted", "Post Deleted"),
("interaction", "Interaction"),
("undo_interaction", "Undo Interaction"),
("identity_edited", "Identity Edited"),
("identity_deleted", "Identity Deleted"),
("identity_created", "Identity Created"),
("identity_moved", "Identity Moved"),
],
max_length=100,
),
),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
(
"identity",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="fan_outs",
to="takahe.identity",
),
),
(
"subject_identity",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="subject_fan_outs",
to="takahe.identity",
),
),
(
"subject_post",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="fan_outs",
to="takahe.post",
),
),
(
"subject_post_interaction",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="fan_outs",
to="takahe.postinteraction",
),
),
],
options={
"db_table": "activities_fanout",
},
),
migrations.AddField(
model_name="domain",
name="users",
field=models.ManyToManyField(
blank=True, related_name="domains", to="takahe.user"
),
),
migrations.CreateModel(
name="Block",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("state", models.CharField(default="new", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
("uri", models.CharField(blank=True, max_length=500, null=True)),
("mute", models.BooleanField()),
("include_notifications", models.BooleanField(default=False)),
("expires", models.DateTimeField(blank=True, null=True)),
("note", models.TextField(blank=True, null=True)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
(
"source",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="outbound_blocks",
to="takahe.identity",
),
),
(
"target",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="inbound_blocks",
to="takahe.identity",
),
),
],
options={
"db_table": "users_block",
},
),
migrations.CreateModel(
name="Announcement",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("text", models.TextField()),
("published", models.BooleanField(default=False)),
("start", models.DateTimeField(blank=True, null=True)),
("end", models.DateTimeField(blank=True, null=True)),
("include_unauthenticated", models.BooleanField(default=False)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
("seen", models.ManyToManyField(blank=True, to="takahe.user")),
],
options={
"db_table": "users_announcement",
},
),
migrations.CreateModel(
name="TimelineEvent",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"type",
models.CharField(
choices=[
("post", "Post"),
("boost", "Boost"),
("mentioned", "Mentioned"),
("liked", "Liked"),
("followed", "Followed"),
("follow_requested", "Follow Requested"),
("boosted", "Boosted"),
("announcement", "Announcement"),
("identity_created", "Identity Created"),
],
max_length=100,
),
),
("published", models.DateTimeField(default=django.utils.timezone.now)),
("seen", models.BooleanField(default=False)),
("dismissed", models.BooleanField(default=False)),
("created", models.DateTimeField(auto_now_add=True)),
(
"identity",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="timeline_events",
to="takahe.identity",
),
),
(
"subject_identity",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="timeline_events_about_us",
to="takahe.identity",
),
),
(
"subject_post",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="timeline_events",
to="takahe.post",
),
),
(
"subject_post_interaction",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="timeline_events",
to="takahe.postinteraction",
),
),
],
options={
"db_table": "activities_timelineevent",
"indexes": [
models.Index(
fields=["identity", "type", "subject_post", "subject_identity"],
name="activities__identit_0b93c3_idx",
),
models.Index(
fields=["identity", "type", "subject_identity"],
name="activities__identit_cc2290_idx",
),
models.Index(
fields=["identity", "created"],
name="activities__identit_872fbb_idx",
),
],
},
),
migrations.AlterUniqueTogether(
name="identity",
unique_together={("username", "domain")},
),
migrations.CreateModel(
name="Follow",
fields=[
(
"id",
models.BigIntegerField(
default=takahe.models.Snowflake.generate_follow,
primary_key=True,
serialize=False,
),
),
(
"boosts",
models.BooleanField(
default=True, help_text="Also follow boosts from this user"
),
),
("uri", models.CharField(blank=True, max_length=500, null=True)),
("note", models.TextField(blank=True, null=True)),
("state", models.CharField(default="unrequested", max_length=100)),
("state_changed", models.DateTimeField(auto_now_add=True)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
(
"source",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="outbound_follows",
to="takahe.identity",
),
),
(
"target",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="inbound_follows",
to="takahe.identity",
),
),
],
options={
"db_table": "users_follow",
"unique_together": {("source", "target")},
},
),
migrations.CreateModel(
name="Config",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("key", models.CharField(max_length=500)),
("json", models.JSONField(blank=True, null=True)),
("image", models.ImageField(blank=True, null=True, upload_to="")),
(
"domain",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="configs",
to="takahe.domain",
),
),
(
"identity",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="configs",
to="takahe.identity",
),
),
(
"user",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="configs",
to="takahe.user",
),
),
],
options={
"db_table": "core_config",
"unique_together": {("key", "user", "identity", "domain")},
},
),
]