fix - update page access - v3

This commit is contained in:
2025-12-01 10:25:27 +03:30
parent f1cc524863
commit f66067778c
5 changed files with 144 additions and 37 deletions

View File

@@ -45,14 +45,14 @@ class UpdatePageAccessViewSet(BaseViewSet, SoftDeleteMixin, viewsets.ModelViewSe
"""
sync update page & access on development version with production
"""
url = 'https://api.tdam.rasadyar.com/auth/api/v1/update_access/'
dev_url = 'https://api.tdam.rasadyar.com/auth/api/v1/update_access/'
# get data page & permissions data from development
req = requests.get(url)
response = req.json()
dev_req = requests.get(dev_url)
dev_data = dev_req.json()
url = 'https://api.dam.rasadyar.com/auth/api/v1/update_access/update_page_access/'
updated_response = requests.post(url=url, json=response)
prod_url = 'http://127.0.0.1:8000/auth/api/v1/update_access/update_page_access/'
updated_response = requests.post(url=prod_url, json=dev_data)
return Response(updated_response.json())
@@ -61,38 +61,79 @@ class UpdatePageAccessViewSet(BaseViewSet, SoftDeleteMixin, viewsets.ModelViewSe
"""
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:
obj = page_obj.first()
obj.update(
name=page['name'],
code=page['code'],
is_active=page['is_active'],
)
dev_data = request.data
dev_pages_name = [p['name'] for p in dev_data]
dev_perms_name = []
for item in dev_data:
for perm in item['permissions']:
dev_perms_name.append(perm['name'])
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.first().update(
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=page_obj,
)
return Response(request.data)
pages_to_delete = Page.objects.exclude(name__in=dev_pages_name)
# pages_to_delete.delete()
print(pages_to_delete)
page_map = {}
for page in dev_data:
page_obj, _ = Page.objects.filter().update_or_create(
code=page['code'], # keep dev page codes in prod
defaults={
'name': page['name'],
'is_active': page['is_active'],
}
)
page_map[page['name']] = page_obj.id
permissions_to_delete = Permissions.objects.exclude(name__in=dev_perms_name)
# permissions_to_delete.delete()
print(permissions_to_delete)
# for perm in dev_data['permissions']:
# permission_obj, _ = Permissions.objects.update_or_create(
# id=perm['id'], # keep dev permission ids in prod
# defaults={
# 'name': perm['name'],
# 'description': perm['description'],
# 'category': perm['category'],
# 'page_id': page_map[perm['page']],
# 'is_active': perm['is_active'],
# 'modify_state': perm['modify_state'],
# }
# )
return Response(dev_data)
# # 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:
# obj = page_obj.first()
# if obj:
# obj.code = page['code']
# obj.name = page['name']
# obj.is_active = page['is_active']
# page_obj = obj.save()
#
# 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)
class RoleViewSet(BaseViewSet, SoftDeleteMixin, viewsets.ModelViewSet):

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.0 on 2025-12-01 06:53
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('authorization', '0022_alter_role_description'),
]
operations = [
migrations.AlterField(
model_name='page',
name='code',
field=models.CharField(max_length=100),
),
]

View File

@@ -9,7 +9,7 @@ from apps.core.models import BaseModel
class Page(BaseModel):
""" every front-end page on system """
code = models.CharField(max_length=100, unique=True)
code = models.CharField(max_length=100)
name = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)

View File

@@ -0,0 +1,23 @@
# Generated by Django 5.0 on 2025-12-01 06:53
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('product', '0098_quotausage_quota_stat'),
]
operations = [
migrations.AddField(
model_name='organizationquotastats',
name='free_sale_balance',
field=models.PositiveBigIntegerField(default=0),
),
migrations.AddField(
model_name='organizationquotastats',
name='pre_sale_balance',
field=models.PositiveBigIntegerField(default=0),
),
]

View File

@@ -0,0 +1,25 @@
# Generated by Django 5.0 on 2025-12-01 06:53
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('product', '0099_organizationquotastats_free_sale_balance_and_more'),
('warehouse', '0045_inventoryquotasaleitem_quota_stat'),
]
operations = [
migrations.AddField(
model_name='extrasale',
name='quota_stat',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='extra_sales', to='product.organizationquotastats'),
),
migrations.AddField(
model_name='quotapresaleitem',
name='quota_stat',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pre_sales', to='product.organizationquotastats'),
),
]