add - sync page & permissions in development with production - v2

This commit is contained in:
2025-11-30 14:57:08 +03:30
parent 634d50c4cd
commit 1383dc9e44

View File

@@ -1,5 +1,3 @@
import json
import requests
from django.db import transaction
from django.db.models import Count
@@ -47,41 +45,54 @@ class UpdatePageAccessViewSet(BaseViewSet, SoftDeleteMixin, viewsets.ModelViewSe
"""
sync update page & access on development version with production
"""
url = 'http://127.0.0.1:8000/auth/api/v1/update_access/'
url = 'https://api.tdam.rasadyar.com/auth/api/v1/update_access/'
# get data page & permissions data from development
req = requests.get(url)
response = json.loads(req.text.encode('utf-8'))
response = req.json()
url = 'http://127.0.0.1:8000/auth/api/v1/update_access/update_access'
url = 'https://api.dam.rasadyar.com/auth/api/v1/update_access/update_page_access/'
updated_response = requests.post(url=url, json=response)
# # delete all pages
# Page.objects.all().delete()
#
# # delete all permissions
# Permissions.objects.all().delete()
#
# # recreate page & permissions
# for page in response:
# page_obj = Page.objects.create(
# name=page['name'],
# code=page['code'],
# is_active=page['is_active']
# )
# for permission in page['permissions']:
# Permissions.objects.create(
# name=permission['name'],
# description=permission['description'],
# category=permission['category'],
# page_id=page_obj.id,
# is_active=permission['is_active'],
# modify_state=permission['modify_state']
# )
#
# return Response(response)
return Response(updated_response.json())
@action(methods=['post'], detail=False, url_name='update_page_access', url_path='update_page_access')
def update_page_access(self, request, *args, **kwargs):
"""
Sync page & permissions in development with production
"""
# if page or permission exists in production, don't create just update
for page in request.data:
page_obj = Page.objects.filter(code=page['code'])
permissions = page.pop('permissions') # remove permissions from data
if not page_obj.exists():
page_obj = Page.objects.create(**page)
else:
page_obj.update_or_create(
code=page['code'],
name=page['name'],
is_active=page['is_active'],
)
# get page object
page_obj = page_obj.first()
for permission in permissions:
permission.pop('page') # remove page from data
perm = Permissions.objects.filter(page=page_obj, name=permission['name'])
if perm.exists():
perm.update_or_create(
name=permission['name'],
description=permission['description'],
category=permission['category'],
page=page_obj,
is_active=permission['is_active'],
modify_state=permission['modify_state'],
)
else:
Permissions.objects.create(
**permission,
page_id=page.id,
)
return Response(request.data)