mirror of
https://github.com/GSA/notifications-api.git
synced 2026-01-30 06:21:50 -05:00
Merge branch 'master' into celery-jobs
This commit is contained in:
@@ -46,6 +46,7 @@ def create_app():
|
||||
from app.status.healthcheck import status as status_blueprint
|
||||
from app.job.rest import job as job_blueprint
|
||||
from app.notifications.rest import notifications as notifications_blueprint
|
||||
from app.invite.rest import invite as invite_blueprint
|
||||
|
||||
application.register_blueprint(service_blueprint, url_prefix='/service')
|
||||
application.register_blueprint(user_blueprint, url_prefix='/user')
|
||||
@@ -53,6 +54,7 @@ def create_app():
|
||||
application.register_blueprint(status_blueprint, url_prefix='/status')
|
||||
application.register_blueprint(notifications_blueprint)
|
||||
application.register_blueprint(job_blueprint)
|
||||
application.register_blueprint(invite_blueprint)
|
||||
|
||||
return application
|
||||
|
||||
|
||||
6
app/dao/invited_user_dao.py
Normal file
6
app/dao/invited_user_dao.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from app import db
|
||||
|
||||
|
||||
def save_invited_user(invited_user):
|
||||
db.session.add(invited_user)
|
||||
db.session.commit()
|
||||
0
app/invite/__init__.py
Normal file
0
app/invite/__init__.py
Normal file
24
app/invite/rest.py
Normal file
24
app/invite/rest.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from flask import (
|
||||
Blueprint,
|
||||
request,
|
||||
jsonify
|
||||
)
|
||||
|
||||
from app.dao.invited_user_dao import save_invited_user
|
||||
from app.schemas import invited_user_schema
|
||||
|
||||
invite = Blueprint('invite', __name__, url_prefix='/service/<service_id>/invite')
|
||||
|
||||
from app.errors import register_errors
|
||||
register_errors(invite)
|
||||
|
||||
|
||||
@invite.route('', methods=['POST'])
|
||||
def create_invite_user(service_id):
|
||||
invited_user, errors = invited_user_schema.load(request.get_json())
|
||||
if errors:
|
||||
return jsonify(result="error", message=errors), 400
|
||||
|
||||
save_invited_user(invited_user)
|
||||
|
||||
return jsonify(data=invited_user_schema.dump(invited_user).data), 201
|
||||
@@ -239,3 +239,26 @@ class Notification(db.Model):
|
||||
onupdate=datetime.datetime.now)
|
||||
status = db.Column(
|
||||
db.Enum(*NOTIFICATION_STATUS_TYPES, name='notification_status_types'), nullable=False, default='sent')
|
||||
|
||||
|
||||
INVITED_USER_STATUS_TYPES = ['pending', 'accepted', 'cancelled']
|
||||
|
||||
|
||||
class InvitedUser(db.Model):
|
||||
|
||||
__tablename__ = 'invited_users'
|
||||
|
||||
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
email_address = db.Column(db.String(255), nullable=False)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), index=True, nullable=False)
|
||||
from_user = db.relationship('User')
|
||||
service_id = db.Column(UUID(as_uuid=True), db.ForeignKey('services.id'), index=True, unique=False)
|
||||
service = db.relationship('Service')
|
||||
created_at = db.Column(
|
||||
db.DateTime,
|
||||
index=False,
|
||||
unique=False,
|
||||
nullable=False,
|
||||
default=datetime.datetime.now)
|
||||
status = db.Column(
|
||||
db.Enum(*INVITED_USER_STATUS_TYPES, name='invited_users_status_types'), nullable=False, default='pending')
|
||||
|
||||
@@ -128,6 +128,16 @@ class NotificationStatusSchema(BaseSchema):
|
||||
model = models.Notification
|
||||
|
||||
|
||||
class InvitedUserSchema(BaseSchema):
|
||||
class Meta:
|
||||
model = models.InvitedUser
|
||||
|
||||
@validates('email_address')
|
||||
def validate_to(self, value):
|
||||
if not email_regex.match(value):
|
||||
raise ValidationError('Invalid email')
|
||||
|
||||
|
||||
user_schema = UserSchema()
|
||||
user_schema_load_json = UserSchema(load_json=True)
|
||||
users_schema = UserSchema(many=True)
|
||||
@@ -153,3 +163,5 @@ job_email_template_notification_schema = JobEmailTemplateNotificationSchema()
|
||||
notification_status_schema = NotificationStatusSchema()
|
||||
notifications_status_schema = NotificationStatusSchema(many=True)
|
||||
notification_status_schema_load_json = NotificationStatusSchema(load_json=True)
|
||||
invited_user_schema = InvitedUserSchema()
|
||||
invited_users_schema = InvitedUserSchema(many=True)
|
||||
|
||||
@@ -27,8 +27,8 @@ from app.models import ApiKey
|
||||
from app.schemas import (
|
||||
services_schema,
|
||||
service_schema,
|
||||
api_keys_schema
|
||||
)
|
||||
api_keys_schema,
|
||||
users_schema)
|
||||
from app import email_safe
|
||||
|
||||
from flask import Blueprint
|
||||
@@ -155,3 +155,13 @@ def get_api_keys(service_id, key_id=None):
|
||||
return jsonify(result="error", message="API key not found"), 404
|
||||
|
||||
return jsonify(apiKeys=api_keys_schema.dump(api_keys).data), 200
|
||||
|
||||
|
||||
@service.route('/<service_id>/users', methods=['GET'])
|
||||
def get_users_for_service(service_id):
|
||||
fetched = dao_fetch_service_by_id(service_id)
|
||||
if not fetched:
|
||||
return jsonify(data=[])
|
||||
|
||||
result = users_schema.dump(fetched.users)
|
||||
return jsonify(data=result.data)
|
||||
|
||||
Reference in New Issue
Block a user