From ebef491c42ca4320b44af0b510b85f4db25bcc87 Mon Sep 17 00:00:00 2001
From: a-eloCard <esrsc23@inf.ufpr.br>
Date: Mon, 2 Sep 2024 11:19:11 -0300
Subject: [PATCH] Issue #2: UPDATE Inserting a route to 'who we are'

---
 app.py | 113 +++++++++++++++++++++++++++++++--------------------------
 1 file changed, 62 insertions(+), 51 deletions(-)

diff --git a/app.py b/app.py
index 1085f2c..01507a8 100644
--- a/app.py
+++ b/app.py
@@ -1,43 +1,51 @@
-# Importando bibliotecas 
-# Flask = Criação aplicação/serviço Web
-# Request permite acessar as requisições
 from flask import Flask, request
 import os
 
 app = Flask(__name__)
 
-# Diretório onde os arquivos Markdown serão salvos
-DIR = os.path.join(os.getcwd(), '../cms-c3sl/themes/c3sl/exampleSite/content/noticia')
+# Diretórios onde os arquivos Markdown serão salvos
+DIR_O_C3SL = os.path.join(os.getcwd(), '../cms-c3sl/themes/c3sl/exampleSite/content')
+DIR_POSTS = os.path.join(os.getcwd(), '../cms-c3sl/themes/c3sl/exampleSite/content/noticia')
 
-
-def create_or_update_post(post_id, data, event):
+def create_or_update_post(post_id, data, event, content_type):
     if not data:
         return
     
-    # Armazena todos os atributos do JSON usando a própria variável Data
-    attributes = data.get('entry', {})
-    content = attributes.get('Descricao', '')
-    published_at = attributes.get('Data', '')
-    title = attributes.get('Titulo', '')
-    author = attributes.get('Autor', '')
-    summary = attributes.get('Sumario', '')
-    
-    # Acessa a URL da imagem da imagem da lista
-    images = attributes.get('Imagem', [])
-    if images and isinstance(images, list):
-        image_url = images[0].get('url', '')
-    else:
-        image_url = ''
-
-    # Cria o nome do arquivo conforme o ID da notícia
-    file_name = f"{post_id}.md"
-    file_path = os.path.join(DIR, file_name)
+    if content_type == 'o-c3sl':
+        attributes = data.get('entry', {})
+        title = attributes.get('Titulo', '')
+        content = attributes.get('Descricao', '')
 
-    # Adiciona a linha "Edited: true" caso o evento seja de atualização da notícia
-    edited_line = 'Edited: true\n' if event == 'entry.update' else ''
+        # Nome fixo para single type
+        file_name = "quem-somos.md"
+        file_path = os.path.join(DIR_O_C3SL, file_name)
 
-    # Escreve os dados no formato Markdown na variável content_markdown
-    content_markdown = f"""---
+        content_markdown = f"""---
+title: "{title}"
+layout: 'legal'
+---
+{content}
+"""
+    else:
+        attributes = data.get('entry', {})
+        content = attributes.get('Descricao', '')
+        published_at = attributes.get('Data', '')
+        title = attributes.get('Titulo', '')
+        author = attributes.get('Autor', '')
+        summary = attributes.get('Sumario', '')
+        
+        images = attributes.get('Imagem', [])
+        if images and isinstance(images, list):
+            image_url = images[0].get('url', '')
+        else:
+            image_url = ''
+
+        file_name = f"{post_id}.md"
+        file_path = os.path.join(DIR_POSTS, file_name)
+
+        edited_line = 'Edited: true\n' if event == 'entry.update' else ''
+
+        content_markdown = f"""---
 title: "{title}"
 date: "{published_at}"
 author: "{author}"
@@ -49,41 +57,44 @@ summary: "{summary}"
 {content}
 """
 
-    # Escreve o arquivo no caminho solicitado
-    with open(file_path, 'w', encoding='utf8') as file:
-        file.write(content_markdown)
+    try:
+        with open(file_path, 'w', encoding='utf8') as file:
+            file.write(content_markdown)
+        #print(f"Conteúdo do Markdown criado/atualizado para o post ID {post_id}:\n{content_markdown}\n")
+        #print(f"Post '{title}' salvo como {file_path}")
+    except Exception as e:
+        print(f"Erro ao escrever o arquivo: {e}")
 
-    print(f"Conteúdo do Markdown criado/atualizado para o post ID {post_id}:\n{content_markdown}\n")
-    print(f"Post '{title}' salvo como {file_path}")
+def delete_post(post_id, content_type):
+    if content_type == 'post':
+        file_name = f"{post_id}.md"
+        file_path = os.path.join(DIR_POSTS, file_name)
 
-# Função responsável por excluir o post quando a requisição é do tipo delete ou unpublish
-def delete_post(post_id):
-    file_name = f"{post_id}.md"
-    file_path = os.path.join(DIR, file_name)
+        if os.path.exists(file_path):
+            os.remove(file_path)
+            #print(f"Post com ID {post_id} deletado")
+        else:
+            print(f"Arquivo com ID {post_id} não encontrado para exclusão")
 
-    if os.path.exists(file_path):
-        os.remove(file_path)
-        print(f"Post com ID {post_id} deletado")
-    else:
-        print(f"Arquivo com ID {post_id} não encontrado para exclusão")
 
 @app.route('/run-script', methods=['POST'])
 def run_script():
-    # Recebe o JSON enviado pelo webhooks do Strapi
     data = request.json
-    
-    # Armazena o ID do post e também o tipo de evento (update, create ou delete...)
+    #print("Dados recebidos:", data)
+
     post_id = data.get('entry', {}).get('id')
-    event = data.get('event')  # Extraindo tipo do evento
-    print(f"Evento: {event}, ID: {post_id}")
+    event = data.get('event')
+    content_type = data.get('model', '')  # Obtém o tipo de conteúdo do Strapi
+
+    print(f"Evento: {event}, ID: {post_id}, Tipo: {content_type}")
 
     if not post_id:
         return "ID not found in JSON", 400
 
-    if event in ['entry.update','entry.publish']:
-        create_or_update_post(post_id, data, event)
+    if event in ['entry.update', 'entry.publish']:
+        create_or_update_post(post_id, data, event, content_type)
     elif event in ['entry.delete', 'entry.unpublish']:
-        delete_post(post_id)
+        delete_post(post_id, content_type)
     else:
         return "Evento não reconhecido", 400
 
-- 
GitLab