mirror of
https://github.com/seanmorley15/AdventureLog.git
synced 2026-07-31 07:49:07 -04:00
* Add new default light and dark themes to match AdventureLog styles * Allow different theme for site and maps Fixes #1130 * Update settings page to use translation keys for currency and map style descriptions * Add global flag to CollectionItineraryItemSerializer and implement map view persistence in frontend * Update appVersion to v0.12.0-main-052126 * Enhance permissions for shared collections and restrict publicity changes to owners only * Update appVersion to v0.12.1-beta-052126 * Add new localization strings and descriptions for various languages - Updated Spanish (es.json) with new map style and preferred currency descriptions. - Enhanced French (fr.json) with additional details for Strava activities and currency descriptions. - Added new strings in Hungarian (hu.json) for map style and preferred currency. - Included additional details in Italian (it.json) for Strava activities and currency descriptions. - Updated Japanese (ja.json) with new strings for map style and preferred currency. - Enhanced Korean (ko.json) with additional details for Strava activities and currency descriptions. - Added new strings in Dutch (nl.json) for map style and preferred currency. - Updated Norwegian (no.json) with new strings for map style and preferred currency. - Enhanced Polish (pl.json) with additional details for Strava activities and currency descriptions. - Updated Brazilian Portuguese (pt-br.json) with new map style and preferred currency descriptions. - Added new strings in Romanian (ro.json) for additional details and currency descriptions. - Enhanced Russian (ru.json) with new strings for map style and preferred currency. - Updated Slovak (sk.json) with additional details for map style and preferred currency. - Enhanced Swedish (sv.json) with new strings for map style and preferred currency. - Added new strings in Turkish (tr.json) for map style and preferred currency. - Updated Ukrainian (uk.json) with new strings for map style and preferred currency. - Enhanced Chinese (zh.json) with additional details for map style and preferred currency. * feat: Implement cloud billing system with subscription management - Added billing app with models, serializers, views, and admin configuration for Subscription. - Integrated Stripe for payment processing and subscription management. - Created middleware for cloud access control based on user subscriptions. - Developed frontend components for subscription status and billing management. - Updated settings to include cloud mode and Stripe configuration. - Added routes for billing and subscription management in the API. - Implemented user subscription creation and management on user registration and checkout. * feat: Implement media storage limit and usage tracking - Added media storage limit configuration in settings. - Introduced utility functions for managing media storage limits and usage. - Updated models to delete media files using storage backend. - Enhanced serializers to build media URLs dynamically. - Implemented media usage tracking in user views and added endpoint for fetching media usage. - Updated frontend to display media storage usage and limits. - Added translations for media storage related strings in multiple languages. * feat: Implement conditional throttling for various external services and update settings for rate limits
74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
from datetime import timedelta
|
|
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
from django.utils import timezone
|
|
import django.db.models.deletion
|
|
|
|
|
|
def create_subscriptions(apps, schema_editor):
|
|
user_model_label, user_model_name = settings.AUTH_USER_MODEL.split(".")
|
|
User = apps.get_model(user_model_label, user_model_name)
|
|
Subscription = apps.get_model("billing", "Subscription")
|
|
|
|
if getattr(settings, "CLOUD_MODE", False):
|
|
trial_ends_at = timezone.now() + timedelta(days=getattr(settings, "CLOUD_TRIAL_DAYS", 30))
|
|
defaults = {
|
|
"status": "trial",
|
|
"trial_ends_at": trial_ends_at,
|
|
}
|
|
else:
|
|
defaults = {"status": "active", "trial_ends_at": None}
|
|
|
|
for user in User.objects.all():
|
|
Subscription.objects.get_or_create(user=user, defaults=defaults)
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
initial = True
|
|
|
|
dependencies = [
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name="Subscription",
|
|
fields=[
|
|
("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
|
("stripe_customer_id", models.CharField(blank=True, max_length=255)),
|
|
("stripe_subscription_id", models.CharField(blank=True, max_length=255)),
|
|
(
|
|
"status",
|
|
models.CharField(
|
|
choices=[
|
|
("trial", "Trial"),
|
|
("active", "Active"),
|
|
("canceled", "Canceled"),
|
|
("past_due", "Past Due"),
|
|
],
|
|
default="trial",
|
|
max_length=50,
|
|
),
|
|
),
|
|
("trial_ends_at", models.DateTimeField(blank=True, null=True)),
|
|
("current_period_ends_at", models.DateTimeField(blank=True, null=True)),
|
|
("cancel_at_period_end", models.BooleanField(default=False)),
|
|
("created_at", models.DateTimeField(auto_now_add=True)),
|
|
("updated_at", models.DateTimeField(auto_now=True)),
|
|
(
|
|
"user",
|
|
models.OneToOneField(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="subscription",
|
|
to=settings.AUTH_USER_MODEL,
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"ordering": ["-created_at"],
|
|
},
|
|
),
|
|
migrations.RunPython(create_subscriptions, migrations.RunPython.noop),
|
|
]
|