Add teams and internationalization

This commit is contained in:
rucki
2026-08-23 14:55:04 +02:00
parent 218d841d7f
commit c409fbc441
26 changed files with 1582 additions and 149 deletions
@@ -0,0 +1,67 @@
# Generated by Django 5.2.17 on 2026-08-23 09:28
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0009_item_kanban_status'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AlterField(
model_name='item',
name='visibility',
field=models.CharField(choices=[('private', 'Privat'), ('team', 'Team'), ('public', 'Öffentlich')], default='private', max_length=10),
),
migrations.CreateModel(
name='Team',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=120)),
('slug', models.SlugField(allow_unicode=True, help_text='Team-Tag ohne #, z.B. my2dos', max_length=80, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='owned_teams', to=settings.AUTH_USER_MODEL)),
],
options={
'ordering': ['name'],
},
),
migrations.AddField(
model_name='item',
name='team',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='items', to='core.team'),
),
migrations.CreateModel(
name='TeamInvite',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.EmailField(blank=True, max_length=254)),
('token', models.CharField(editable=False, max_length=80, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('accepted_at', models.DateTimeField(blank=True, null=True)),
('invited_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sent_team_invites', to=settings.AUTH_USER_MODEL)),
('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invites', to='core.team')),
],
options={
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='TeamMembership',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('role', models.CharField(choices=[('owner', 'Owner'), ('admin', 'Admin'), ('member', 'Mitglied')], default='member', max_length=10)),
('created_at', models.DateTimeField(auto_now_add=True)),
('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='memberships', to='core.team')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='team_memberships', to=settings.AUTH_USER_MODEL)),
],
options={
'unique_together': {('team', 'user')},
},
),
]
@@ -0,0 +1,28 @@
# Generated by Django 5.2.17 on 2026-08-23 12:49
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0010_alter_item_visibility_team_item_team_teaminvite_and_more'),
]
operations = [
migrations.AlterField(
model_name='item',
name='kanban_status',
field=models.CharField(choices=[('inbox', 'Inbox'), ('todo', 'Todo'), ('progress', 'In Progress'), ('done', 'Done')], default='inbox', max_length=20),
),
migrations.AlterField(
model_name='item',
name='kind',
field=models.CharField(choices=[('todo', 'Task'), ('note', 'Note'), ('link', 'Link'), ('journal', 'Journal')], default='note', max_length=10),
),
migrations.AlterField(
model_name='item',
name='visibility',
field=models.CharField(choices=[('private', 'Private'), ('team', 'Team'), ('public', 'Public')], default='private', max_length=10),
),
]