# Generated by Django 5.0.9 on 2026-08-09 17:00 import apps.library.models import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='LibraryItem', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('file', models.FileField(upload_to=apps.library.models.library_upload_path)), ('media_type', models.CharField(choices=[('photo', 'Photo'), ('video', 'Video')], max_length=10)), ('original_filename', models.CharField(max_length=255)), ('file_size', models.PositiveBigIntegerField(default=0)), ('width', models.PositiveIntegerField(blank=True, null=True)), ('height', models.PositiveIntegerField(blank=True, null=True)), ('duration_seconds', models.FloatField(blank=True, null=True)), ('captured_at', models.DateTimeField(blank=True, null=True)), ('latitude', models.DecimalField(blank=True, decimal_places=6, max_digits=9, null=True)), ('longitude', models.DecimalField(blank=True, decimal_places=6, max_digits=9, null=True)), ('camera_make', models.CharField(blank=True, max_length=100)), ('camera_model', models.CharField(blank=True, max_length=100)), ('checksum', models.CharField(db_index=True, help_text='sha256 of the original file, used for dedup', max_length=64)), ('processing_status', models.CharField(choices=[('pending', 'Pending'), ('processing', 'Processing'), ('ready', 'Ready'), ('failed', 'Failed')], default='pending', max_length=12)), ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='library_items', to=settings.AUTH_USER_MODEL)), ], options={ 'ordering': ['-captured_at', '-created_at'], 'unique_together': {('owner', 'checksum')}, }, ), migrations.CreateModel( name='Album', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('name', models.CharField(max_length=150)), ('description', models.TextField(blank=True)), ('audience', models.CharField(choices=[('public', 'Public'), ('followers', 'Followers'), ('friends', 'Friends'), ('family', 'Family'), ('custom', 'Custom'), ('only_me', 'Only Me')], default='only_me', max_length=10)), ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='albums', to=settings.AUTH_USER_MODEL)), ('cover_item', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='library.libraryitem')), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='AlbumCollaborator', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('role', models.CharField(choices=[('viewer', 'Viewer'), ('contributor', 'Contributor'), ('admin', 'Admin')], default='viewer', max_length=11)), ('status', models.CharField(choices=[('pending', 'Pending'), ('accepted', 'Accepted')], default='pending', max_length=8)), ('album', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='collaborators', to='library.album')), ('invited_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='album_invites', to=settings.AUTH_USER_MODEL)), ], options={ 'unique_together': {('album', 'user')}, }, ), migrations.CreateModel( name='AlbumItem', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('added_at', models.DateTimeField(auto_now_add=True)), ('added_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)), ('album', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='library.album')), ('library_item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='album_items', to='library.libraryitem')), ], options={ 'ordering': ['-added_at'], 'unique_together': {('album', 'library_item')}, }, ), migrations.CreateModel( name='MediaRendition', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('kind', models.CharField(choices=[('thumbnail', 'Thumbnail'), ('feed', 'Feed'), ('large', 'Large / Fullscreen')], max_length=10)), ('file', models.FileField(upload_to=apps.library.models.rendition_upload_path)), ('width', models.PositiveIntegerField()), ('height', models.PositiveIntegerField()), ('created_at', models.DateTimeField(auto_now_add=True)), ('library_item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='renditions', to='library.libraryitem')), ], options={ 'unique_together': {('library_item', 'kind')}, }, ), ]