ContactBridge

Log | Files | Refs | README

spam.py (3137B)


      1 import math
      2 
      3 from database.repository import DbRepository
      4 
      5 
      6 class SpamModel:
      7     def __init__(self):
      8         self.db_repository = DbRepository()
      9 
     10     def get_page(self, page, page_size, sort="id", sort_order="ASC", search=''):
     11         search_term = f"%{search}%"
     12 
     13         common_sql_query_base = f"""
     14                FROM spam
     15                WHERE (name LIKE ? OR email LIKE ? OR subject LIKE ? OR content LIKE ?)
     16            """
     17 
     18         total_messages_query = f"""
     19             SELECT COUNT(*)
     20             {common_sql_query_base}
     21         """
     22 
     23         total_messages = self.db_repository.execute_query(
     24             total_messages_query,
     25             (search_term, search_term, search_term, search_term),
     26             expect_result=True
     27         )
     28 
     29         total_messages_count = total_messages[0][0] if total_messages else 0
     30         offset = (page - 1) * page_size
     31         total_pages = math.ceil(total_messages_count / page_size)
     32 
     33         paginated_messages_query = f"""
     34                 SELECT id, name, email, subject, content, timestamp, relevance
     35                 {common_sql_query_base}
     36                 ORDER BY {sort} {sort_order} 
     37                 LIMIT ? OFFSET ?
     38             """
     39 
     40         paginated_messages = self.db_repository.execute_query(
     41             paginated_messages_query,
     42             (search_term, search_term, search_term, search_term, page_size, offset),
     43             expect_result=True
     44         )
     45 
     46         labeled_messages = [
     47             {
     48                 'id': message[0],
     49                 'name': message[1],
     50                 'email': message[2],
     51                 'subject': message[3],
     52                 'content': message[4],
     53                 'timestamp': message[5],
     54                 'relevance': message[6]
     55             }
     56             for message in paginated_messages
     57         ]
     58 
     59         return labeled_messages, total_pages
     60 
     61     def get(self, message_id):
     62         query = 'SELECT * FROM spam WHERE id = ?'
     63         result = self.db_repository.execute_query(query, (message_id,), expect_result=True)
     64 
     65         if result:
     66             message = result[0]
     67             labeled_message = {
     68                     'id': message[0],
     69                     'name': message[1],
     70                     'email': message[2],
     71                     'subject': message[3],
     72                     'content': message[4],
     73                     'timestamp': message[5],
     74                     'relevance': message[6]
     75                 }
     76             return labeled_message
     77 
     78         return None
     79 
     80     def create(self, parameters):
     81         create_query = """
     82             INSERT INTO spam (name, email, subject, content, relevance) 
     83             VALUES (?, ?, ?, ?, ?)
     84         """
     85         self.db_repository.execute_query(create_query, parameters)
     86 
     87     def update(self, parameters):
     88         update_query = """
     89             UPDATE spam
     90             SET name = ?, email = ?, subject = ?, content = ?, relevance = ?
     91             WHERE id = ?
     92         """
     93         self.db_repository.execute_query(update_query, parameters)
     94 
     95     def delete(self, message_id):
     96         delete_query = "DELETE FROM spam WHERE id = ?"
     97         self.db_repository.execute_query(delete_query, (message_id,))