GooDrive/backend/drive/migrations/0007_private_and_direct_access.py
Louis Mazin ac44c6ed8b nice
2026-10-13 23:47:19 +02:00

42 lines
2.4 KiB
Python

"""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),
]