Skip to content

Commit 791213c

Browse files
committed
Merge branch 'develop'
2 parents f124d0d + 1bfdba9 commit 791213c

File tree

12 files changed

+89
-32
lines changed

12 files changed

+89
-32
lines changed

deploy/docker/docker-compose.yml

+1
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ services:
177177
postgresdb:
178178
container_name: postgresdb
179179
image: 'postgres:14'
180+
command: ["postgres", "-c", "max_connections=500"]
180181
environment:
181182
POSTGRES_USER: admin
182183
POSTGRES_PASSWORD: crapisecretpassword

deploy/helm/templates/postgres/statefulset.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@ spec:
2323
- name: {{ .Values.postgresdb.name }}
2424
image: {{ .Values.postgresdb.image }}:{{ .Values.postgresdb.version }}
2525
imagePullPolicy: {{ .Values.postgresdb.imagePullPolicy }}
26+
args: ["-c", "max_connections=500"]
2627
ports:
2728
- containerPort: {{ .Values.postgresdb.port }}
2829
envFrom:
2930
- configMapRef:
3031
name: {{ .Values.postgresdb.config.name }}
31-
32+
3233
volumeMounts:
3334
- mountPath: /var/lib/postgresql/data
3435
name: postgres-data

deploy/k8s/base/postgres/statefulset.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ spec:
1616
containers:
1717
- name: postgres
1818
image: postgres:14
19+
args: ["-c", "max_connections=500"]
1920
imagePullPolicy: "IfNotPresent"
2021
ports:
2122
- containerPort: 5432
2223
envFrom:
2324
- configMapRef:
2425
name: postgres-config
25-
26+
2627
volumeMounts:
2728
- mountPath: /var/lib/postgresql/data
2829
name: postgres-data

openapi-spec/openapi-spec.json

+19
Original file line numberDiff line numberDiff line change
@@ -1944,6 +1944,25 @@
19441944
"security" : [ {
19451945
"bearerAuth" : [ ]
19461946
} ],
1947+
"parameters" : [ {
1948+
"name" : "limit",
1949+
"in" : "query",
1950+
"required" : true,
1951+
"schema" : {
1952+
"type" : "integer",
1953+
"format" : "int32",
1954+
"example" : 30
1955+
}
1956+
}, {
1957+
"name" : "offset",
1958+
"in" : "query",
1959+
"required" : true,
1960+
"schema" : {
1961+
"type" : "integer",
1962+
"format" : "int32",
1963+
"example" : 0
1964+
}
1965+
} ],
19471966
"responses" : {
19481967
"200" : {
19491968
"content" : {

postman_collections/crAPI.postman_collection.json

+11-1
Original file line numberDiff line numberDiff line change
@@ -2421,7 +2421,7 @@
24212421
}
24222422
],
24232423
"url": {
2424-
"raw": "{{url}}/workshop/api/shop/orders/all",
2424+
"raw": "{{url}}/workshop/api/shop/orders/all?limit=30&offset=0",
24252425
"host": [
24262426
"{{url}}"
24272427
],
@@ -2431,6 +2431,16 @@
24312431
"shop",
24322432
"orders",
24332433
"all"
2434+
],
2435+
"query": [
2436+
{
2437+
"key": "limit",
2438+
"value": "30"
2439+
},
2440+
{
2441+
"key": "offset",
2442+
"value": "0"
2443+
}
24342444
]
24352445
}
24362446
},

services/identity/src/main/resources/application.properties

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ logging.level.org.springframework.web=DEBUG
33
spring.datasource.url= jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
44
spring.datasource.username=${DB_USER}
55
spring.datasource.password=${DB_PASSWORD}
6+
spring.datasource.max-active=100
7+
spring.datasource.max-idle=8
8+
spring.datasource.min-idle=8
69

710
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
811
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

services/workshop/crapi/mechanic/views.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,13 @@
2323
from rest_framework.response import Response
2424
from rest_framework.views import APIView
2525
from django.db import models
26+
from crapi_site import settings
2627
from utils.jwt import jwt_auth_required
2728
from utils import messages
2829
from crapi.user.models import User, Vehicle, UserDetails
2930
from utils.logging import log_error
3031
from .models import Mechanic, ServiceRequest
3132
from .serializers import MechanicSerializer, ServiceRequestSerializer, ReceiveReportSerializer, SignUpSerializer
32-
DEFAULT_LIMIT = 10
33-
DEFAULT_OFFSET = 0
34-
MAX_LIMIT = 100
3533

3634
class SignUpView(APIView):
3735
"""
@@ -206,21 +204,21 @@ def get(self, request, user=None):
206204
list of service request object and 200 status if no error
207205
message and corresponding status if error
208206
"""
209-
limit = request.GET.get('limit', str(DEFAULT_LIMIT))
210-
offset = request.GET.get('offset', str(DEFAULT_OFFSET))
207+
limit = request.GET.get('limit', str(settings.DEFAULT_LIMIT))
208+
offset = request.GET.get('offset', str(settings.DEFAULT_OFFSET))
211209
if not limit.isdigit() or not offset.isdigit():
212210
return Response(
213211
{'message': messages.INVALID_LIMIT_OR_OFFSET},
214212
status=status.HTTP_400_BAD_REQUEST
215213
)
216214
limit = int(limit)
217215
offset = int(offset)
218-
if limit > MAX_LIMIT:
216+
if limit > settings.MAX_LIMIT:
219217
limit = 100
220218
if limit < 0:
221-
limit = DEFAULT_LIMIT
219+
limit = settings.DEFAULT_LIMIT
222220
if offset < 0:
223-
offset = DEFAULT_OFFSET
221+
offset = settings.DEFAULT_OFFSET
224222
service_requests = ServiceRequest.objects.filter(mechanic__user=user).order_by('id')[offset:offset+limit]
225223
serializer = ServiceRequestSerializer(service_requests, many=True)
226224
response_data = dict(

services/workshop/crapi/shop/views.py

+30-8
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,22 @@ def get(self, request, user=None):
241241
list of order object and 200 status if no error
242242
message and corresponding status if error
243243
"""
244-
orders = Order.objects.filter(user=user)
244+
limit = request.GET.get('limit', str(settings.DEFAULT_LIMIT))
245+
offset = request.GET.get('offset', str(settings.DEFAULT_OFFSET))
246+
if not limit.isdigit() or not offset.isdigit():
247+
return Response(
248+
{'message': messages.INVALID_LIMIT_OR_OFFSET},
249+
status=status.HTTP_400_BAD_REQUEST
250+
)
251+
limit = int(limit)
252+
offset = int(offset)
253+
if limit > settings.MAX_LIMIT:
254+
limit = 100
255+
if limit < 0:
256+
limit = settings.DEFAULT_LIMIT
257+
if offset < 0:
258+
offset = settings.DEFAULT_OFFSET
259+
orders = Order.objects.filter(user=user).order_by('-id')[offset:offset+limit]
245260
serializer = OrderSerializer(orders, many=True)
246261
response_data = dict(
247262
orders=serializer.data
@@ -329,14 +344,21 @@ def post(self, request, user=None):
329344
if not serializer.is_valid():
330345
log_error(request.path, request.data, 400, serializer.errors)
331346
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
332-
347+
row = None
333348
with connection.cursor() as cursor:
334-
cursor.execute("SELECT coupon_code from applied_coupon WHERE user_id = "\
335-
+ str(user.id)\
336-
+ " AND coupon_code = '"\
337-
+ coupon_request_body['coupon_code']\
338-
+ "'")
339-
row = cursor.fetchall()
349+
try:
350+
cursor.execute("SELECT coupon_code from applied_coupon WHERE user_id = "\
351+
+ str(user.id)\
352+
+ " AND coupon_code = '"\
353+
+ coupon_request_body['coupon_code']\
354+
+ "'")
355+
row = cursor.fetchall()
356+
except Exception as e:
357+
log_error(request.path, request.data, 500, e)
358+
return Response(
359+
{'message': e},
360+
status=status.HTTP_500_INTERNAL_SERVER_ERROR
361+
)
340362

341363
if row and row != None:
342364
return Response(

services/workshop/crapi/user/views.py

+9-11
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,12 @@
2323
from rest_framework.views import APIView
2424
from crapi.user.serializers import UserDetailsSerializer
2525
from crapi.user.models import User, UserDetails
26+
from crapi_site import settings
2627
from utils.jwt import jwt_auth_required
2728
from utils import messages
2829
from utils.logging import log_error
2930

3031
logger = logging.getLogger()
31-
DEFAULT_LIMIT = 30
32-
DEFAULT_OFFSET = 0
33-
MAX_LIMIT = 100
3432

3533
class AdminUserView(APIView):
3634
"""
@@ -49,21 +47,21 @@ def get(self, request, user=None):
4947
user details and 200 status if no error
5048
message and corresponding status if error
5149
"""
52-
limit = request.GET.get('limit', str(DEFAULT_LIMIT))
53-
offset = request.GET.get('offset', str(DEFAULT_OFFSET))
50+
limit = request.GET.get('limit', str(settings.DEFAULT_LIMIT))
51+
offset = request.GET.get('offset', str(settings.DEFAULT_OFFSET))
5452
if not limit.isdigit() or not offset.isdigit():
5553
return Response(
56-
{'message': messages.INVALID_LIMIT_OFFSET},
54+
{'message': messages.INVALID_LIMIT_OR_OFFSET},
5755
status=status.HTTP_400_BAD_REQUEST
5856
)
5957
limit = int(limit)
6058
offset = int(offset)
61-
if limit > MAX_LIMIT:
62-
limit = MAX_LIMIT
63-
if int(limit) < 0:
64-
limit = DEFAULT_LIMIT
59+
if limit > settings.MAX_LIMIT:
60+
limit = 100
61+
if limit < 0:
62+
limit = settings.DEFAULT_LIMIT
6563
if offset < 0:
66-
offset = DEFAULT_OFFSET
64+
offset = settings.DEFAULT_OFFSET
6765
# Sort by id
6866
userdetails = UserDetails.objects.all().order_by('id')[offset:offset+limit]
6967
if not userdetails:

services/workshop/crapi_site/settings.py

+4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828

2929
from django.core.exceptions import ImproperlyConfigured
3030

31+
DEFAULT_LIMIT = 10
32+
DEFAULT_OFFSET = 0
33+
MAX_LIMIT = 100
3134

3235
def get_env_value(env_variable):
3336
try:
@@ -173,6 +176,7 @@ def get_env_value(env_variable):
173176
'NAME': 'test_crapi',
174177
'USER': get_env_value('DB_USER'),
175178
},
179+
'CONN_MAX_AGE': 60,
176180
},
177181
'mongodb': {
178182
'ENGINE': 'djongo',

services/workshop/requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ django-health-check==3.17.0
1010
djangorestframework==3.14.0
1111
django-sslserver==0.22
1212
djongo==1.3.6
13-
psycopg2==2.9.6
13+
psycopg2==2.9.9
1414
PyJWT==2.7.0
1515
pymongo==3.12.3
1616
pyOpenSSL==23.1.1

services/workshop/utils/messages.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,5 @@
4141
INVALID_REPORT_ID = "Please enter a valid report_id value."
4242
REPORT_DOES_NOT_EXIST = "The Report does not exist for given report_id."
4343
COULD_NOT_CONNECT = "Could not connect to mechanic api."
44-
INVALID_LIMIT_OFFSET = "Param limit and offset values should be integers."
44+
INVALID_LIMIT_OR_OFFSET = "Param limit and offset values should be integers."
4545
NO_USER_DETAILS = "No user details found."

0 commit comments

Comments
 (0)