UniLink, Neo4j Grafik Veritabanı üzerine kurulu, kampüs içi etkileşimi ve sosyalleşmeyi artırmak amacıyla geliştirilmiş bir kampüs sosyal ağı uygulamasıdır. Bu depo (repository), hem FastAPI ile yazılmış backend API servislerini hem de Flutter ile geliştirilmiş mobil/web istemcisini barındırmaktadır. Projenin hem frontend hem de backend bileşenleri, ölçeklenebilirliği, test edilebilirliği ve bakımı kolaylaştırmak amacıyla Clean Architecture (Temiz Mimari) prensiplerine uygun olarak geliştirilmiştir.
UniLink is a full-featured campus social network built on a Neo4j Graph Database to enhance campus interaction and socialization. This repository contains both the FastAPI backend API services and the Flutter mobile/web client. Both frontend and backend components are developed in compliance with Clean Architecture principles to ensure scalability, testability, and maintainability.
UniLink/
├── backend/ # FastAPI Backend Servisi
│ ├── app/
│ │ ├── api/routes/ # API Uç Noktaları (Presentation/Controllers)
│ │ ├── db/ # Veritabanı Bağlantı Altyapısı (Infrastructure)
│ │ ├── models/ # Veri Modelleri (Domain/DTO)
│ │ ├── seed/ # Test Verisi Üretici (Mocking)
│ │ └── services/ # İş Mantığı & Sorgular (Application Services)
│ ├── .env # Çevre Değişkenleri
│ ├── requirements.txt # Bağımlılıklar
│ └── .venv/ # Sanal Ortam
│
├── frontend/ # Flutter Frontend Uygulaması
│ ├── lib/
│ │ ├── core/ # Paylaşılan Yapılandırmalar (Core Utility/Theme)
│ │ ├── data/ # Veri Katmanı (Data Sources, Repositories, Models)
│ │ ├── presentation/ # Sunum Katmanı (UI Screens, Widgets, Providers)
│ │ └── main.dart # Uygulama Başlangıç Noktası
│ ├── pubspec.yaml # Paket Tanımları
│ └── .gitignore # Git Kuralları
│
└── .gitignore # Global Git Kuralları
- Öğrenci Profili & Arkadaşlık Sistemi: Öğrencilerin birbirleriyle bağlantı kurmasını ve arkadaşlık ilişkilerini (gönderen, alan, onay durumu) grafik tabanlı yönetir.
- Kişiselleştirilmiş Akış (Post Feed): Takip edilen veya arkadaş olunan kişilerin paylaşımlarının anlık görüntülenmesi ve beğenilmesi.
- Kulüpler & Etkinlikler: Kampüs kulüplerine üyelik, etkinlik oluşturma, katılım sağlama ve kulüp bazlı etkinlik takibi.
- Grafik Tabanlı Öneriler:
- Arkadaş Önerisi: Arkadaşınızın arkadaşı olan ancak sizin arkadaşınız olmayan kişilerin (ortak arkadaş sayısına göre) önerilmesi.
- Etkinlik Önerisi: İlgi duyduğunuz kulüplerin veya arkadaşlarınızın katıldığı etkinliklerin size önerilmesi.
- shortestPath (Bağlantı Zinciri): Herhangi iki öğrenci arasındaki sosyal bağlantı zincirini en kısa yolla bulma.
- Backend dizinine geçiş yapın:
cd backend - Sanal ortam oluşturun ve aktif edin:
python -m venv .venv # Windows için aktif etme: .venv\Scripts\activate # macOS/Linux için aktif etme: source .venv/bin/activate
- Gerekli bağımlılıkları yükleyin:
pip install -r requirements.txt
.envdosyasını yapılandırın:backend/.envdosyası içerisine Neo4j veritabanı bilgilerinizi girin:NEO4J_URI=neo4j+s://your-neo4j-uri.databases.neo4j.io NEO4J_USERNAME=neo4j NEO4J_PASSWORD=your-password
- Veritabanını test verisi ile doldurun (Seeding):
python -m app.seed.generate
- Backend sunucusunu başlatın:
API belgelerine
uvicorn app.main:app --reload
http://127.0.0.1:8000/docsadresinden Swagger UI ile erişebilirsiniz.
- Frontend dizinine geçiş yapın:
cd ../frontend - Flutter paketlerini indirin:
flutter pub get
- Uygulamayı çalıştırın:
flutter run
- Student Profile & Friendship System: Manage friendship relations (sender, receiver, status) using Neo4j's graph structures.
- Personalized Post Feed: Instantly view and like posts shared by friends or students you follow.
- Clubs & Events: Club memberships, creating/organizing events, tracking event attendance.
- Graph-based Recommendations:
- Friend Recommendations: Recommending people who are friends of your friends (ordered by number of mutual friends).
- Event Recommendations: Recommending campus events organized by your clubs or events that your friends are attending.
- shortestPath (Social Connection Chain): Discover the shortest path of social connections between any two students.
- Navigate to the backend directory:
cd backend - Create and activate a virtual environment:
python -m venv .venv # For Windows: .venv\Scripts\activate # For macOS/Linux: source .venv/bin/activate
- Install dependencies:
pip install -r requirements.txt
- Configure the
.envfile: Enter your Neo4j database credentials insidebackend/.env:NEO4J_URI=neo4j+s://your-neo4j-uri.databases.neo4j.io NEO4J_USERNAME=neo4j NEO4J_PASSWORD=your-password
- Seed the database with mock data:
python -m app.seed.generate
- Run the backend server:
Access interactive Swagger API documentation at
uvicorn app.main:app --reload
http://127.0.0.1:8000/docs.
- Navigate to the frontend directory:
cd ../frontend - Fetch Flutter packages:
flutter pub get
- Run the application:
flutter run
UniLink, ilişkisel veritabanları yerine verilerin birbirleriyle olan bağlantılarını en doğal şekilde saklamak için bir Graph Database olan Neo4j kullanır.
Student(Öğrenci):studentId,name,department,year,email,createdAtPost(Gönderi):postId,content,likesCount,createdAtClub(Kulüp):clubId,name,categoryEvent(Etkinlik):eventId,title,date,venueFriendship(Arkadaşlık Arayüzü):friendshipId,status,requestedBy,since
(:Student)-[:POSTED]->(:Post)(:Student)-[:LIKED]->(:Post)(:Student)-[:MEMBER_OF]->(:Club)(:Student)-[:ATTENDED]->(:Event)(:Club)-[:ORGANIZED]->(:Event)(:Student)-[:SENT_BY]->(:Friendship)(:Student)-[:RECEIVED_BY]->(:Friendship)
| Kategori | Metot | Uç Nokta (Endpoint) | Açıklama / Description |
|---|---|---|---|
| Öğrenciler | POST |
/students |
Yeni öğrenci kaydı / Register new student |
GET |
/students/{studentId} |
Öğrenci detayı / Get student profile | |
| Arkadaşlık | POST |
/friendships/request |
Arkadaşlık isteği yolla / Send friend request |
POST |
/friendships/respond |
İsteği yanıtla (Kabul/Red) / Respond to request | |
GET |
/students/{studentId}/friends |
Arkadaş listesi / Get list of friends | |
| Kulüp / Etkinlik | POST |
/clubs / /events |
Kulüp / Etkinlik oluştur / Create club or event |
POST |
/clubs/join |
Kulübe katıl / Join a club | |
POST |
/events/attend |
Etkinliğe katıl / Attend an event | |
| Öneriler (Graph) | GET |
/recommendations/{studentId}/friends |
Arkadaş önerileri / Friend recommendations |
GET |
/recommendations/{studentId}/events |
Etkinlik önerileri / Event recommendations | |
GET |
/recommendations/path |
İki öğrenci arası en kısa yol / shortestPath find |