Universite Akisi ve Etkilesim¶
USER DOMAINI¶
Kisa amac: login sonrasi kullanicinin kendi universite bilgisini cekip Home AppBar'da gostermek.
Frontend -> Backend Akisi (dosya zinciri)¶
kullanıcının own university bilgisini çeker //GetCurrentUniversityContext
app/lib/core/navigation/app_shell.dart
-> app/lib/features/home/presentation/screens/home_screen.dart
-> app/lib/features/universities/presentation/cubit/university_context_cubit.dart
-> app/lib/features/universities/data/university_context_repository.dart
-> app/lib/features/universities/data/university_context_grpc_client.dart
-> proto/yackr/v1/yackr.proto
-> backend/internal/server/server.go
-> backend/internal/user/handler.go
-> backend/internal/user/service.go
-> backend/internal/user/repository.go
Kisa not¶
app_shell.dartteknik tetikleme/orkestrasyon merkezidir (cubit load, prop gecis, selector acma).home_screen.dartgosterim katmanidir (universityName prop'unu AppBar'da gosterir).university_context_state.dartcagrı zinciri adimi degildir:- backend'e gitmez
- veri tasima modeli olarak cubit durumlarini tanimlar (
Initial,Loading,Ready,Failure).
Frontend -> Backend Akisi (dosya zinciri)¶
universite selector acildiginda listeleme + arama yapar //ListUniversities
app/lib/core/navigation/app_shell.dart
-> app/lib/features/universities/presentation/widgets/university_selector_sheet.dart
-> app/lib/features/universities/presentation/cubit/universities_cubit.dart
-> app/lib/features/universities/data/universities_repository.dart
-> app/lib/features/universities/data/universities_grpc_client.dart
-> proto/yackr/v1/yackr.proto
-> backend/internal/server/server.go
-> backend/internal/user/handler.go
-> backend/internal/user/service.go
-> backend/internal/user/repository.go
Kisa not¶
university_selector_sheet.dartarama inputunu ve secim listesini yonetir.universities_cubit.dartquery degistiginde listeyi yeniler ve load more akisini yonetir.universities_state.dartcagrı zinciri adimi degildir:- backend'e gitmez
- listeleme/arama durumunu tasir (
isLoading,query,universities,hasMore,nextCursor).
POST DOMAINI¶
Kisa amac: Home feed'de secili universiteye gore postlari listelemek ve universite disi etkilesimleri can_interact ile kontrol etmek.
Frontend -> Backend Akisi (dosya zinciri)¶
home feed listeleme + secili universite filtresi //ListPosts
app/lib/core/navigation/app_shell.dart
-> app/lib/features/home/presentation/screens/home_screen.dart
-> app/lib/features/posts/presentation/widgets/post_list_view.dart
-> app/lib/features/posts/presentation/widgets/post_card.dart
-> app/lib/features/posts/presentation/cubit/posts_listing_cubit.dart
-> app/lib/features/posts/data/posts_repository.dart
-> app/lib/features/posts/data/posts_grpc_client.dart
-> proto/yackr/v1/yackr.proto
-> backend/internal/server/server.go
-> backend/internal/post/handler.go
-> backend/internal/post/service.go
-> backend/internal/post/repository.go
-> backend/internal/post/interaction_guard.go
Kisa not¶
app_shell.dartsecili universiteyi post akisina tasir ve feed yenilemeyi tetikler.selectedUniversityIdverisiUniversityContextCubitstate'inden gelir (UniversityContextReady),app_shell.darticindeawait _homePostsListingCubit.loadInitial(universityId: state.selectedUniversityId);satiriyla post akisini baslatir.- Bu verinin kaynagi import + kurulumdur:
university_context_grpc_client.dart+university_context_repository.dart+university_context_cubit.dartimport edilir,_universityContextCubit = UniversityContextCubit(... )..load();ile veri cekilip state'e yazilir. home_screen.darthome feed gosterim katmanidir; post listesini UI'de baslatan ekran tarafidir.post_list_view.dartvepost_card.dartlisteyi/render'i gosterim katmaninda yonetir.posts_listing_cubit.dartsecili universiteyi (selectedUniversityId) ve liste durumunu yonetir.posts_listing_state.dartcagrı zinciri adimi degildir:- backend'e gitmez
- listeleme durumunu tasir (
selectedCategory,selectedUniversityId,posts,hasMore,nextCursor). Post.can_interactbackend'de hesaplanir ve frontend'de etkilesim izinleri icin kullanilir.
POST DOMAINI¶
Kisa amac: Post detail ve feed comment sheet akisinda, universite disi yorum/yanit etkilesimlerini backend'de zorunlu kontrol etmek ve frontend'de can_interact ile read-only davranis uygulamak.
Frontend -> Backend Akisi (dosya zinciri)¶
yorum/yanit etkilesim izin kontrolu + read-only davranis //ListPostComments + ListCommentReplies + CreatePostComment + GetCommentById
app/lib/features/posts/presentation/widgets/post_list_view.dart
-> app/lib/features/posts/presentation/screens/post_detail_screen.dart
-> app/lib/features/posts/presentation/widgets/post_comments_sheet.dart
-> app/lib/features/posts/presentation/cubit/post_comments_cubit.dart
-> app/lib/features/posts/presentation/cubit/post_comments_state.dart
-> app/lib/features/posts/data/posts_repository.dart
-> app/lib/features/posts/data/posts_grpc_client.dart
-> proto/yackr/v1/yackr.proto
-> backend/internal/server/server.go
-> backend/internal/post/comment_handler.go
-> backend/internal/post/comment_service.go
-> backend/internal/post/comment_repository.go
-> backend/internal/post/interaction_guard.go
Kisa not¶
- Giris ucu iki farkli noktadir:
post_list_view.dartvepost_detail_screen.dart; ikisi deshowPostCommentsSheet(...)cagirir. post_comments_sheet.dart,canInteractfalse oldugunda yorum gonderme ve yanit baslatma aksiyonlarini read-only olarak bloke eder.post_comments_cubit.dart, yorum/reply guncellemelerindecanInteractbilgisini korur (..canInteract = source.canInteract).post_comments_state.dartcagrı zinciri adimi degildir:- backend'e gitmez
- comments ekran durumunu tasir (
comments,repliesByCommentId,isSubmitting,uiMessagevb.). comment_repository.go,CreatePostCommentoncesiensurePostInteractionAllowed(...)ile backend kuralini zorunlu uygular.comment_repository.go, liste ve detay sorgularindacan_interacturetip dondurur.comment_handler.go,ErrUniversityInteractionForbiddenhatasiniPermissionDeniedolarak map eder.interaction_guard.goicindekiensurePostInteractionAllowed/ensureCommentInteractionAllowed/fetchViewerUniversityIDhelperlari kuralin ortak kontrol noktalaridir; hemrepository.gohemcomment_repository.gotarafindan paylasimli olarak kullanilir.