Ana içeriğe geç

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.dart teknik tetikleme/orkestrasyon merkezidir (cubit load, prop gecis, selector acma).
  • home_screen.dart gosterim katmanidir (universityName prop'unu AppBar'da gosterir).
  • university_context_state.dart cagrı 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.dart arama inputunu ve secim listesini yonetir.
  • universities_cubit.dart query degistiginde listeyi yeniler ve load more akisini yonetir.
  • universities_state.dart cagrı 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.dart secili universiteyi post akisina tasir ve feed yenilemeyi tetikler.
  • selectedUniversityId verisi UniversityContextCubit state'inden gelir (UniversityContextReady), app_shell.dart icinde await _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.dart import edilir, _universityContextCubit = UniversityContextCubit(... )..load(); ile veri cekilip state'e yazilir.
  • home_screen.dart home feed gosterim katmanidir; post listesini UI'de baslatan ekran tarafidir.
  • post_list_view.dart ve post_card.dart listeyi/render'i gosterim katmaninda yonetir.
  • posts_listing_cubit.dart secili universiteyi (selectedUniversityId) ve liste durumunu yonetir.
  • posts_listing_state.dart cagrı zinciri adimi degildir:
  • backend'e gitmez
  • listeleme durumunu tasir (selectedCategory, selectedUniversityId, posts, hasMore, nextCursor).
  • Post.can_interact backend'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.dart ve post_detail_screen.dart; ikisi de showPostCommentsSheet(...) cagirir.
  • post_comments_sheet.dart, canInteract false oldugunda yorum gonderme ve yanit baslatma aksiyonlarini read-only olarak bloke eder.
  • post_comments_cubit.dart, yorum/reply guncellemelerinde canInteract bilgisini korur (..canInteract = source.canInteract).
  • post_comments_state.dart cagrı zinciri adimi degildir:
  • backend'e gitmez
  • comments ekran durumunu tasir (comments, repliesByCommentId, isSubmitting, uiMessage vb.).
  • comment_repository.go, CreatePostComment oncesi ensurePostInteractionAllowed(...) ile backend kuralini zorunlu uygular.
  • comment_repository.go, liste ve detay sorgularinda can_interact uretip dondurur.
  • comment_handler.go, ErrUniversityInteractionForbidden hatasini PermissionDenied olarak map eder.
  • interaction_guard.go icindeki ensurePostInteractionAllowed / ensureCommentInteractionAllowed / fetchViewerUniversityID helperlari kuralin ortak kontrol noktalaridir; hem repository.go hem comment_repository.go tarafindan paylasimli olarak kullanilir.