eventHubAPI
Kompleksowy backend REST API do zarządzania eventami — Spring Boot 3.3, JWT, PostgreSQL, Swagger. System ról, zaproszeń, powiadomień i multimediów w jednym serwisie.
Backend
od zera do API
eventHubAPI to w pełni funkcjonalny serwis backendowy do zarządzania eventami, zbudowany w Spring Boot 3.3. Projekt był realizowany na Akademii Tarnowskiej jako aplikacja backendowa.
Architektura warstwowa — Controller → Service → Repository — z pełną dokumentacją Swagger UI, hierarchicznym systemem ról i bazą PostgreSQL z dobrze zaprojektowanym schematem relacyjnym.
Stack technologiczny
Jak to działa
Każde żądanie przechodzi przez JwtAuthenticationFilter.
Token wyciągany z nagłówka Authorization: Bearer,
walidowany i mapowany na SecurityContext.
// SecurityConfiguration
.requestMatchers("/api/auth/**")
.permitAll()
.anyRequest()
.authenticated()
// Filter: JwtAuthenticationFilter
// → JwtTokenProvider.validate()
// → SecurityContextHolder.set()
Trzy poziomy dostępu: USER, ORGANIZER, ADMIN.
Każdy endpoint zabezpieczony przez @PreAuthorize
lub konfigurację SecurityFilterChain.
// Tylko ORGANIZER i ADMIN
@PreAuthorize(
"hasAnyRole('ORGANIZER','ADMIN')")
public EventDto createEvent(...) {}
// Tylko ADMIN
@PreAuthorize("hasRole('ADMIN')")
public void deleteAccount(...) {}
Encja Participant używa złożonego klucza głównego
ParticipantId (userId + eventId) — jeden użytkownik
może być uczestnikiem eventu tylko raz.
@Entity
@IdClass(ParticipantId.class)
public class Participant {
@Id private Long userId;
@Id private Long eventId;
private ParticipantStatus status;
private EventRole eventRole;
}
Pliki multimedialne przechowywane bezpośrednio w bazie jako
bytea. Trzy typy użycia: GALLERY, LOGO, SCHEDULE —
enum MediaUsage.
@Entity
public class Media {
@Lob
private byte[] mediaFile;
private MediaType mediaType;
// IMAGE | DOCUMENT | VIDEO
private MediaUsage usage;
// GALLERY | LOGO | SCHEDULE
}
Lokalizacje zbudowane w pełnej hierarchii: Country → Region → City → PostalCode → Location → MapLocation z geolokacją jako osobna encja 1:1.
Location
└─ PostalCode
└─ City
└─ Region
└─ Country
└─ MapLocation (lat/lng)
└─ street_name
└─ street_number
Tabela join account_notification łączy użytkowników
z powiadomieniami ze statusem per para.
Jeden komunikat może trafić do wielu odbiorców.
// account_notification (join table) account_id (FK → Account) notification_id (FK → Notification) status (UNREAD|READ|ARCHIVED) // Endpoint paginowany: GET /api/notifications?page=0&size=20
Endpointy
Schemat encji
Jak uruchomić
git clone https://github.com/DominikFa/eventHubAPI.git cd eventHubAPI
# src/main/resources/application.properties spring.datasource.url=jdbc:postgresql://localhost:5432/event_hub spring.datasource.username=YOUR_USER spring.datasource.password=YOUR_PASSWORD
./mvnw clean package ./mvnw spring-boot:run
# Swagger UI: http://localhost:8080/swagger-ui.html # OpenAPI JSON: http://localhost:8080/v3/api-docs