Merge pull request #538 from alphagov/services-speed-up

Speed up GET services endpoints
This commit is contained in:
Leo Hemsted
2016-07-21 14:03:44 +01:00
committed by GitHub
2 changed files with 33 additions and 5 deletions

View File

@@ -3,6 +3,7 @@ import uuid
from app import db from app import db
from app.models import Service from app.models import Service
from sqlalchemy import asc from sqlalchemy import asc
from sqlalchemy.orm import joinedload
from app.dao.dao_utils import ( from app.dao.dao_utils import (
transactional, transactional,
@@ -27,19 +28,38 @@ from app.models import (
def dao_fetch_all_services(): def dao_fetch_all_services():
return Service.query.order_by(asc(Service.created_at)).all() return Service.query.order_by(
asc(Service.created_at)
).options(
joinedload('users')
).all()
def dao_fetch_service_by_id(service_id): def dao_fetch_service_by_id(service_id):
return Service.query.filter_by(id=service_id).one() return Service.query.filter_by(
id=service_id
).options(
joinedload('users')
).one()
def dao_fetch_all_services_by_user(user_id): def dao_fetch_all_services_by_user(user_id):
return Service.query.filter(Service.users.any(id=user_id)).order_by(asc(Service.created_at)).all() return Service.query.filter(
Service.users.any(id=user_id)
).order_by(
asc(Service.created_at)
).options(
joinedload('users')
).all()
def dao_fetch_service_by_id_and_user(service_id, user_id): def dao_fetch_service_by_id_and_user(service_id, user_id):
return Service.query.filter(Service.users.any(id=user_id)).filter_by(id=service_id).one() return Service.query.filter(
Service.users.any(id=user_id),
Service.id == service_id
).options(
joinedload('users')
).one()
@transactional @transactional

View File

@@ -106,7 +106,15 @@ class ServiceSchema(BaseSchema):
class Meta: class Meta:
model = models.Service model = models.Service
exclude = ("updated_at", "created_at", "api_keys", "templates", "jobs", 'old_id') exclude = ('updated_at',
'created_at',
'api_keys',
'templates',
'jobs',
'old_id',
'template_statistics',
'service_provider_stats',
'service_notification_stats')
strict = True strict = True
@validates('sms_sender') @validates('sms_sender')