diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..4c75305 --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,60 @@ +# Generated by Django 4.2.6 on 2023-10-17 19:26 + +import uuid + +import django.contrib.auth.models +import django.contrib.auth.validators +import django.db.models.deletion +import django.utils.timezone +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + 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')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), + ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('stripe_id', models.CharField(blank=True, max_length=255, null=True)), + ('customer_id', models.UUIDField(blank=True, default=uuid.uuid4, null=True)), + ('billing_provider_id', models.CharField(blank=True, max_length=255, null=True)), + ('email', models.EmailField(max_length=254, unique=True)), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + 'abstract': False, + }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], + ), + migrations.CreateModel( + name='NotificationSettings', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ntfy_topic', models.CharField(blank=True, max_length=255, null=True)), + ('ntfy_url', models.CharField(blank=True, max_length=255, null=True)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/core/migrations/0002_chat.py b/core/migrations/0002_chat.py new file mode 100644 index 0000000..5bdabdc --- /dev/null +++ b/core/migrations/0002_chat.py @@ -0,0 +1,23 @@ +# Generated by Django 5.1.5 on 2025-02-05 20:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Chat', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('source_number', models.CharField(blank=True, max_length=32, null=True)), + ('source_uuid', models.CharField(blank=True, max_length=255, null=True)), + ('account', models.CharField(blank=True, max_length=32, null=True)), + ('ts', models.DateTimeField()), + ], + ), + ] diff --git a/core/migrations/0003_remove_chat_ts.py b/core/migrations/0003_remove_chat_ts.py new file mode 100644 index 0000000..dd654b6 --- /dev/null +++ b/core/migrations/0003_remove_chat_ts.py @@ -0,0 +1,17 @@ +# Generated by Django 5.1.5 on 2025-02-05 21:02 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0002_chat'), + ] + + operations = [ + migrations.RemoveField( + model_name='chat', + name='ts', + ), + ] diff --git a/core/migrations/0004_chat_source_name.py b/core/migrations/0004_chat_source_name.py new file mode 100644 index 0000000..ff4c92e --- /dev/null +++ b/core/migrations/0004_chat_source_name.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.5 on 2025-02-05 21:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0003_remove_chat_ts'), + ] + + operations = [ + migrations.AddField( + model_name='chat', + name='source_name', + field=models.CharField(blank=True, max_length=255, null=True), + ), + ] diff --git a/core/migrations/0005_ai_person_group_persona_manipulation_and_more.py b/core/migrations/0005_ai_person_group_persona_manipulation_and_more.py new file mode 100644 index 0000000..c0d8ea7 --- /dev/null +++ b/core/migrations/0005_ai_person_group_persona_manipulation_and_more.py @@ -0,0 +1,100 @@ +# Generated by Django 5.1.5 on 2025-02-06 21:57 + +import django.db.models.deletion +import uuid +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0004_chat_source_name'), + ] + + operations = [ + migrations.CreateModel( + name='AI', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('base_url', models.CharField(blank=True, max_length=255, null=True)), + ('api_key', models.CharField(blank=True, max_length=255, null=True)), + ('model', models.CharField(choices=[('GPT 4o Mini', 'gpt-4o-mini'), ('GPT 4o', 'gpt-4o')], max_length=255)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Person', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=255)), + ('summary', models.TextField()), + ('profile', models.TextField()), + ('revealed', models.TextField()), + ('dislikes', models.TextField(blank=True, null=True)), + ('likes', models.TextField(blank=True, null=True)), + ('sentiment', models.FloatField(default=0.0)), + ('timezone', models.CharField(blank=True, max_length=50, null=True)), + ('last_interaction', models.DateTimeField(blank=True, null=True)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Group', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=255)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('people', models.ManyToManyField(to='core.person')), + ], + ), + migrations.CreateModel( + name='Persona', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('alias', models.CharField(blank=True, max_length=255, null=True)), + ('mbti', models.CharField(blank=True, choices=[('INTJ', 'INTJ - Architect'), ('INTP', 'INTP - Logician'), ('ENTJ', 'ENTJ - Commander'), ('ENTP', 'ENTP - Debater'), ('INFJ', 'INFJ - Advocate'), ('INFP', 'INFP - Mediator'), ('ENFJ', 'ENFJ - Protagonist'), ('ENFP', 'ENFP - Campaigner'), ('ISTJ', 'ISTJ - Logistician'), ('ISFJ', 'ISFJ - Defender'), ('ESTJ', 'ESTJ - Executive'), ('ESFJ', 'ESFJ - Consul'), ('ISTP', 'ISTP - Virtuoso'), ('ISFP', 'ISFP - Adventurer'), ('ESTP', 'ESTP - Entrepreneur'), ('ESFP', 'ESFP - Entertainer')], max_length=255, null=True)), + ('mbti_identity', models.FloatField(default=0.0)), + ('inner_story', models.TextField(blank=True, null=True)), + ('core_values', models.TextField(blank=True, null=True)), + ('communication_style', models.TextField(blank=True, null=True)), + ('flirting_style', models.TextField(blank=True, null=True)), + ('humor_style', models.CharField(blank=True, choices=[('dry', 'Dry'), ('dark', 'Dark'), ('playful', 'Playful'), ('teasing', 'Teasing'), ('sarcastic', 'Sarcastic'), ('intellectual', 'Intellectual')], max_length=50, null=True)), + ('likes', models.TextField(blank=True, null=True)), + ('dislikes', models.TextField(blank=True, null=True)), + ('tone', models.CharField(blank=True, choices=[('formal', 'Formal'), ('casual', 'Casual'), ('witty', 'Witty'), ('serious', 'Serious'), ('warm', 'Warm'), ('detached', 'Detached')], max_length=50, null=True)), + ('response_tactics', models.TextField(blank=True, null=True)), + ('persuasion_tactics', models.TextField(blank=True, null=True)), + ('boundaries', models.TextField(blank=True, null=True)), + ('trust', models.IntegerField(default=50)), + ('adaptability', models.IntegerField(default=70)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Manipulation', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=255)), + ('enabled', models.BooleanField(default=False)), + ('ai', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='core.ai')), + ('group', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='core.group')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('persona', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='core.persona')), + ], + ), + migrations.CreateModel( + name='PersonIdentifier', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('identifier', models.CharField(max_length=255)), + ('service', models.CharField(choices=[('signal', 'Signal'), ('instagram', 'Instagram')], max_length=255)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.AddField( + model_name='person', + name='identifiers', + field=models.ManyToManyField(to='core.personidentifier'), + ), + ] diff --git a/core/migrations/0006_remove_person_identifiers_personidentifier_person_and_more.py b/core/migrations/0006_remove_person_identifiers_personidentifier_person_and_more.py new file mode 100644 index 0000000..93f1736 --- /dev/null +++ b/core/migrations/0006_remove_person_identifiers_personidentifier_person_and_more.py @@ -0,0 +1,34 @@ +# Generated by Django 5.1.5 on 2025-02-07 00:00 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0005_ai_person_group_persona_manipulation_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='person', + name='identifiers', + ), + migrations.AddField( + model_name='personidentifier', + name='person', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='core.person'), + preserve_default=False, + ), + migrations.AlterField( + model_name='ai', + name='model', + field=models.CharField(choices=[('gpt-4o-mini', 'GPT 4o Mini'), ('gpt-4o', 'GPT 4o')], max_length=255), + ), + migrations.AlterField( + model_name='person', + name='revealed', + field=models.TextField(blank=True, null=True), + ), + ] diff --git a/core/migrations/0007_manipulation_send_enabled.py b/core/migrations/0007_manipulation_send_enabled.py new file mode 100644 index 0000000..e4daa41 --- /dev/null +++ b/core/migrations/0007_manipulation_send_enabled.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.5 on 2025-02-07 00:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0006_remove_person_identifiers_personidentifier_person_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='manipulation', + name='send_enabled', + field=models.BooleanField(default=False, help_text='sss'), + ), + ] diff --git a/core/migrations/0008_alter_ai_user_alter_group_user_and_more.py b/core/migrations/0008_alter_ai_user_alter_group_user_and_more.py new file mode 100644 index 0000000..25e4be1 --- /dev/null +++ b/core/migrations/0008_alter_ai_user_alter_group_user_and_more.py @@ -0,0 +1,61 @@ +# Generated by Django 5.1.5 on 2025-02-07 12:05 + +import django.db.models.deletion +import uuid +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0007_manipulation_send_enabled'), + ] + + operations = [ + migrations.AlterField( + model_name='ai', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='group', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='manipulation', + name='send_enabled', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='manipulation', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='person', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='persona', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='personidentifier', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.CreateModel( + name='ChatSession', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('last_interaction', models.DateTimeField(auto_now=True)), + ('summary', models.TextField(blank=True, null=True)), + ('identifier', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='core.personidentifier')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/core/migrations/0009_alter_chatsession_identifier_alter_manipulation_ai_and_more.py b/core/migrations/0009_alter_chatsession_identifier_alter_manipulation_ai_and_more.py new file mode 100644 index 0000000..0ba521c --- /dev/null +++ b/core/migrations/0009_alter_chatsession_identifier_alter_manipulation_ai_and_more.py @@ -0,0 +1,48 @@ +# Generated by Django 5.1.5 on 2025-02-07 13:56 + +import django.db.models.deletion +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0008_alter_ai_user_alter_group_user_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='chatsession', + name='identifier', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.personidentifier'), + ), + migrations.AlterField( + model_name='manipulation', + name='ai', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.ai'), + ), + migrations.AlterField( + model_name='manipulation', + name='group', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.group'), + ), + migrations.AlterField( + model_name='manipulation', + name='persona', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.persona'), + ), + migrations.CreateModel( + name='Message', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('ts', models.BigIntegerField()), + ('sender_uuid', models.CharField(max_length=255)), + ('text', models.TextField(blank=True, null=True)), + ('session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.chatsession')), + ], + options={ + 'ordering': ['ts'], + }, + ), + ] diff --git a/core/migrations/0010_message_custom_author_alter_message_sender_uuid_and_more.py b/core/migrations/0010_message_custom_author_alter_message_sender_uuid_and_more.py new file mode 100644 index 0000000..3808aab --- /dev/null +++ b/core/migrations/0010_message_custom_author_alter_message_sender_uuid_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 5.1.5 on 2025-02-07 17:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0009_alter_chatsession_identifier_alter_manipulation_ai_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='message', + name='custom_author', + field=models.CharField(blank=True, max_length=255, null=True), + ), + migrations.AlterField( + model_name='message', + name='sender_uuid', + field=models.CharField(blank=True, max_length=255, null=True), + ), + migrations.AlterField( + model_name='person', + name='profile', + field=models.TextField(blank=True, null=True), + ), + migrations.AlterField( + model_name='person', + name='summary', + field=models.TextField(blank=True, null=True), + ), + ] diff --git a/core/migrations/0011_message_user.py b/core/migrations/0011_message_user.py new file mode 100644 index 0000000..5650efd --- /dev/null +++ b/core/migrations/0011_message_user.py @@ -0,0 +1,21 @@ +# Generated by Django 5.1.5 on 2025-02-07 18:11 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0010_message_custom_author_alter_message_sender_uuid_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='message', + name='user', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + preserve_default=False, + ), + ] diff --git a/core/migrations/__init__.py b/core/migrations/__init__.py new file mode 100644 index 0000000..e69de29