🧬 Modelo de Base de Datos - MiniTweet API
La base de datos de MiniTweet está diseñada bajo un enfoque n-tier, usando una arquitectura relacional con PostgreSQL como gestor.
Gracias a JPA (Java Persistence API), las entidades Java se mapean directamente a tablas en la base de datos.
🗃️ Entidades principales
| Entidad | Descripción breve | 
|---|---|
User | 
Representa a los usuarios del sistema | 
Post | 
Publicaciones de los usuarios | 
Comment | 
Comentarios en publicaciones | 
Follow | 
Relaciones de seguimiento entre usuarios | 
Role | 
Roles de usuario (ADMIN, USER, etc.) | 
Token | 
Tokens JWT activos para sesiones | 
🔗 Diagrama de relaciones

🧠 Cada relación está optimizada para el rendimiento y el control de acceso, incluyendo protecciones con anotaciones
@JsonIgnorepara evitar ciclos infinitos al serializar.
📋 Definiciones de entidades clave
👤 Usuario (User)
username,email,passwordroles(Muchos a Muchos conRole)posts(Uno a Muchos conPost)followers/following(Uno a Muchos conFollow)- Implementa 
UserDetailspara compatibilidad con Spring Security 
📝 Post (Post)
content,image,createdAtauthor(Muchos a Uno conUser)likedBy(Muchos a Muchos conUser)comments(Uno a Muchos conComment)
💬 Comentario (Comment)
contentauthor(Muchos a Uno conUser)post(Muchos a Uno conPost)
🔁 Seguimiento (Follow)
followeryfollowed(ambos ManyToOne conUser)followDate
🛡️ Rol (Role)
id,name- Se relaciona con 
Userpara autorización 
🔐 Token (Token)
code,content,active- Asociado a un 
Userautenticado 
🐘 Configuración de PostgreSQL
Para correr PostgreSQL localmente con Docker:
🧱 Docker Compose
# docker-compose.yml
version: '3.1'
services:
  postgres:
    image: postgres:15
    restart: always
    container_name: minitweet-postgres
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: admin
      POSTGRES_DB: minitweet_db
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:
🏃♂️ Iniciar el contenedor
docker-compose up -d
La base de datos estará disponible en localhost:5432 con las credenciales proporcionadas.
⚙️ Configuración en Spring Boot
Asegúrate de tener las siguientes propiedades en tu archivo application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/minitweet_db
spring.datasource.username=postgres
spring.datasource.password=admin
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
Puedes cambiar estos valores según tu entorno o usar variables de entorno con application.yml o application-dev.properties.
🧪 Tips de desarrollo
- Usa herramientas como pgAdmin, DBeaver o TablePlus para visualizar tus datos.
 - Evita exponer contraseñas o tokens directamente desde las entidades.
 - Usa @JsonIgnore o @JsonView para controlar lo que envías en las respuestas.