def process_document_ts_write(data, context): """ Updates create and modified timestamps on documents. """ with setup(data, context): from phenoback.functions import documents collection_path = get_collection_path(context) document_id = get_document_id(context) if is_create_event(data): log.info( "update created ts on document %s (%s)", context.resource, get_field(data, "source", expected=False), ) documents.update_created_document(collection_path, document_id) elif is_update_event(data) and not is_field_updated( data, documents.MODIFIED_KEY): log.info( "update modified ts on document %s %s (%s)", context.resource, get_fields_updated(data), get_field(data, "source", expected=False), ) documents.update_modified_document(collection_path, document_id) elif is_delete_event(data): log.info("document %s was deleted", context.resource) else: log.debug( "Nothing to do for document %s (%s)", context.resource, get_field(data, "source", old_value=True, expected=False), )
def process_user_write(data, context): """ Processes user related documents if a user is created, modified or deleted. """ with setup(data, context): from phenoback.functions import users user_id = get_document_id(context) if is_update_event(data) and is_field_updated(data, "nickname"): log.info("update nickname for %s", user_id) users.process_update_nickname( user_id, get_field(data, "nickname", old_value=True), get_field(data, "nickname"), ) elif is_delete_event(data): log.info("delete user %s", user_id) users.process_delete_user( user_id, get_field(data, "nickname", old_value=True)) elif is_create_event(data): log.info("create user %s", user_id) users.process_new_user(user_id, get_field(data, "nickname")) else: log.debug("Nothing to do for %s", user_id)
def process_observation_update_analytics(data, context): """ Updates analytical values in Firestore if the observation date was modified on a observation document. """ with setup(data, context): if is_field_updated(data, "date"): process_observation_create_analytics(data, context)
def process_invite_write(data, context): """ Send email invites if invite is created or resend is set """ with setup(data, context): from phenoback.functions.invite import invite # process if new invite or resend was changed but not deleted if is_create_event(data) or (is_field_updated( data, "resend") and get_field(data, "resend", expected=False)): invite.process( get_document_id(context), get_field(data, "email"), get_field(data, "locale"), get_field(data, "user"), get_field(data, "sent", expected=False), )
def process_observation_write_activity(data, context): """ Creates an activity when an observation is created, modified or deleted in Firestore **and** the user or individual of that observation is being followed. """ with setup(data, context): observation_id = get_document_id(context) if is_create_event(data): log.info("Add create activity for observation %s", observation_id) _process_observation_activity(data, context, "create") elif is_field_updated(data, "date"): log.info("Add modify activity for observation %s", observation_id) _process_observation_activity(data, context, "modify") elif is_delete_event(data): log.info("Add delete activity for observation %s", observation_id) _process_observation_activity(data, context, "delete") else: log.debug("No activity to add")
def process_user_write_update_invite(data, context): """ Processes invite related documents if a user is created, modified or deleted. """ with setup(data, context): from phenoback.functions.invite import register user_id = get_document_id(context) nickname = get_field(data, "nickname", expected=False) # don't warn on delete event if is_update_event(data) and is_field_updated(data, "nickname"): log.debug("update nickname on invites for user %s", user_id) register.change_nickname(user_id, nickname) elif is_delete_event(data): log.debug("delete invites for user %s", user_id) register.delete_user(user_id) elif is_create_event(data): log.debug("update invites for user %s", user_id) register.register_user(user_id, nickname) else: log.debug("Nothing to do for %s", user_id)