change command for migration of users
This commit is contained in:
parent
3d83c2a3aa
commit
7617981259
|
|
@ -1,6 +1,7 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
from django.db import connections
|
||||
from django.db.models import Q
|
||||
from django.db.models import Q, F, Value
|
||||
from django.db.models.functions import ConcatPair
|
||||
from establishment.management.commands.add_position import namedtuplefetchall
|
||||
from account.models import User
|
||||
|
||||
|
|
@ -11,33 +12,29 @@ class Command(BaseCommand):
|
|||
def account_sql(self):
|
||||
with connections['legacy'].cursor() as cursor:
|
||||
cursor.execute('''
|
||||
select a.email, a.id as account_id, a.encrypted_password
|
||||
select a.email, a.id as account_id, a.encrypted_password,
|
||||
case when a.confirmed_at is not null then true else false end as confirmed_at,
|
||||
case when a.confirmed_at is null then true else false end as unconfirmed_email,
|
||||
nickname
|
||||
from accounts as a
|
||||
where a.email is not null
|
||||
and a.email not in ('cyril@tomatic.net',
|
||||
'cyril2@tomatic.net',
|
||||
'd.sadykova@id-east.ru',
|
||||
'd.sadykova@octopod.ru',
|
||||
'n.yurchenko@id-east.ru'
|
||||
)
|
||||
and a.confirmed_at is not null
|
||||
where a.email is not null and a.nickname!='admin'
|
||||
''')
|
||||
return namedtuplefetchall(cursor)
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
objects = []
|
||||
for a in self.account_sql():
|
||||
count = User.objects.filter(Q(email=a.email) | Q(old_id=a.account_id)).count()
|
||||
if count == 0:
|
||||
users = User.objects.filter(Q(email=a.email) | Q(old_id=a.account_id))
|
||||
if not users.exists():
|
||||
objects.append(User(email=a.email,
|
||||
unconfirmed_email=False,
|
||||
email_confirmed=True,
|
||||
unconfirmed_email=a.unconfirmed_email,
|
||||
email_confirmed=a.confirmed_at,
|
||||
old_id=a.account_id,
|
||||
password='bcrypt$'+a.encrypted_password
|
||||
password=a.encrypted_password,
|
||||
username=a.nickname
|
||||
))
|
||||
else:
|
||||
user = User.objects.filter(Q(email=a.email) | Q(old_id=a.account_id))
|
||||
user.update(password='bcrypt$'+a.encrypted_password)
|
||||
|
||||
User.objects.bulk_create(objects)
|
||||
self.stdout.write(self.style.WARNING(f'Created accounts objects.'))
|
||||
user = User.objects.filter(old_id__isnull=False)
|
||||
user.update(password=ConcatPair(Value('bcrypt$'), F('password')))
|
||||
self.stdout.write(self.style.WARNING(f'Created accounts objects.'))
|
||||
|
|
|
|||
|
|
@ -20,14 +20,7 @@ class Command(BaseCommand):
|
|||
(
|
||||
select a.email, a.id as account_id
|
||||
from accounts as a
|
||||
where a.email is not null
|
||||
and a.email not in ('cyril@tomatic.net',
|
||||
'cyril2@tomatic.net',
|
||||
'd.sadykova@id-east.ru',
|
||||
'd.sadykova@octopod.ru',
|
||||
'n.yurchenko@id-east.ru'
|
||||
)
|
||||
and a.confirmed_at is not null
|
||||
where a.email is not null
|
||||
) t
|
||||
join identities i on i.account_id = t.account_id
|
||||
''')
|
||||
|
|
@ -39,13 +32,12 @@ class Command(BaseCommand):
|
|||
user = User.objects.filter(old_id=s.account_id)
|
||||
if user.count() > 0:
|
||||
social = UserSocialAuth.objects.filter(user=user.first(),
|
||||
provider=s.provider,
|
||||
uid=s.uid)
|
||||
provider=s.provider,
|
||||
uid=s.uid)
|
||||
if social.count() == 0:
|
||||
objects.append(UserSocialAuth(user=user.first(), provider=s.provider,
|
||||
uid=s.uid)
|
||||
)
|
||||
print('INSERT')
|
||||
)
|
||||
|
||||
UserSocialAuth.objects.bulk_create(objects)
|
||||
self.stdout.write(self.style.WARNING(f'Created social objects.'))
|
||||
|
|
@ -7,11 +7,11 @@ from transfer.serializers.account import UserSerializer
|
|||
from transfer.serializers.user_social_auth import UserSocialAuthSerializer
|
||||
|
||||
STOP_LIST = (
|
||||
'cyril@tomatic.net',
|
||||
'cyril2@tomatic.net',
|
||||
'd.sadykova@id-east.ru',
|
||||
'd.sadykova@octopod.ru',
|
||||
'n.yurchenko@id-east.ru',
|
||||
# 'cyril@tomatic.net',
|
||||
# 'cyril2@tomatic.net',
|
||||
# 'd.sadykova@id-east.ru',
|
||||
# 'd.sadykova@octopod.ru',
|
||||
# 'n.yurchenko@id-east.ru',
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -20,7 +20,7 @@ def transfer_user():
|
|||
# queryset = queryset.annotate(nickname=F('account__nickname'))
|
||||
# queryset = queryset.annotate(email=F('account__email'))
|
||||
|
||||
queryset = Accounts.objects.filter(confirmed_at__isnull=False).exclude(email__in=STOP_LIST)
|
||||
queryset = Accounts.objects.exclude(email__in=STOP_LIST)
|
||||
|
||||
serialized_data = UserSerializer(data=list(queryset.values()), many=True)
|
||||
|
||||
|
|
@ -33,7 +33,7 @@ def transfer_user():
|
|||
def transfer_identities():
|
||||
queryset = Identities.objects.exclude(
|
||||
Q(account_id__isnull=True) |
|
||||
Q(account__confirmed_at__isnull=True) |
|
||||
# Q(account__confirmed_at__isnull=True) |
|
||||
Q(account__email__in=STOP_LIST)
|
||||
).values_list(
|
||||
'account_id',
|
||||
|
|
|
|||
9
apps/collection/serializers/back.py
Normal file
9
apps/collection/serializers/back.py
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
from rest_framework import serializers
|
||||
from collection import models
|
||||
|
||||
|
||||
class CollectionSerializer(serializers.ModelSerializer):
|
||||
"""Collection serializer."""
|
||||
class Meta:
|
||||
model = models.Collection.objects.all()
|
||||
fields = '__all__'
|
||||
11
apps/collection/urls/back.py
Normal file
11
apps/collection/urls/back.py
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
"""Collection common urlpaths."""
|
||||
from django.urls import path
|
||||
|
||||
from collection.views import back as views
|
||||
|
||||
app_name = 'collection'
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.CollectionListCreateView.as_view(), name='list-create'),
|
||||
|
||||
]
|
||||
19
apps/collection/views/back.py
Normal file
19
apps/collection/views/back.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
from rest_framework import generics, permissions
|
||||
from collection import models
|
||||
from collection.serializers import common, back
|
||||
|
||||
|
||||
class CollectionListCreateView(generics.ListCreateAPIView):
|
||||
"""Collection list-create view."""
|
||||
queryset = models.Collection.objects.all()
|
||||
serializer_class = back.CollectionSerializer
|
||||
# todo: conf. permissions by TT
|
||||
permission_classes = (permissions.IsAuthenticated, )
|
||||
|
||||
|
||||
class CollectionRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""Collection list-create view."""
|
||||
queryset = models.Collection.objects.all()
|
||||
serializer_class = back.CollectionSerializer
|
||||
# todo: conf. permissions by TT
|
||||
permission_classes = (permissions.IsAuthenticated, )
|
||||
|
|
@ -12,11 +12,12 @@ from transfer.serializers.plate import PlateSerializer
|
|||
def transfer_establishment():
|
||||
result = []
|
||||
|
||||
# todo: filter(location__city__name__icontains='paris')
|
||||
old_establishments = Establishments.objects.exclude(
|
||||
id__in=list(Establishment.objects.all().values_list('old_id', flat=True))
|
||||
).exclude(
|
||||
Q(type='Wineyard') |
|
||||
# Q(type='Wineyard') |
|
||||
Q(type='Restaurant') |
|
||||
Q(type='Shop') |
|
||||
Q(location__timezone__isnull=True),
|
||||
).prefetch_related(
|
||||
'establishmentinfos_set',
|
||||
|
|
@ -28,7 +29,7 @@ def transfer_establishment():
|
|||
data = {
|
||||
'old_id': item.id,
|
||||
'name': item.name,
|
||||
'name_translated': item.index_name,
|
||||
'transliterated_name': item.index_name,
|
||||
'slug': item.slug,
|
||||
'type': item.type,
|
||||
'phone': item.phone,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ from account.models import User
|
|||
class UserSerializer(serializers.ModelSerializer):
|
||||
nickname = serializers.CharField()
|
||||
email = serializers.CharField()
|
||||
confirmed_at = serializers.DateTimeField()
|
||||
confirmed_at = serializers.DateTimeField(allow_null=True)
|
||||
id = serializers.CharField()
|
||||
|
||||
class Meta:
|
||||
|
|
@ -30,8 +30,11 @@ class UserSerializer(serializers.ModelSerializer):
|
|||
# использовать get_or_create
|
||||
User.objects.create(**validated_data)
|
||||
|
||||
def get_email_confirmed(self, obj):
|
||||
return True
|
||||
def get_email_confirmed(self, data):
|
||||
if data.get("confirmed_at"):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def get_username(self, obj):
|
||||
return obj["email"]
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ class EstablishmentSerializer(serializers.ModelSerializer):
|
|||
'created',
|
||||
'old_id', # +
|
||||
'name', # +
|
||||
'name_translated', # +
|
||||
'transliterated_name', # +
|
||||
'tz', # +
|
||||
'website', # +
|
||||
'facebook', # +
|
||||
|
|
@ -101,6 +101,7 @@ class EstablishmentSerializer(serializers.ModelSerializer):
|
|||
types = {
|
||||
'Restaurant': EstablishmentType.RESTAURANT,
|
||||
'Shop': EstablishmentType.ARTISAN,
|
||||
'Wineyard': EstablishmentType.PRODUCER,
|
||||
}
|
||||
obj, _ = EstablishmentType.objects.get_or_create(index_name=types[data['type']])
|
||||
return obj.id
|
||||
|
|
|
|||
|
|
@ -14,8 +14,7 @@ services:
|
|||
volumes:
|
||||
- .:/code
|
||||
- gm-mysql_db:/var/lib/mysql
|
||||
networks:
|
||||
- mysql_network
|
||||
|
||||
|
||||
# PostgreSQL database
|
||||
db:
|
||||
|
|
@ -31,8 +30,7 @@ services:
|
|||
- "5436:5432"
|
||||
volumes:
|
||||
- gm-db:/var/lib/postgresql/data/
|
||||
networks:
|
||||
- database_network
|
||||
|
||||
|
||||
elasticsearch:
|
||||
image: elasticsearch:7.3.1
|
||||
|
|
@ -46,14 +44,12 @@ services:
|
|||
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
||||
- discovery.type=single-node
|
||||
- xpack.security.enabled=false
|
||||
networks:
|
||||
- elasticsearch_network
|
||||
|
||||
|
||||
# Redis
|
||||
redis:
|
||||
image: redis:alpine
|
||||
networks:
|
||||
- redis_network
|
||||
|
||||
|
||||
# Celery
|
||||
worker:
|
||||
|
|
@ -71,8 +67,7 @@ services:
|
|||
links:
|
||||
- db
|
||||
- redis
|
||||
networks:
|
||||
- redis_network
|
||||
|
||||
|
||||
worker_beat:
|
||||
build: .
|
||||
|
|
@ -89,8 +84,7 @@ services:
|
|||
links:
|
||||
- db
|
||||
- redis
|
||||
networks:
|
||||
- redis_network
|
||||
|
||||
|
||||
# App: G&M
|
||||
gm_app:
|
||||
|
|
@ -115,11 +109,7 @@ services:
|
|||
- gm-media:/media-data
|
||||
ports:
|
||||
- "8000:8000"
|
||||
networks:
|
||||
- redis_network
|
||||
- database_network
|
||||
- mysql_network
|
||||
- elasticsearch_network
|
||||
|
||||
|
||||
volumes:
|
||||
gm-mysql_db:
|
||||
|
|
@ -130,12 +120,3 @@ volumes:
|
|||
name: gm-media
|
||||
gm-esdata:
|
||||
|
||||
networks:
|
||||
database_network:
|
||||
driver: bridge
|
||||
mysql_network:
|
||||
driver: bridge
|
||||
elasticsearch_network:
|
||||
driver: bridge
|
||||
redis_network:
|
||||
driver: bridge
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ urlpatterns = [
|
|||
path('account/', include('account.urls.back')),
|
||||
path('comment/', include('comment.urls.back')),
|
||||
path('establishments/', include('establishment.urls.back')),
|
||||
path('collections/', include('collection.urls.back')),
|
||||
path('gallery/', include(('gallery.urls', 'gallery'), namespace='gallery')),
|
||||
path('location/', include('location.urls.back')),
|
||||
path('news/', include('news.urls.back')),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user