diff --git a/apps/authorization/api/v1/api.py b/apps/authorization/api/v1/api.py index efbfb01..33d3539 100644 --- a/apps/authorization/api/v1/api.py +++ b/apps/authorization/api/v1/api.py @@ -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)