Commit bc80a508 authored by John Red Medrano's avatar John Red Medrano

Merge pull request #114 in RMS/api-main-service from red-develop to RMSv2

* commit '2c8f4c62':
  fixed bug on sending mail at reset-password admin level
  added delete template draft fixed bug on change password user level
parents 0a61a976 2c8f4c62
...@@ -154,10 +154,10 @@ class ForgotPassword(APIView): ...@@ -154,10 +154,10 @@ class ForgotPassword(APIView):
user=existingUser, user=existingUser,
).save() ).save()
url = f"{settings.FRONT_END_URL}/account/forgot-password-reset"\ url = f"{settings.FRONT_END_URL}/forgot-password/reset"\
f"?token={TOKEN}" f"?token={TOKEN}"
args = [str(PASSCODE), str(url), str(existingUser.email), user] args = [str(PASSCODE), str(url), user, str(existingUser.email)]
# t1 = threading.Thread(target=sender.forgot_password, args=(args,)) # t1 = threading.Thread(target=sender.forgot_password, args=(args,))
# t1.start() # t1.start()
......
...@@ -22,7 +22,9 @@ from rest_framework.exceptions import ValidationError ...@@ -22,7 +22,9 @@ from rest_framework.exceptions import ValidationError
from django.db import transaction, IntegrityError, connection from django.db import transaction, IntegrityError, connection
from app.applicationlayer.utils import QuerySetHelper, CustomPagination, status_message_response from app.applicationlayer.utils import QuerySetHelper, CustomPagination, status_message_response
from app.businesslayer.changerequest import change_request from app.businesslayer.changerequest import change_request
from app.applicationlayer.cms.utils_cr import number_generator, crhistory_save from app.applicationlayer.cms.utils_cr import (
number_generator, crhistory_save, entity_log_bulk
)
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from rest_framework.generics import GenericAPIView from rest_framework.generics import GenericAPIView
...@@ -33,6 +35,7 @@ from django.db.models import Q ...@@ -33,6 +35,7 @@ from django.db.models import Q
from app.applicationlayer.management.account.serializer import ChangeRequestList from app.applicationlayer.management.account.serializer import ChangeRequestList
from app.applicationlayer.utils import log_save from app.applicationlayer.utils import log_save
from rest_framework.exceptions import ParseError
class UserList(APIView): class UserList(APIView):
...@@ -120,72 +123,66 @@ class ChangeRequestTemplatesViewset(meviewsets.ModelViewSet): ...@@ -120,72 +123,66 @@ class ChangeRequestTemplatesViewset(meviewsets.ModelViewSet):
serializer = self.get_serializer(instance) serializer = self.get_serializer(instance)
return Response(serializer.data) return Response(serializer.data)
# @transaction.atomic()
def destroy(self, request, *args, **kwargs): def destroy(self, request, *args, **kwargs):
# try: # try:
template_no = self.kwargs['template_no'] template_no = self.kwargs['template_no']
enum_approver = enums.LogEntitiesEnum.ChangeRequestTemplateApprovers.value
enum_stake = enums.LogEntitiesEnum.ChangeRequestTemplateStakeHolders.value
enum_attach = enums.LogEntitiesEnum.ChangeRequestTemplateAttachments.value
enum_detail = enums.LogEntitiesEnum.ChangeRequestTemplateDetails.value
enum_header = enums.LogEntitiesEnum.ChangeRequestTemplateHeader.value
approver = models.ChangeRequestTemplateApprovers.objects.filter( approver = models.ChangeRequestTemplateApprovers.objects.filter(
template_no=template_no template_no=template_no
) )
log_save( if approver.count() > 0:
enums.LogEnum.DELETED.value, entity_log_bulk(
enums.LogEntitiesEnum.ChangeRequestTemplateApprovers.value, approver, enum_approver,
approver.values()[0]['id'], models.ChangeRequestTemplateApprovers
approver.values()[0],
''
) )
approver.delete()
stake = models.ChangeRequestTemplateStakeHolders.objects.filter( stake = models.ChangeRequestTemplateStakeHolders.objects.filter(
template_no=template_no template_no=template_no
) )
log_save(
enums.LogEnum.DELETED.value, if stake.count() > 0:
enums.LogEntitiesEnum.ChangeRequestTemplateStakeHolders.value, entity_log_bulk(
stake.first()['id'], approver, enum_stake,
stake.values().first(), models.ChangeRequestTemplateStakeHolders
''
) )
stake.delete()
attachment = models.ChangeRequestTemplateAttachments.objects.filter( attachment = models.ChangeRequestTemplateAttachments.objects.filter(
template_no=template_no template_no=template_no
) )
log_save(
enums.LogEnum.DELETED.value, if attachment.count() > 0:
enums.LogEntitiesEnum.ChangeRequestTemplateAttachments.value, entity_log_bulk(
attachment.first()['id'], approver, enum_attach,
attachment.values().first(), models.ChangeRequestTemplateAttachments
''
) )
attachment.delete()
details = models.ChangeRequestTemplateDetails.objects.filter( details = models.ChangeRequestTemplateDetails.objects.filter(
template_no=template_no template_no=template_no
) )
log_save(
enums.LogEnum.DELETED.value, if details.count() > 0:
enums.LogEntitiesEnum.ChangeRequestTemplateHeader.value, entity_log_bulk(
details.first()['id'], approver, enum_detail,
details.values().first(), models.ChangeRequestTemplateDetails
''
) )
details.delete()
header = models.ChangeRequestTemplateHeader.objects.filter( header = models.ChangeRequestTemplateHeader.objects.filter(
template_no=template_no template_no=template_no
) )
log_save( if header.count() > 0:
enums.LogEnum.DELETED.value, entity_log_bulk(
enums.LogEntitiesEnum.ChangeRequestTemplateHeader.value, approver, enum_header,
header.first()['id'], models.ChangeRequestTemplateHeader
header.values().first(),
''
) )
header.delete()
return Response({"message": "Deleted"}, status=status.HTTP_200_OK) return Response({"message": "Deleted"}, status=status.HTTP_200_OK)
# except Exception as e: # except Exception as e:
# return Response(e, # return Response(e,
......
...@@ -8,10 +8,35 @@ from datetime import timedelta ...@@ -8,10 +8,35 @@ from datetime import timedelta
from django.db.models import Q from django.db.models import Q
from app.applicationlayer.utils import main_threading, notification_create from app.applicationlayer.utils import main_threading, notification_create
from app.helper.email_service import sender from app.helper.email_service import sender
from app.applicationlayer.utils import log_save
from app.entities import enums
from django.forms.models import model_to_dict
from rest_framework.exceptions import ParseError
from django.db import IntegrityError
from rest_framework.exceptions import APIException
CR_FRONT_LINK = settings.CR_FRONT_LINK CR_FRONT_LINK = settings.CR_FRONT_LINK
def entity_log_bulk(queryset, entity, tbl):
try:
print(entity)
for data in queryset:
test = model_to_dict(data)
log_save(
enums.LogEnum.DELETED.value,
entity,
test['id'],
test,
''
)
tbl.objects.filter(id=test['id']).delete()
return True
except IntegrityError as exc:
raise APIException(detail=exc)
def get_dept_details(dept_no): def get_dept_details(dept_no):
dept_instance = models.Department.objects.filter(code=dept_no) dept_instance = models.Department.objects.filter(code=dept_no)
......
...@@ -57,12 +57,12 @@ class ChangePasswordSerializer(serializers.Serializer): ...@@ -57,12 +57,12 @@ class ChangePasswordSerializer(serializers.Serializer):
def validate(self, data): def validate(self, data):
instance = self.context.get('view').kwargs['pk'] instance = self.context.get('view').kwargs['code']
old_password = data['old_password'] old_password = data['old_password']
new_password = data['new_password'] new_password = data['new_password']
instance_password = User.objects.filter( instance_password = User.objects.filter(
id=instance code=str(instance)
) )
validated_password = check_password( validated_password = check_password(
...@@ -74,14 +74,17 @@ class ChangePasswordSerializer(serializers.Serializer): ...@@ -74,14 +74,17 @@ class ChangePasswordSerializer(serializers.Serializer):
password = re.match( password = re.match(
'([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*', '([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*',
data['new_password'] new_password
) )
print("password")
print(password)
print(password)
if password: if password:
new_password = make_password(data['new_password']) new_password = make_password(new_password)
instance_password.update(password=new_password) instance_password.update(password=new_password)
instance = User.objects.get(id=instance) # instance = User.objects.get(code=str(instance))
return instance return instance
elif len(new_password) <= 5: elif len(new_password) <= 5:
......
...@@ -153,9 +153,9 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -153,9 +153,9 @@ class UserViewSet(viewsets.ModelViewSet):
code__in=request.data['application'] code__in=request.data['application']
) )
instance2 = User.objects.get( # instance2 = User.objects.get(
id=serializer.data['id'] # id=serializer.data['id']
) # )
instance.application.set(app) instance.application.set(app)
...@@ -182,9 +182,11 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -182,9 +182,11 @@ class UserViewSet(viewsets.ModelViewSet):
@decorators.error_safe @decorators.error_safe
@rms.user_create @rms.user_create
@transaction.atomic @transaction.atomic
def ResetPassword(self, request, pk=None): def ResetPassword(self, request, code=None):
existingUser = User.objects.filter(id=pk).first() existingUser = User.objects.filter(code=str(code))
pk = existingUser.values().first()['id']
existingUser = existingUser.first()
if existingUser: if existingUser:
...@@ -224,12 +226,12 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -224,12 +226,12 @@ class UserViewSet(viewsets.ModelViewSet):
methods=['put'], methods=['put'],
url_path='change-password', url_path='change-password',
name="Change Password of User") name="Change Password of User")
@decorators.error_safe # @decorators.error_safe
@transaction.atomic @transaction.atomic
def ChangePassword(self, request, pk=None): def ChangePassword(self, request, code=None):
self.serializer_class = serializer.ChangePasswordSerializer self.serializer_class = serializer.ChangePasswordSerializer
serialized = self.get_serializer(data=request.data, context={'id': pk}) serialized = self.get_serializer(data=request.data, context={'id': code})
if serialized.is_valid(): if serialized.is_valid():
...@@ -239,14 +241,16 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -239,14 +241,16 @@ class UserViewSet(viewsets.ModelViewSet):
if form['new_password'] != form['new_password_confirm']: if form['new_password'] != form['new_password_confirm']:
raise Exception('Passwords must match') raise Exception('Passwords must match')
existingUser = User.objects.filter(id=pk).first() existingUser = User.objects.filter(code=code)
pk = existingUser.values().first()['id']
if existingUser: if existingUser:
existingUser.set_password(form['new_password_confirm']) existingUser.first().set_password(form['new_password_confirm'])
fromObj = copy.copy(existingUser) fromObj = copy.copy(existingUser.first())
existingUser.save() existingUser.first().save()
toObj = copy.copy(existingUser) toObj = copy.copy(existingUser.first())
log_save( log_save(
enums.LogEnum.UPDATE.value, enums.LogEnum.UPDATE.value,
......
from rest_framework.views import exception_handler from __future__ import unicode_literals
from django.db import IntegrityError
from rest_framework.views import Response, exception_handler
from rest_framework import status
from itertools import islice
def custom_exception_handler(exc, context): def custom_exception_handler(exc, context):
...@@ -6,6 +10,7 @@ def custom_exception_handler(exc, context): ...@@ -6,6 +10,7 @@ def custom_exception_handler(exc, context):
# to get the standard error response. # to get the standard error response.
response = exception_handler(exc, context) response = exception_handler(exc, context)
# Update the structure of the response data. # Update the structure of the response data.
if response is not None: if response is not None:
error_message = {} error_message = {}
...@@ -25,5 +30,4 @@ def custom_exception_handler(exc, context): ...@@ -25,5 +30,4 @@ def custom_exception_handler(exc, context):
error_message['message'] = value error_message['message'] = value
response.data = error_message response.data = error_message
return response return response
# Generated by Django 2.2 on 2019-09-19 16:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('entities', '0004_auto_20190918_1104'),
]
operations = [
migrations.AlterField(
model_name='entitylog',
name='entity',
field=models.CharField(choices=[('USER', 'USER'), ('APPLICATION', 'APPLICATION'), ('COMPANY', 'COMPANY'), ('DEPARTMENT', 'DEPARTMENT'), ('MODULE', 'MODULE'), ('ChangeRequestTemplateHeader', 'ChangeRequestTemplateHeader'), ('ChangeRequestTemplateApprovers', 'ChangeRequestTemplateApprovers'), ('ChangeRequestTemplateStakeHolders', 'ChangeRequestTemplateStakeHolders'), ('ChangeRequestTemplateAttachments', 'ChangeRequestTemplateAttachments'), ('ChangeRequestTemplateDetails', 'ChangeRequestTemplateDetails')], default='Add', max_length=50),
),
]
...@@ -60,6 +60,7 @@ def forgot_password(args): ...@@ -60,6 +60,7 @@ def forgot_password(args):
FC = F.read() FC = F.read()
FC = FC.replace('{name}', recipient)
FC = FC.replace('{code}', reset_code) FC = FC.replace('{code}', reset_code)
FC = FC.replace('{url}', url) FC = FC.replace('{url}', url)
...@@ -137,7 +138,7 @@ def admin_changepassword(args): ...@@ -137,7 +138,7 @@ def admin_changepassword(args):
subject='OB RMS: Password Changed!', subject='OB RMS: Password Changed!',
message='', message='',
from_email=settings.EMAIL_DEFAULT_SENDER, from_email=settings.EMAIL_DEFAULT_SENDER,
recipient_list=[recipient,], recipient_list=[recipient, admin,],
html_message=FC html_message=FC
) )
......
...@@ -6,7 +6,7 @@ DATABASE_PASSWORD = ...@@ -6,7 +6,7 @@ DATABASE_PASSWORD =
DATABASE_HOST = DATABASE_HOST =
DATABASE_PORT = DATABASE_PORT =
SESSION_TIMEOUT = SESSION_TIMEOUT =
FRONT_END_URL = FRONT_END_URL = http://devweb.rmsv2.oneberrysystem.com
AUTH_ACCESSS_TOKEN_TIMEOUT = AUTH_ACCESSS_TOKEN_TIMEOUT =
USER_DEFAULT_PASSWORD = USER_DEFAULT_PASSWORD =
CATCH_EMAIL = gladys@tirsolutions.com CATCH_EMAIL = gladys@tirsolutions.com
...@@ -20,7 +20,7 @@ DATABASE_PASSWORD = ...@@ -20,7 +20,7 @@ DATABASE_PASSWORD =
DATABASE_HOST = DATABASE_HOST =
DATABASE_PORT = DATABASE_PORT =
SESSION_TIMEOUT = SESSION_TIMEOUT =
FRONT_END_URL = FRONT_END_URL = http://devweb.rmsv2.oneberrysystem.com
AUTH_ACCESSS_TOKEN_TIMEOUT = AUTH_ACCESSS_TOKEN_TIMEOUT =
USER_DEFAULT_PASSWORD = USER_DEFAULT_PASSWORD =
CATCH_EMAIL = gladys@tirsolutions.com CATCH_EMAIL = gladys@tirsolutions.com
...@@ -34,7 +34,7 @@ DATABASE_PASSWORD = ...@@ -34,7 +34,7 @@ DATABASE_PASSWORD =
DATABASE_HOST = DATABASE_HOST =
DATABASE_PORT = DATABASE_PORT =
SESSION_TIMEOUT = SESSION_TIMEOUT =
FRONT_END_URL = FRONT_END_URL = http://devweb.rmsv2.oneberrysystem.com
AUTH_ACCESSS_TOKEN_TIMEOUT = AUTH_ACCESSS_TOKEN_TIMEOUT =
USER_DEFAULT_PASSWORD = USER_DEFAULT_PASSWORD =
CATCH_EMAIL = gladys@tirsolutions.com CATCH_EMAIL = gladys@tirsolutions.com
...@@ -44,11 +44,11 @@ CR_LINK = http://devweb.rms.oneberrysystem.com/cms/change-request/form/view ...@@ -44,11 +44,11 @@ CR_LINK = http://devweb.rms.oneberrysystem.com/cms/change-request/form/view
DATABASE_ENGINE = django.db.backends.mysql DATABASE_ENGINE = django.db.backends.mysql
DATABASE_NAME = rms_db DATABASE_NAME = rms_db
DATABASE_USER = root DATABASE_USER = root
DATABASE_PASSWORD = 123 DATABASE_PASSWORD = password
DATABASE_HOST = localhost DATABASE_HOST = localhost
DATABASE_PORT = 3306 DATABASE_PORT = 3306
SESSION_TIMEOUT = 30 SESSION_TIMEOUT = 30
FRONT_END_URL = FRONT_END_URL = http://devweb.rmsv2.oneberrysystem.com
AUTH_ACCESSS_TOKEN_TIMEOUT = 3600 AUTH_ACCESSS_TOKEN_TIMEOUT = 3600
USER_DEFAULT_PASSWORD = password USER_DEFAULT_PASSWORD = password
CATCH_EMAIL = gladys@tirsolutions.com CATCH_EMAIL = gladys@tirsolutions.com
......
...@@ -21,15 +21,11 @@ ...@@ -21,15 +21,11 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/master/companies/", "raw": "{{baseurl}}/master/companies/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"master", "master",
"companies", "companies",
"" ""
...@@ -48,15 +44,11 @@ ...@@ -48,15 +44,11 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/master/departments/?company=2", "raw": "{{baseurl}}/master/departments/?company=COMPANY-20190917-0000001",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"master", "master",
"departments", "departments",
"" ""
...@@ -64,7 +56,7 @@ ...@@ -64,7 +56,7 @@
"query": [ "query": [
{ {
"key": "company", "key": "company",
"value": "2" "value": "COMPANY-20190917-0000001"
} }
] ]
} }
...@@ -81,15 +73,11 @@ ...@@ -81,15 +73,11 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/master/user-types/", "raw": "{{baseurl}}/master/user-types/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"master", "master",
"user-types", "user-types",
"" ""
...@@ -117,15 +105,11 @@ ...@@ -117,15 +105,11 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/applications/", "raw": "{{baseurl}}/management/applications/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"applications", "applications",
"" ""
...@@ -144,18 +128,14 @@ ...@@ -144,18 +128,14 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/applications/1/", "raw": "{{baseurl}}/management/applications/APP-20190917-0000001/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"applications", "applications",
"1", "APP-20190917-0000001",
"" ""
] ]
} }
...@@ -179,15 +159,11 @@ ...@@ -179,15 +159,11 @@
"raw": "{\n\t\"name\": \"Asset Management System\"\n}" "raw": "{\n\t\"name\": \"Asset Management System\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/applications/", "raw": "{{baseurl}}/management/applications/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"applications", "applications",
"" ""
...@@ -213,15 +189,11 @@ ...@@ -213,15 +189,11 @@
"raw": "{\n\t\"name\": \"rms2\"\n}" "raw": "{\n\t\"name\": \"rms2\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/applications/APP-20190917-0000001/", "raw": "{{baseurl}}/management/applications/APP-20190917-0000001/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"applications", "applications",
"APP-20190917-0000001", "APP-20190917-0000001",
...@@ -248,15 +220,11 @@ ...@@ -248,15 +220,11 @@
"raw": "{\n\t\"name\": \"rms2\"\n}" "raw": "{\n\t\"name\": \"rms2\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/applications/APP-20190917-0000004/", "raw": "{{baseurl}}/management/applications/APP-20190917-0000004/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"applications", "applications",
"APP-20190917-0000004", "APP-20190917-0000004",
...@@ -282,15 +250,11 @@ ...@@ -282,15 +250,11 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/companies/", "raw": "{{baseurl}}/management/companies/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"companies", "companies",
"" ""
...@@ -309,15 +273,11 @@ ...@@ -309,15 +273,11 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/companies/COMPANY-20190909-0000001/", "raw": "{{baseurl}}/management/companies/COMPANY-20190909-0000001/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"companies", "companies",
"COMPANY-20190909-0000001", "COMPANY-20190909-0000001",
...@@ -344,15 +304,11 @@ ...@@ -344,15 +304,11 @@
"raw": "{\n\t\"name\": \"Total Integrated Resources\",\n\t\"contact_details\": \"2152509\"\n}" "raw": "{\n\t\"name\": \"Total Integrated Resources\",\n\t\"contact_details\": \"2152509\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/companies/", "raw": "{{baseurl}}/management/companies/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"companies", "companies",
"" ""
...@@ -378,18 +334,14 @@ ...@@ -378,18 +334,14 @@
"raw": "{\n\t\"name\": \"TIR2\",\n\t\"contact_details\": \"2152509\"\n}" "raw": "{\n\t\"name\": \"TIR2\",\n\t\"contact_details\": \"2152509\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/companies/4/", "raw": "{{baseurl}}/management/companies/COMPANY-20190917-0000002/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"companies", "companies",
"4", "COMPANY-20190917-0000002",
"" ""
] ]
} }
...@@ -413,18 +365,14 @@ ...@@ -413,18 +365,14 @@
"raw": "{\n\t\"name\": \"TIR2\",\n\t\"contact_details\": \"2152509\"\n}" "raw": "{\n\t\"name\": \"TIR2\",\n\t\"contact_details\": \"2152509\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/companies/4/", "raw": "{{baseurl}}/management/companies/COMPANY-20190917-0000002/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"companies", "companies",
"4", "COMPANY-20190917-0000002",
"" ""
] ]
} }
...@@ -447,15 +395,11 @@ ...@@ -447,15 +395,11 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/departments/", "raw": "{{baseurl}}/management/departments/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"departments", "departments",
"" ""
...@@ -474,18 +418,14 @@ ...@@ -474,18 +418,14 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/departments/DEPARTMENT-20190909-0000001/", "raw": "{{baseurl}}/management/departments/DEPARTMENT-20190919-0000001/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"departments", "departments",
"DEPARTMENT-20190909-0000001", "DEPARTMENT-20190919-0000001",
"" ""
] ]
} }
...@@ -506,18 +446,14 @@ ...@@ -506,18 +446,14 @@
], ],
"body": { "body": {
"mode": "raw", "mode": "raw",
"raw": "{\n \"name\": \"Business Development\",\n \"company\": \"COMPANY-20190909-0000001\"\n}" "raw": "{\n \"name\": \"Business Develsopment2\",\n \"company\": \"COMPANY-20190917-0000001\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/departments/", "raw": "{{baseurl}}/management/departments/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"departments", "departments",
"" ""
...@@ -540,21 +476,17 @@ ...@@ -540,21 +476,17 @@
], ],
"body": { "body": {
"mode": "raw", "mode": "raw",
"raw": "{\n \"name\": \"Business Developments\",\n \"company\": \"COMPANY-20190909-0000001\"\n}" "raw": "{\n \"name\": \"Business Development\",\n \"company\": \"COMPANY-20190917-0000001\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/departments/DEPARTMENT-20190917-0000002/", "raw": "{{baseurl}}/management/departments/DEPARTMENT-20190919-0000001/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"departments", "departments",
"DEPARTMENT-20190917-0000002", "DEPARTMENT-20190919-0000001",
"" ""
] ]
} }
...@@ -578,18 +510,14 @@ ...@@ -578,18 +510,14 @@
"raw": "{\n \"name\": \"Business Developments\",\n \"company\": 2\n}" "raw": "{\n \"name\": \"Business Developments\",\n \"company\": 2\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/departments/2/", "raw": "{{baseurl}}/management/departments/DEPARTMENT-20190917-0000001/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"departments", "departments",
"2", "DEPARTMENT-20190917-0000001",
"" ""
] ]
} }
...@@ -612,18 +540,20 @@ ...@@ -612,18 +540,20 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/modules/", "raw": "{{baseurl}}/management/modules/?page=2",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"modules", "modules",
"" ""
],
"query": [
{
"key": "page",
"value": "2"
}
] ]
} }
}, },
...@@ -639,18 +569,14 @@ ...@@ -639,18 +569,14 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/modules/5/", "raw": "{{baseurl}}/management/modules/MODULE-20190919-0000007/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"modules", "modules",
"5", "MODULE-20190919-0000007",
"" ""
] ]
} }
...@@ -671,18 +597,14 @@ ...@@ -671,18 +597,14 @@
], ],
"body": { "body": {
"mode": "raw", "mode": "raw",
"raw": "{\n \"name\": \"User Management\",\n \"parent\": 0,\n \"sort_id\": 1,\n \"application\": \"APP-20190917-0000001\"\n}" "raw": "{\n \"name\": \"User Managementdd\",\n \"parent\": 0,\n \"sort_id\": 1,\n \"application\": \"APP-20190917-0000001\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/modules/", "raw": "{{baseurl}}/management/modules/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"modules", "modules",
"" ""
...@@ -705,21 +627,17 @@ ...@@ -705,21 +627,17 @@
], ],
"body": { "body": {
"mode": "raw", "mode": "raw",
"raw": "{\n \"name\": \"Assets NVM\",\n \"parent\": 10,\n \"sort_id\": 1,\n \"application\": 2\n}" "raw": "{\n \"name\": \"Assets NVM\",\n \"parent\": 10,\n \"sort_id\": 1,\n \"application\": \"APP-20190917-0000001\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/modules/12/", "raw": "{{baseurl}}/management/modules/MODULE-20190919-0000007/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"modules", "modules",
"12", "MODULE-20190919-0000007",
"" ""
] ]
} }
...@@ -777,15 +695,11 @@ ...@@ -777,15 +695,11 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/users/", "raw": "{{baseurl}}/management/users/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"users", "users",
"" ""
...@@ -804,18 +718,14 @@ ...@@ -804,18 +718,14 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/users/USER-20190917-0000026/", "raw": "{{baseurl}}/management/users/USER-20190919-0000028/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"users", "users",
"USER-20190917-0000026", "USER-20190919-0000028",
"" ""
] ]
} }
...@@ -839,15 +749,11 @@ ...@@ -839,15 +749,11 @@
"raw": "{\r\n\t\"application\":[\"APP-20190917-0000001\",\"APP-20190917-0000003\"],\r\n\t\"department\": \"DEPARTMENT-20190917-0000002\",\r\n\t\"user_type\": \"OUA\",\r\n\t\"name\": \"Rita\",\r\n\t\"username\": \"obrita\",\r\n\t\"doa\":\"\",\r\n\t\"default_app\": \"APP-20190917-0000001\",\r\n\t\"contact_no\": \"1312313\",\r\n\t\"email\": \"test@gmail.com\"\r\n}\r\n" "raw": "{\r\n\t\"application\":[\"APP-20190917-0000001\",\"APP-20190917-0000003\"],\r\n\t\"department\": \"DEPARTMENT-20190917-0000002\",\r\n\t\"user_type\": \"OUA\",\r\n\t\"name\": \"Rita\",\r\n\t\"username\": \"obrita\",\r\n\t\"doa\":\"\",\r\n\t\"default_app\": \"APP-20190917-0000001\",\r\n\t\"contact_no\": \"1312313\",\r\n\t\"email\": \"test@gmail.com\"\r\n}\r\n"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/users/", "raw": "{{baseurl}}/management/users/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"users", "users",
"" ""
...@@ -870,21 +776,17 @@ ...@@ -870,21 +776,17 @@
], ],
"body": { "body": {
"mode": "raw", "mode": "raw",
"raw": "{\r\n\t\"application\":[\"APP-20190917-0000001\",\"APP-20190917-0000003\"],\r\n\t\"department\": \"DEPARTMENT-20190917-0000002\",\r\n\t\"user_type\": \"OUA\",\r\n\t\"name\": \"Ritas\",\r\n\t\"username\": \"obrita\",\r\n\t\"doa\":\"\",\r\n\t\"default_app\": \"APP-20190917-0000001\",\r\n\t\"contact_no\": \"1312313\",\r\n\t\"email\": \"test@gmail.com\"\r\n}\r\n" "raw": "{\r\n\t\"application\":[\"APP-20190917-0000001\",\"APP-20190917-0000003\"],\r\n\t\"department\": \"DEPARTMENT-20190917-0000002\",\r\n\t\"user_type\": \"OUA\",\r\n\t\"name\": \"Ritas\",\r\n\t\"username\": \"obrit1a\",\r\n\t\"doa\":\"\",\r\n\t\"default_app\": \"APP-20190917-0000001\",\r\n\t\"contact_no\": \"1312313\",\r\n\t\"email\": \"test@gmail.com\"\r\n}\r\n"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/management/users/USER-20190917-0000026/", "raw": "{{baseurl}}/management/users/USER-20190919-0000028/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"management", "management",
"users", "users",
"USER-20190917-0000026", "USER-20190919-0000028",
"" ""
] ]
} }
...@@ -908,15 +810,11 @@ ...@@ -908,15 +810,11 @@
"raw": "{\r\n\t\"application\":[1,3],\r\n\t\"department\": 1,\r\n\t\"user_type\": \"OUA\",\r\n\t\"name\": \"Ritas\",\r\n\t\"username\": \"OBRITA\",\r\n\t\"password\": \"password123\",\r\n\t\"doa\":\"\",\r\n\t\"default_app\": \"RMS\",\r\n\t\"contact_no\": \"1312313\",\r\n\t\"email\": \"test@gmail.com\"\r\n}\r\n" "raw": "{\r\n\t\"application\":[1,3],\r\n\t\"department\": 1,\r\n\t\"user_type\": \"OUA\",\r\n\t\"name\": \"Ritas\",\r\n\t\"username\": \"OBRITA\",\r\n\t\"password\": \"password123\",\r\n\t\"doa\":\"\",\r\n\t\"default_app\": \"RMS\",\r\n\t\"contact_no\": \"1312313\",\r\n\t\"email\": \"test@gmail.com\"\r\n}\r\n"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/users/3/", "raw": "{{baseurl}}/users/3/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"users", "users",
"3", "3",
"" ""
...@@ -942,15 +840,11 @@ ...@@ -942,15 +840,11 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/users/3/", "raw": "{{baseurl}}/users/3/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"users", "users",
"3", "3",
"" ""
...@@ -958,6 +852,38 @@ ...@@ -958,6 +852,38 @@
} }
}, },
"response": [] "response": []
},
{
"name": "Change Password",
"request": {
"method": "PUT",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"old_password\": \"password123\",\n\t\"new_password\": \"newpassword011\",\n\t\"new_password_confirm\": \"newpassword011\"\n}"
},
"url": {
"raw": "{{baseurl}}/management/users/USER-20190920-0000028/change-password/",
"host": [
"{{baseurl}}"
],
"path": [
"management",
"users",
"USER-20190920-0000028",
"change-password",
""
]
}
},
"response": []
} }
], ],
"_postman_isSubFolder": true "_postman_isSubFolder": true
...@@ -978,15 +904,11 @@ ...@@ -978,15 +904,11 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/auth/current-user/", "raw": "{{baseurl}}/auth/current-user/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"auth", "auth",
"current-user", "current-user",
"" ""
...@@ -1026,15 +948,11 @@ ...@@ -1026,15 +948,11 @@
] ]
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/auth/login/", "raw": "{{baseurl}}/auth/login/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"auth", "auth",
"login", "login",
"" ""
...@@ -1173,18 +1091,14 @@ ...@@ -1173,18 +1091,14 @@
], ],
"body": { "body": {
"mode": "raw", "mode": "raw",
"raw": "{\r\n\t\"requested_to_template_name\": \"Sample Template\",\r\n\t\"requested_to_template_id\": \"JTC2\",\r\n\t\"requested_to_objective\": \"Sample Objective\",\r\n\t\"requested_to_target_date\": \"10\",\r\n\t\"requested_to_priority\": \"High\",\r\n\t\"description\": \"sample description\",\r\n\t\"created_by_department\": \"admin\",\r\n\t\"created_by_user\": \"USER-20190913-0000006\",\r\n\t\"requested_to_company\": \"COMPANY-20190909-0000002\",\r\n\t\"requested_to_department\": \"DEPARTMENT-20190909-0000002\",\r\n\t\"requested_to_user\": \"USER-20190913-0000007\",\r\n\t\r\n\t\r\n\t\"tmp_approvers\": [{\r\n\t\t\t\"level\": \"1\",\r\n\t\t\t\"delegation\": \"HOD\",\r\n\t\t\t\"user\": \"\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"level\": \"2\",\r\n\t\t\t\"delegation\": \"Approver\",\r\n\t\t\t\"user\": \"USER-20190913-0000009\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"level\": \"3\",\r\n\t\t\t\"delegation\": \"Approver\",\r\n\t\t\t\"user\": \"USER-20190913-0000008\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"tmp_stakes\": [{\r\n\t\t\t\"delegation\": \"Mandatory Stakeholder\",\r\n\t\t\t\"user\": \"USER-20190913-0000009\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"delegation\": \"Stake Approver\",\r\n\t\t\t\"user\": \"USER-20190913-0000008\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"tmp_attachments\": [{\r\n\t\t\t\"attachment_type\": \"Hello\",\r\n\t\t\t\"attachment_name\": \"heyu\",\r\n\t\t\t\"file_name\": \"Sample\",\r\n\t\t\t\"description\": \"Sameple Desc\",\r\n\t\t\t\"uploaded_by\": \"USER-20190913-0000006\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"attachment_type\": \"Hello\",\r\n\t\t\t\"attachment_name\": \"heyu\",\r\n\t\t\t\"file_name\": \"Sample\",\r\n\t\t\t\"description\": \"Sameple Desc\",\r\n\t\t\t\"uploaded_by\": \"USER-20190913-0000006\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"tmp_details\": [{\r\n\t\t\t\"field_idx\": \"Hello\",\r\n\t\t\t\"field_ref\": \"heyu\",\r\n\t\t\t\"field_val\": \"Sample\",\r\n\t\t\t\"field_props\": \"Sameple Desc\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"field_idx\": \"Hello\",\r\n\t\t\t\"field_ref\": \"heyu\",\r\n\t\t\t\"field_val\": \"Sample\",\r\n\t\t\t\"field_props\": \"Sameple Desc\"\r\n\t\t}\r\n\t]\r\n}" "raw": "{\r\n\t\"requested_to_template_name\": \"Sample Template\",\r\n\t\"requested_to_template_id\": \"JTC21\",\r\n\t\"requested_to_objective\": \"Sample Objective\",\r\n\t\"requested_to_target_date\": \"10\",\r\n\t\"requested_to_priority\": \"High\",\r\n\t\"description\": \"sample description\",\r\n\t\"created_by_department\": \"admin\",\r\n\t\"created_by_user\": \"USER-20190913-0000006\",\r\n\t\"requested_to_company\": \"COMPANY-20190909-0000002\",\r\n\t\"requested_to_department\": \"DEPARTMENT-20190909-0000002\",\r\n\t\"requested_to_user\": \"USER-20190913-0000007\",\r\n\t\r\n\t\r\n\t\"tmp_approvers\": [{\r\n\t\t\t\"level\": \"1\",\r\n\t\t\t\"delegation\": \"HOD\",\r\n\t\t\t\"user\": \"\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"level\": \"2\",\r\n\t\t\t\"delegation\": \"Approver\",\r\n\t\t\t\"user\": \"USER-20190913-0000009\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"level\": \"3\",\r\n\t\t\t\"delegation\": \"Approver\",\r\n\t\t\t\"user\": \"USER-20190913-0000008\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"tmp_stakes\": [{\r\n\t\t\t\"delegation\": \"Mandatory Stakeholder\",\r\n\t\t\t\"user\": \"USER-20190913-0000009\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"delegation\": \"Stake Approver\",\r\n\t\t\t\"user\": \"USER-20190913-0000008\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"tmp_attachments\": [{\r\n\t\t\t\"attachment_type\": \"Hello\",\r\n\t\t\t\"attachment_name\": \"heyu\",\r\n\t\t\t\"file_name\": \"Sample\",\r\n\t\t\t\"description\": \"Sameple Desc\",\r\n\t\t\t\"uploaded_by\": \"USER-20190913-0000006\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"attachment_type\": \"Hello\",\r\n\t\t\t\"attachment_name\": \"heyu\",\r\n\t\t\t\"file_name\": \"Sample\",\r\n\t\t\t\"description\": \"Sameple Desc\",\r\n\t\t\t\"uploaded_by\": \"USER-20190913-0000006\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"tmp_details\": [{\r\n\t\t\t\"field_idx\": \"Hello\",\r\n\t\t\t\"field_ref\": \"heyu\",\r\n\t\t\t\"field_val\": \"Sample\",\r\n\t\t\t\"field_props\": \"Sameple Desc\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"field_idx\": \"Hello\",\r\n\t\t\t\"field_ref\": \"heyu\",\r\n\t\t\t\"field_val\": \"Sample\",\r\n\t\t\t\"field_props\": \"Sameple Desc\"\r\n\t\t}\r\n\t]\r\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/change-request/template-post/", "raw": "{{baseurl}}/change-request/template-post/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"change-request", "change-request",
"template-post", "template-post",
"" ""
...@@ -1230,7 +1144,7 @@ ...@@ -1230,7 +1144,7 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/change-request/template/TMP-20190913-0000001/", "raw": "http://localhost:8000/api/v1/change-request/template/TMP-20190916-0000002/",
"protocol": "http", "protocol": "http",
"host": [ "host": [
"localhost" "localhost"
...@@ -1241,7 +1155,7 @@ ...@@ -1241,7 +1155,7 @@
"v1", "v1",
"change-request", "change-request",
"template", "template",
"TMP-20190913-0000001", "TMP-20190916-0000002",
"" ""
] ]
} }
...@@ -1349,18 +1263,14 @@ ...@@ -1349,18 +1263,14 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/change-request/template/TMP-20190909-0000002/", "raw": "{{baseurl}}/change-request/template/TMP-20190916-0000003/",
"protocol": "http",
"host": [ "host": [
"localhost" "{{baseurl}}"
], ],
"port": "8000",
"path": [ "path": [
"api",
"v1",
"change-request", "change-request",
"template", "template",
"TMP-20190909-0000002", "TMP-20190916-0000003",
"" ""
] ]
} }
...@@ -1624,7 +1534,7 @@ ...@@ -1624,7 +1534,7 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8000/api/v1/change-request/user-list/", "raw": "http://localhost:8000/api/v1/change-request/user-list/?department_code=DEPARTMENT-20190917-0000001&company_code=COMPANY-20190917-0000001",
"protocol": "http", "protocol": "http",
"host": [ "host": [
"localhost" "localhost"
...@@ -1636,6 +1546,16 @@ ...@@ -1636,6 +1546,16 @@
"change-request", "change-request",
"user-list", "user-list",
"" ""
],
"query": [
{
"key": "department_code",
"value": "DEPARTMENT-20190917-0000001"
},
{
"key": "company_code",
"value": "COMPANY-20190917-0000001"
}
] ]
} }
}, },
...@@ -2573,7 +2493,7 @@ ...@@ -2573,7 +2493,7 @@
"bearer": [ "bearer": [
{ {
"key": "token", "key": "token",
"value": "b7b77207fd444444355e6abf3883c11771d1a48e", "value": "ca1b9e964488b11c735d8d54cc0fef01a96a899e",
"type": "string" "type": "string"
} }
] ]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment