"""Review Validation History Model.""" import json from product_review.api import db from product_review.constants.validations import VALIDATIONS_WITH_JSON_REASON class ReviewValidationHistory(db.Model): """Review validation history model.""" __tablename__ = "review_validation_history" review_validation_history_id = db.Column( "id", db.Integer, primary_key=True, autoincrement=True, nullable=False ) review_queue_id = db.Column( db.Integer, db.ForeignKey("review_queue.id"), nullable=False ) validation_code = db.Column(db.String, nullable=False) product_id = db.Column(db.Integer, nullable=False) track_id = db.Column(db.Integer, nullable=True) details = db.Column(db.JSON, nullable=False, default={}) def to_dict(self): """Return a dictionary of output properties.""" items = {} for c in self.__table__.columns: column_name = "review_validation_history_id" if c.name == "id" else c.name items[column_name] = getattr(self, column_name) return items def get_history(review_queue_id): """Get the review validation history for a given release.""" history_query = ReviewValidationHistory.query.filter( ReviewValidationHistory.review_queue_id == review_queue_id ) results = history_query.all() total_count = history_query.count() return results, total_count def create_bulk(validations): """Create bulk review queue validation history records.""" records = [] for validation in validations: records.append( ReviewValidationHistory( review_queue_id=validation["review_queue_id"], validation_code=validation["validation_code"], product_id=validation["product_id"], track_id=validation.get("track_id"), details=_format_details( validation["validation_code"], validation["details"] ), ), ) db.session.bulk_save_objects(records) def _format_details(validation_code, details): if validation_code in VALIDATIONS_WITH_JSON_REASON: return json.loads(details) return details def delete(review_queue_id): """For integration testing purposes only, delete a review validation history.""" ReviewValidationHistory.query.filter( ReviewValidationHistory.review_queue_id == review_queue_id ).delete()