[WIP] On create of notification. Upsert record for template stats

recording usages of template by day.
This commit is contained in:
Adam Shimali
2016-03-31 15:57:50 +01:00
parent 7ec1f31bab
commit ca9c886c3e
6 changed files with 289 additions and 28 deletions

View File

@@ -1,9 +1,34 @@
from app import create_uuid, DATETIME_FORMAT, DATE_FORMAT
from app import notify_celery, encryption, firetext_client, aws_ses_client
from datetime import datetime
from flask import current_app
from sqlalchemy.exc import SQLAlchemyError
from app.clients.email.aws_ses import AwsSesClientException
from app.clients.sms.firetext import FiretextClientException
from app.dao.services_dao import dao_fetch_service_by_id
from app.dao.templates_dao import dao_get_template_by_id
from utils.template import Template
from utils.recipients import (
RecipientCSV,
validate_and_format_phone_number
)
from app import (
create_uuid,
DATETIME_FORMAT,
DATE_FORMAT,
notify_celery,
encryption,
firetext_client,
aws_ses_client
)
from app.aws import s3
from app.dao.users_dao import delete_codes_older_created_more_than_a_day_ago
from app.dao.invited_user_dao import delete_invitations_created_more_than_two_days_ago
from app.dao.notifications_dao import (
dao_create_notification,
dao_update_notification,
@@ -12,21 +37,22 @@ from app.dao.notifications_dao import (
dao_get_notification_statistics_for_service_and_day,
update_notification_reference_by_id
)
from app.dao.jobs_dao import dao_update_job, dao_get_job_by_id
from app.dao.users_dao import delete_codes_older_created_more_than_a_day_ago
from app.dao.invited_user_dao import delete_invitations_created_more_than_two_days_ago
from app.dao.jobs_dao import (
dao_update_job,
dao_get_job_by_id
)
from app.models import (
Notification,
TEMPLATE_TYPE_EMAIL,
TEMPLATE_TYPE_SMS
)
from flask import current_app
from sqlalchemy.exc import SQLAlchemyError
from app.aws import s3
from datetime import datetime
from utils.template import Template
from utils.recipients import RecipientCSV, validate_and_format_phone_number
from app.validation import (allowed_send_to_email, allowed_send_to_number)
from app.validation import (
allowed_send_to_email,
allowed_send_to_number
)
@notify_celery.task(name="delete-verify-codes")

View File

@@ -1,15 +1,28 @@
from sqlalchemy import desc
from datetime import (
datetime,
timedelta,
date
)
from flask import current_app
from app import db
from app.models import (
Notification,
Job,
NotificationStatistics,
TemplateStatistics,
TEMPLATE_TYPE_SMS,
TEMPLATE_TYPE_EMAIL,
Template)
from sqlalchemy import desc
from datetime import datetime, timedelta
from app.clients import (STATISTICS_FAILURE, STATISTICS_DELIVERED, STATISTICS_REQUESTED)
Template
)
from app.clients import (
STATISTICS_FAILURE,
STATISTICS_DELIVERED,
STATISTICS_REQUESTED
)
def dao_get_notification_statistics_for_service(service_id):
@@ -48,6 +61,18 @@ def dao_create_notification(notification, notification_type):
emails_requested=1 if notification_type == TEMPLATE_TYPE_EMAIL else 0
)
db.session.add(stats)
update_count = db.session.query(TemplateStatistics).filter_by(
day=date.today(),
service_id=notification.service_id,
template_id=notification.template_id
).update({'usage_count': TemplateStatistics.usage_count + 1})
if update_count == 0:
template_stats = TemplateStatistics(template_id=notification.template_id,
service_id=notification.service_id)
db.session.add(template_stats)
db.session.add(notification)
db.session.commit()
except:

View File

@@ -1,9 +1,14 @@
import uuid
import datetime
from sqlalchemy import UniqueConstraint, Sequence
from . import db
import datetime
from sqlalchemy.dialects.postgresql import (UUID, ARRAY)
from sqlalchemy.dialects.postgresql import (
UUID,
ARRAY
)
from app.encryption import (
hashpw,
check_hash
@@ -346,3 +351,14 @@ class Permission(db.Model):
__table_args__ = (
UniqueConstraint('service_id', 'user_id', 'permission', name='uix_service_user_permission'),
)
class TemplateStatistics(db.Model):
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
service_id = db.Column(UUID(as_uuid=True), db.ForeignKey('services.id'), index=True, unique=False, nullable=False)
service = db.relationship('Service', backref=db.backref('template_statics', lazy='dynamic'))
template_id = db.Column(db.BigInteger, db.ForeignKey('templates.id'), index=True, nullable=False, unique=False)
template = db.relationship('Template')
usage_count = db.Column(db.BigInteger, index=False, unique=False, nullable=False, default=1)
day = db.Column(db.Date, index=True, nullable=False, unique=False, default=datetime.date.today)

View File

@@ -20,11 +20,11 @@ from app.dao import (
services_dao,
notifications_dao
)
from app.schemas import (
email_notification_schema,
sms_template_notification_schema,
notification_status_schema,
template_schema,
notifications_filter_schema
)
from app.celery.tasks import send_sms, send_email