42 lines
2.4 KiB
Python
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),
|
|
]
|