Spring Boot servisi — Meta (Facebook) Graph API vasitəsilə bir səhifənin son postlarını çəkir, PostgreSQL-də saxlayır və engagement (likes + comments) əsasında performans analizi aparır: ən yüksək performanslı postlar, həftənin günlərinə görə likes statistikası, və ən "məhsuldar" gün.
- Meta Graph API inteqrasiyası — Feign Client vasitəsilə
v25.0endpoint-indən səhifə feed-ini çəkir - Avtomatik sinxronizasiya —
POST /api/posts/sync/postilə Meta-dan son postları çəkib bazaya yazır (upsert məntiqi — mövcud post yenilənir, yeni post əlavə olunur) - Engagement analizi:
- Top N ən çox engagement alan post (likes + comments)
- Həftənin günlərinə görə cəmi likes
- Ən yaxşı performans göstərən gün
- Mətn formasında ümumi nəticə (insight)
- Keş (Caching) — Spring Cache ilə (
@Cacheable) hesablama nəticələri keşlənir, yeni sync zamanı (@CacheEvict) avtomatik təmizlənir - Liquibase — verilənlər bazası sxemi migration vasitəsilə idarə olunur
- Docker Compose — tətbiq və PostgreSQL bir əmrlə qaldırılır
| Kateqoriya | Texnologiya |
|---|---|
| Dil / Runtime | Java 21 |
| Framework | Spring Boot 4.0.3 |
| Verilənlər bazası | PostgreSQL 16 |
| Migration | Liquibase |
| HTTP Client | Spring Cloud OpenFeign |
| ORM | Spring Data JPA / Hibernate |
| Mapping | MapStruct |
| Boilerplate | Lombok |
| Konteynerləşdirmə | Docker / Docker Compose |
| Connection Pool | HikariCP |
src/main/java/com/project/metapostperformanceanalysis/
├── client/ # Feign client (Meta Graph API)
├── config/ # Feign konfiqurasiyası (auth interceptor)
├── controller/ # REST endpoint-lər
├── dto/
│ ├── request/ # Daxil olan request body-lər
│ └── response/ # Xarici cavab modelləri (Meta API + öz API-miz)
├── entity/ # JPA entity-lər
├── exception/ # Global exception handling
├── mapper/ # MapStruct mapper-lər
├── repository/ # Spring Data JPA repository-lər
└── service/ # Biznes məntiqi
- Java 21+
- Maven
- Docker & Docker Compose
- Meta Developer hesabı (App ID, App Secret, Page Access Token, Page ID)
git clone https://github.com/Meta-Graph-project/meta-post-performance-analysis.git
cd meta-post-performance-analysisLayihənin kök qovluğunda (docker-compose.yaml ilə eyni qovluqda) .env faylı yaradın:
POSTGRES_PASSWORD=your_db_password
META_APP_ID=your_meta_app_id
META_APP_SECRET=your_meta_app_secret
META_PAGE_ID=your_meta_page_id
META_PAGE_ACCESS_TOKEN=your_meta_page_access_token
⚠️ Vacib:.envfaylı.gitignore-da olmalıdır və heç vaxt repo-ya commit edilməməlidir. Meta token/secret sızması bütün səhifəyə girişin kompromis olmasına səbəb ola bilər — sızma şübhəsi olarsa, Meta Developer Dashboard-dan dərhal rotasiya edin.
docker compose up -d --buildBu əmr iki konteyner qaldıracaq:
meta-performance— PostgreSQL 16meta-app— Spring Boot tətbiqi (port8081→ konteyner daxilində8080)
docker compose logs -f appTətbiq http://localhost:8081 ünvanında işə düşməlidir.
| Method | Endpoint | Təsvir |
|---|---|---|
POST |
/api/posts/sync/post |
Meta-dan son postları çəkib bazaya yazır |
GET |
/api/posts |
Bazadakı bütün postları qaytarır |
GET |
/api/posts/{id} |
ID-yə görə tək post |
GET |
/api/posts/top?limit=3 |
Ən yüksək engagement-li N post |
GET |
/api/posts/likes-by-day |
Həftənin günlərinə görə cəmi likes |
GET |
/api/posts/best-day |
Ən yaxşı performans göstərən gün |
GET |
/api/posts/analysis |
Tam analiz hesabatı (top 3, günlük statistika, nəticə mətni) |
# 1. Əvvəlcə Meta-dan datanı çəkin
curl -X POST http://localhost:8081/api/posts/sync/post
# 2. Sonra analiz hesabatını alın
curl http://localhost:8081/api/posts/analysis| Dəyişən | Təsvir |
|---|---|
POSTGRES_PASSWORD |
PostgreSQL parolu |
META_APP_ID |
Meta Developer App ID |
META_APP_SECRET |
Meta Developer App Secret |
META_PAGE_ID |
Analiz olunacaq Facebook səhifəsinin ID-si |
META_PAGE_ACCESS_TOKEN |
Səhifə üçün uzunömürlü Access Token |
Qeyd:
MetaFeignConfigsinfi hazırdapageId-niMETA_APP_PAGE_IDadlı placeholder ilə oxuyur, halbukiapplication.yml-də və.env-də dəyişənMETA_PAGE_IDadlanır. Tətbiqi işə salmazdan əvvəl bu iki adın uyğunlaşdırıldığını yoxlayın (hər ikisini eyni ada gətirin), əks haldaBeanCreationException: Could not resolve placeholderxətası alacaqsınız.
Engagement = likeCount + commentCount
- Ən yaxşı gün — bütün postlar
DayOfWeek-ə görə qruplaşdırılır, hər gün üzrə likes cəmlənir, ən yüksək nəticəyə malik gün seçilir. - Top postlar — verilənlər bazası səviyyəsində SQL sorğusu ilə (
likeCount + commentCount) azalan sırada sıralanır.
| Sütun | Tip | Təsvir |
|---|---|---|
id |
BIGINT (PK, auto) |
Daxili identifikator |
meta_post_id |
VARCHAR (unique) |
Meta-dan gələn post ID-si (dublikat qarşısını alır) |
message |
TEXT |
Post mətni |
created_time |
TIMESTAMP |
Postun yaradılma tarixi |
like_count |
INTEGER |
Bəyənmə sayı |
comment_count |
INTEGER |
Şərh sayı |
Sxem dəyişiklikləri Liquibase changelog-u (classpath:/db/changelog/db.changelog.yaml) ilə idarə olunur.
services:
postgres: # PostgreSQL 16, healthcheck ilə
app: # Spring Boot tətbiqi, postgres "healthy" olana qədər gözləyirapp servisi depends_on: condition: service_healthy istifadə edir — yəni Postgres tam hazır olmadan tətbiq başlamır, bu da tipik "Connection refused" xətalarının qarşısını alır.
| Simptom | Səbəb | Həll |
|---|---|---|
Connection to localhost:5432 refused |
Datasource URL-də localhost hardcoded qalıb, Docker şəbəkəsində bu konteynerin öz daxilini göstərir |
application.yml-də postgres servis adından istifadə edin (jdbc:postgresql://postgres:5432/...) |
Could not resolve placeholder 'META_APP_PAGE_ID' |
.env/application.yml-dəki dəyişən adı kodda istifadə olunan @Value adı ilə uyğun gəlmir |
Ad uyğunluğunu yoxlayın (META_PAGE_ID vs META_APP_PAGE_ID) |
POSTGRES_PASSWORD variable is not set xəbərdarlığı |
.env faylı docker-compose.yaml ilə eyni qovluqda deyil |
.env-i compose faylı ilə yanaşı yerləşdirin, sonra docker compose up çağırın |
service refers to undefined volume |
volumes: bloku fayldan düşüb / yarımçıq köçürülüb |
Faylın sonunda top-level volumes: bölməsinin tam olduğunu yoxlayın |
- Pagination üçün Meta Graph API-dən
paging.nextistifadəsi (hazırda sabitlimitilə işləyir) - Planlaşdırılmış (scheduled) avtomatik sync —
@Scheduledilə manualPOSTçağırışına ehtiyacı aradan qaldırmaq - Test əhatəliliyinin artırılması (unit + integration testlər)
- Swagger/OpenAPI sənədləşdirməsi
Bu layihə şəxsi/təhsil məqsədli inkişaf üçündür. Lisenziya növünü öz seçiminizə görə əlavə edin (MIT, Apache 2.0 və s.).