Exibir no perfil do usuário suas respectivas postagens

Planejamento Arquitetural do Sistema

  • View (profile.php):

    • Exibe as postagens do usuário em uma seção específica do perfil.

    • Renderiza cada post com a imagem, data de upload e descrição (se houver).

  • Controller (profile-user.php):

    • Recupera as postagens do usuário utilizando o DAO.

    • Passa os dados das postagens para a view.

  • DAO (posts-dao.php):

    • Executa a query SQL para buscar as postagens do usuário, juntamente com as informações do usuário que fez o post.

Na Prática

Arquivo: view/profile.php

<!-- Seção de Feed de Posts -->
<section class="info-section">
  <?php if ($userPosts): ?>
  <!-- Itera sobre cada post do usuário -->
  <?php foreach ($userPosts as $post): ?>
  <div class="feed-photo-container">
    <?php if (!empty($post['photo_url'])): ?>
    <!-- Exibe a imagem do post -->
    <img
      src="<?= BASE_URL . 'uploads/feed/' . htmlspecialchars($post['photo_url']) ?>"
      alt="Imagem do post"
      class="feed-image"
    />
    <?php endif; ?>

    <!-- Exibe a descrição do post (se houver) -->
    <?php if (!empty($post['description'])): ?>
    <p class="post-description">
      <?= htmlspecialchars($post['description']) ?>
    </p>
    <?php endif; ?>

    <!-- Exibe a data de upload do post -->
    <p class="post-date">
      Postado em:
      <?= date('d/m/Y H:i', strtotime($post['upload_date'])) ?>
    </p>
  </div>
  <?php endforeach; ?>
  <?php else: ?>
  <!-- Mensagem caso o usuário não tenha postagens -->
  <p>Nenhuma postagem encontrada.</p>
  <?php endif; ?>
</section>
  • Responsabilidade:

    • Exibe as postagens do usuário em uma seção específica do perfil.

    • Itera sobre a lista de postagens ($userPosts) e renderiza cada post com:

      • Imagem do post.

      • Descrição do post (se houver).

      • Data de upload do post.

  • Se não houver postagens, exibe uma mensagem informando que não há postagens.


Arquivo: src/controllers/users/profile-user.php

<?php
// ... (código anterior para buscar informações do perfil)

$postsDao = new PostsDao();
$userPosts = $postsDao->getPostsById($user_id);

$userProfileData = [
    // ... (outros dados do perfil)
    'photos' => $userPosts, // Passa as postagens para a view
];
?>
  • Responsabilidade:

    • Após buscar as informações do perfil, o controller utiliza o PostsDao para buscar as postagens do usuário.

    • Passa os dados das postagens para a view.


Arquivo: src/dao/posts-dao.php

public function getPostsById($userId) {
    $sql = "SELECT p.id, p.photo_url, p.upload_date, p.description, u.username, u.profile_pic_url
            FROM posts p
            JOIN users u ON p.user_id = u.id
            WHERE p.user_id = :userId
            ORDER BY p.upload_date DESC";

    $stmt = $this->db->prepare($sql);
    $stmt->execute([':userId' => $userId]);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
  • Responsabilidade:

    • Executa uma query SQL para buscar as postagens do usuário, juntamente com as informações do usuário que fez o post.

    • Ordena os posts pela data de upload (do mais recente para o mais antigo).

    • Retorna um array associativo com os dados dos posts.


Fluxo Completo

  1. O usuário acessa a página de perfil (profile.php).

  2. O controller (profile-user.php) é chamado para recuperar os dados do perfil e as postagens do usuário.

3.O controller utiliza o PostsDao para buscar as postagens do usuário.

  1. Os dados das postagens são passados para a view (profile.php).

  2. A view renderiza as postagens do usuário em uma seção específica do perfil.