"""Add an independent private directory per user, retaining legacy files.""" from django.conf import settings from django.db import migrations, models import django.db.models.deletion import uuid def provision_private_spaces(apps, schema_editor): Space = apps.get_model('drive','DriveSpace') # The previous shared spaces and their files remain intact. No path changes. for shared in Space.objects.filter(user__isnull=False).order_by('pk'): if Space.objects.filter(private_owner_id=shared.user_id).exists(): continue private = Space.objects.create( user_id=None, private_owner_id=shared.user_id, parent_id=shared.pk, relative_path=f'pending/{uuid.uuid4().hex}', display_name='Mes fichiers') private.directory_name=f'{private.pk-1:04d}' private.relative_path=f'{shared.relative_path}/{private.directory_name}' private.save(update_fields=['directory_name','relative_path']) class Migration(migrations.Migration): dependencies = [('drive','0006_merge_20261013_2159'), migrations.swappable_dependency(settings.AUTH_USER_MODEL)] operations = [ migrations.AlterField(model_name='drivespace',name='user',field=models.OneToOneField( to=settings.AUTH_USER_MODEL,on_delete=django.db.models.deletion.PROTECT, related_name='drive_space',null=True,blank=True)), migrations.AddField(model_name='drivespace',name='private_owner',field=models.OneToOneField( to=settings.AUTH_USER_MODEL,on_delete=django.db.models.deletion.PROTECT, related_name='private_drive_space',null=True,blank=True)), migrations.CreateModel(name='SpaceGrant',fields=[ ('id',models.BigAutoField(primary_key=True,serialize=False)), ('can_write',models.BooleanField(default=False)), ('can_invite',models.BooleanField(default=False)), ('created_at',models.DateTimeField(auto_now_add=True)), ('user',models.ForeignKey(to=settings.AUTH_USER_MODEL,on_delete=django.db.models.deletion.CASCADE,related_name='granted_spaces')), ('space',models.ForeignKey(to='drive.drivespace',on_delete=django.db.models.deletion.CASCADE,related_name='access_grants')), ],options={'constraints':[models.UniqueConstraint(fields=['user','space'],name='drive_unique_space_grant')]}), migrations.RunPython(provision_private_spaces,migrations.RunPython.noop), ]