diff --git a/secrets b/secrets index 764f47f1..35ec1ef9 160000 --- a/secrets +++ b/secrets @@ -1 +1 @@ -Subproject commit 764f47f1e3bb3b0bb3d79ec5831045c05c32c590 +Subproject commit 35ec1ef9fe31c578c661a10ac71fca2f2af8961e diff --git a/src/backend/core/migrations/0001_initial.py b/src/backend/core/migrations/0001_initial.py index 13d21fe9..060b9f40 100644 --- a/src/backend/core/migrations/0001_initial.py +++ b/src/backend/core/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.3 on 2024-05-28 20:29 +# Generated by Django 5.0.3 on 2024-07-16 15:30 import django.contrib.auth.models import django.core.validators @@ -19,38 +19,17 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='Document', + name='Resource', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='primary key for the record as UUID', primary_key=True, serialize=False, verbose_name='id')), ('created_at', models.DateTimeField(auto_now_add=True, help_text='date and time at which a record was created', verbose_name='created on')), ('updated_at', models.DateTimeField(auto_now=True, help_text='date and time at which a record was last updated', verbose_name='updated on')), - ('title', models.CharField(max_length=255, verbose_name='title')), - ('is_public', models.BooleanField(default=False, help_text='Whether this document is public for anyone to use.', verbose_name='public')), + ('is_public', models.BooleanField(default=True)), ], options={ - 'verbose_name': 'Document', - 'verbose_name_plural': 'Documents', - 'db_table': 'meet_document', - 'ordering': ('title',), - }, - ), - migrations.CreateModel( - name='Template', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='primary key for the record as UUID', primary_key=True, serialize=False, verbose_name='id')), - ('created_at', models.DateTimeField(auto_now_add=True, help_text='date and time at which a record was created', verbose_name='created on')), - ('updated_at', models.DateTimeField(auto_now=True, help_text='date and time at which a record was last updated', verbose_name='updated on')), - ('title', models.CharField(max_length=255, verbose_name='title')), - ('description', models.TextField(blank=True, verbose_name='description')), - ('code', models.TextField(blank=True, verbose_name='code')), - ('css', models.TextField(blank=True, verbose_name='css')), - ('is_public', models.BooleanField(default=False, help_text='Whether this template is public for anyone to use.', verbose_name='public')), - ], - options={ - 'verbose_name': 'Template', - 'verbose_name_plural': 'Templates', - 'db_table': 'meet_template', - 'ordering': ('title',), + 'verbose_name': 'Resource', + 'verbose_name_plural': 'Resources', + 'db_table': 'meet_resource', }, ), migrations.CreateModel( @@ -83,84 +62,44 @@ class Migration(migrations.Migration): ], ), migrations.CreateModel( - name='DocumentAccess', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='primary key for the record as UUID', primary_key=True, serialize=False, verbose_name='id')), - ('created_at', models.DateTimeField(auto_now_add=True, help_text='date and time at which a record was created', verbose_name='created on')), - ('updated_at', models.DateTimeField(auto_now=True, help_text='date and time at which a record was last updated', verbose_name='updated on')), - ('team', models.CharField(blank=True, max_length=100)), - ('role', models.CharField(choices=[('reader', 'Reader'), ('editor', 'Editor'), ('administrator', 'Administrator'), ('owner', 'Owner')], default='reader', max_length=20)), - ('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='accesses', to='core.document')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'Document/user relation', - 'verbose_name_plural': 'Document/user relations', - 'db_table': 'meet_document_access', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='Invitation', + name='Room', fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='primary key for the record as UUID', primary_key=True, serialize=False, verbose_name='id')), - ('created_at', models.DateTimeField(auto_now_add=True, help_text='date and time at which a record was created', verbose_name='created on')), - ('updated_at', models.DateTimeField(auto_now=True, help_text='date and time at which a record was last updated', verbose_name='updated on')), - ('email', models.EmailField(max_length=254, verbose_name='email address')), - ('role', models.CharField(choices=[('reader', 'Reader'), ('editor', 'Editor'), ('administrator', 'Administrator'), ('owner', 'Owner')], default='reader', max_length=20)), - ('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invitations', to='core.document')), - ('issuer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invitations', to=settings.AUTH_USER_MODEL)), + ('name', models.CharField(max_length=500)), + ('resource', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.resource')), + ('slug', models.SlugField(blank=True, max_length=100, null=True, unique=True)), + ('configuration', models.JSONField(blank=True, default={}, help_text='Values for Visio parameters to configure the room.', verbose_name='Visio room configuration')), ], options={ - 'verbose_name': 'Document invitation', - 'verbose_name_plural': 'Document invitations', - 'db_table': 'meet_invitation', + 'verbose_name': 'Room', + 'verbose_name_plural': 'Rooms', + 'db_table': 'meet_room', + 'ordering': ('name',), }, + bases=('core.resource',), ), migrations.CreateModel( - name='TemplateAccess', + name='ResourceAccess', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='primary key for the record as UUID', primary_key=True, serialize=False, verbose_name='id')), ('created_at', models.DateTimeField(auto_now_add=True, help_text='date and time at which a record was created', verbose_name='created on')), ('updated_at', models.DateTimeField(auto_now=True, help_text='date and time at which a record was last updated', verbose_name='updated on')), - ('team', models.CharField(blank=True, max_length=100)), - ('role', models.CharField(choices=[('reader', 'Reader'), ('editor', 'Editor'), ('administrator', 'Administrator'), ('owner', 'Owner')], default='reader', max_length=20)), - ('template', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='accesses', to='core.template')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('role', models.CharField(choices=[('member', 'Member'), ('administrator', 'Administrator'), ('owner', 'Owner')], default='member', max_length=20)), + ('resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='accesses', to='core.resource')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='accesses', to=settings.AUTH_USER_MODEL)), ], options={ - 'verbose_name': 'Template/user relation', - 'verbose_name_plural': 'Template/user relations', - 'db_table': 'meet_template_access', - 'ordering': ('-created_at',), + 'verbose_name': 'Resource access', + 'verbose_name_plural': 'Resource accesses', + 'db_table': 'meet_resource_access', }, ), - migrations.AddConstraint( - model_name='documentaccess', - constraint=models.UniqueConstraint(condition=models.Q(('user__isnull', False)), fields=('user', 'document'), name='unique_document_user', violation_error_message='This user is already in this document.'), - ), - migrations.AddConstraint( - model_name='documentaccess', - constraint=models.UniqueConstraint(condition=models.Q(('team__gt', '')), fields=('team', 'document'), name='unique_document_team', violation_error_message='This team is already in this document.'), - ), - migrations.AddConstraint( - model_name='documentaccess', - constraint=models.CheckConstraint(check=models.Q(models.Q(('team', ''), ('user__isnull', False)), models.Q(('team__gt', ''), ('user__isnull', True)), _connector='OR'), name='check_document_access_either_user_or_team', violation_error_message='Either user or team must be set, not both.'), - ), - migrations.AddConstraint( - model_name='invitation', - constraint=models.UniqueConstraint(fields=('email', 'document'), name='email_and_document_unique_together'), - ), - migrations.AddConstraint( - model_name='templateaccess', - constraint=models.UniqueConstraint(condition=models.Q(('user__isnull', False)), fields=('user', 'template'), name='unique_template_user', violation_error_message='This user is already in this template.'), - ), - migrations.AddConstraint( - model_name='templateaccess', - constraint=models.UniqueConstraint(condition=models.Q(('team__gt', '')), fields=('team', 'template'), name='unique_template_team', violation_error_message='This team is already in this template.'), + migrations.AddField( + model_name='resource', + name='users', + field=models.ManyToManyField(related_name='resources', through='core.ResourceAccess', to=settings.AUTH_USER_MODEL), ), migrations.AddConstraint( - model_name='templateaccess', - constraint=models.CheckConstraint(check=models.Q(models.Q(('team', ''), ('user__isnull', False)), models.Q(('team__gt', ''), ('user__isnull', True)), _connector='OR'), name='check_template_access_either_user_or_team', violation_error_message='Either user or team must be set, not both.'), + model_name='resourceaccess', + constraint=models.UniqueConstraint(fields=('user', 'resource'), name='resource_access_unique_user_resource', violation_error_message='Resource access with this User and Resource already exists.'), ), ] diff --git a/src/backend/core/migrations/0003_resource_remove_documentaccess_document_and_more.py b/src/backend/core/migrations/0003_resource_remove_documentaccess_document_and_more.py deleted file mode 100644 index 9d494208..00000000 --- a/src/backend/core/migrations/0003_resource_remove_documentaccess_document_and_more.py +++ /dev/null @@ -1,115 +0,0 @@ -# Generated by Django 5.0.3 on 2024-06-24 15:37 - -import django.db.models.deletion -import uuid -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0002_create_pg_trgm_extension'), - ] - - operations = [ - migrations.CreateModel( - name='Resource', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='primary key for the record as UUID', primary_key=True, serialize=False, verbose_name='id')), - ('created_at', models.DateTimeField(auto_now_add=True, help_text='date and time at which a record was created', verbose_name='created on')), - ('updated_at', models.DateTimeField(auto_now=True, help_text='date and time at which a record was last updated', verbose_name='updated on')), - ('is_public', models.BooleanField(default=True)), - ], - options={ - 'verbose_name': 'Resource', - 'verbose_name_plural': 'Resources', - 'db_table': 'meet_resource', - }, - ), - migrations.RemoveField( - model_name='documentaccess', - name='document', - ), - migrations.RemoveField( - model_name='invitation', - name='document', - ), - migrations.RemoveField( - model_name='documentaccess', - name='user', - ), - migrations.RemoveField( - model_name='invitation', - name='issuer', - ), - migrations.RemoveField( - model_name='templateaccess', - name='template', - ), - migrations.RemoveField( - model_name='templateaccess', - name='user', - ), - migrations.AlterField( - model_name='user', - name='language', - field=models.CharField(choices="(('en-us', 'English'), ('fr-fr', 'French'))", default='en-us', help_text='The language in which the user wants to see the interface.', max_length=10, verbose_name='language'), - ), - migrations.CreateModel( - name='Room', - fields=[ - ('name', models.CharField(max_length=500)), - ('resource', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.resource')), - ('slug', models.SlugField(blank=True, max_length=100, null=True, unique=True)), - ('configuration', models.JSONField(blank=True, default={}, help_text='Values for Meet parameters to configure the room.', verbose_name='Meet room configuration')), - ], - options={ - 'verbose_name': 'Room', - 'verbose_name_plural': 'Rooms', - 'db_table': 'meet_room', - 'ordering': ('name',), - }, - bases=('core.resource',), - ), - migrations.CreateModel( - name='ResourceAccess', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='primary key for the record as UUID', primary_key=True, serialize=False, verbose_name='id')), - ('created_at', models.DateTimeField(auto_now_add=True, help_text='date and time at which a record was created', verbose_name='created on')), - ('updated_at', models.DateTimeField(auto_now=True, help_text='date and time at which a record was last updated', verbose_name='updated on')), - ('role', models.CharField(choices=[('member', 'Member'), ('administrator', 'Administrator'), ('owner', 'Owner')], default='member', max_length=20)), - ('resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='accesses', to='core.resource')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='accesses', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'Resource access', - 'verbose_name_plural': 'Resource accesses', - 'db_table': 'meet_resource_access', - }, - ), - migrations.AddField( - model_name='resource', - name='users', - field=models.ManyToManyField(related_name='resources', through='core.ResourceAccess', to=settings.AUTH_USER_MODEL), - ), - migrations.DeleteModel( - name='Document', - ), - migrations.DeleteModel( - name='DocumentAccess', - ), - migrations.DeleteModel( - name='Invitation', - ), - migrations.DeleteModel( - name='Template', - ), - migrations.DeleteModel( - name='TemplateAccess', - ), - migrations.AddConstraint( - model_name='resourceaccess', - constraint=models.UniqueConstraint(fields=('user', 'resource'), name='resource_access_unique_user_resource', violation_error_message='Resource access with this user and resource already exists.'), - ), - ] diff --git a/src/frontend/package.json b/src/frontend/package.json index 058dab22..e0a286d7 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,7 +1,7 @@ { "name": "meet", "private": true, - "version": "0.0.0", + "version": "0.1.0", "type": "module", "scripts": { "dev": "panda codegen && vite", diff --git a/src/helm/env.d/preprod/values.meet.yaml.gotmpl b/src/helm/env.d/preprod/values.meet.yaml.gotmpl index ce70b75a..eb17be0b 100644 --- a/src/helm/env.d/preprod/values.meet.yaml.gotmpl +++ b/src/helm/env.d/preprod/values.meet.yaml.gotmpl @@ -92,7 +92,7 @@ backend: secretKeyRef: name: backend key: LIVEKIT_API_KEY - LIVEKIT_API_URL: https://livekit.beta.numerique.gouv.fr + LIVEKIT_API_URL: https://livekit-docker-1.beta.numerique.gouv.fr createsuperuser: command: diff --git a/src/helm/env.d/production/values.meet.yaml.gotmpl b/src/helm/env.d/production/values.meet.yaml.gotmpl index b2a4e96b..93f593ea 100644 --- a/src/helm/env.d/production/values.meet.yaml.gotmpl +++ b/src/helm/env.d/production/values.meet.yaml.gotmpl @@ -92,7 +92,7 @@ backend: secretKeyRef: name: backend key: LIVEKIT_API_KEY - LIVEKIT_API_URL: https://livekit.beta.numerique.gouv.fr + LIVEKIT_API_URL: https://livekit-docker-1.beta.numerique.gouv.fr createsuperuser: command: diff --git a/src/helm/env.d/staging/values.meet.yaml.gotmpl b/src/helm/env.d/staging/values.meet.yaml.gotmpl index 13748ac2..2a61095a 100644 --- a/src/helm/env.d/staging/values.meet.yaml.gotmpl +++ b/src/helm/env.d/staging/values.meet.yaml.gotmpl @@ -92,7 +92,7 @@ backend: secretKeyRef: name: backend key: LIVEKIT_API_KEY - LIVEKIT_API_URL: https://livekit.beta.numerique.gouv.fr + LIVEKIT_API_URL: https://livekit-docker-1.beta.numerique.gouv.fr createsuperuser: command: