"""User Interaction Model.""" import datetime from oto import response from oto import status from sukimu.dynamodb import IndexDynamo from sukimu.dynamodb import TableDynamo from sukimu.fields import Field from sukimu.operations import Equal from sukimu.schema import Index from sukimu.schema import Schema from social_analytics import config from social_analytics.connectors import dynamodb UserInteraction = Schema( TableDynamo( config.TABLE_SOCIAL_ANALYTICS_USER_INTERACTION, dynamodb.connection), IndexDynamo( Index.PRIMARY, 'user_id', read_capacity=1, write_capacity=1 ), user_id=Field(required=True, basetype=str), artist_id=Field(required=True, basetype=str), created_date=Field(required=True, basetype=str)) def get_user_interactions_by_user_id(user_id): """Get user interactions by user_id. Args: user_id (str): the user's id. Returns: Response: the user interactions (if available). """ if not user_id: return response.create_error_response( 400, status.BAD_REQUEST) user_interactions = UserInteraction.fetch( user_id=Equal(user_id), sort=1, limit=20) if not user_interactions: return response.create_not_found_response() interactions_to_be_returned = [field for field in ( interaction._data for interaction in user_interactions.message)] return response.Response({'items': interactions_to_be_returned}) def create_user_interaction(data): """Create a user interaction. Args: data (dict): a dictionary with the necessary data to create an interaction e.g. { user_id : 1, artist_id: 2 } Returns" Response: the created user interaction. """ if not data: return response.create_error_response( 400, status.BAD_REQUEST) data['created_date'] = datetime.datetime.now().isoformat() return UserInteraction.create(**data)