🧬 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
@JsonIgnore
para evitar ciclos infinitos al serializar.
📋 Definiciones de entidades clave
👤 Usuario (User
)
username
,email
,password
roles
(Muchos a Muchos conRole
)posts
(Uno a Muchos conPost
)followers
/following
(Uno a Muchos conFollow
)- Implementa
UserDetails
para compatibilidad con Spring Security
📝 Post (Post
)
content
,image
,createdAt
author
(Muchos a Uno conUser
)likedBy
(Muchos a Muchos conUser
)comments
(Uno a Muchos conComment
)
💬 Comentario (Comment
)
content
author
(Muchos a Uno conUser
)post
(Muchos a Uno conPost
)
🔁 Seguimiento (Follow
)
follower
yfollowed
(ambos ManyToOne conUser
)followDate
🛡️ Rol (Role
)
id
,name
- Se relaciona con
User
para autorización
🔐 Token (Token
)
code
,content
,active
- Asociado a un
User
autenticado
🐘 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.