git clone https://github.com/winderdoot/io2_flatshare.git
git checkout develop
git pullPo pobraniu najnowszych zmian z developa, polecam od razu wpisać następującą komendę zanim zaczniecie coś ruszać w kodzie. Podziękujecie mi później.
git update-index --assume-unchanged *repo_directory*/flatshare_server/.envTrzeba wejść w visual studio, otworzyć solucję *repo_dir*/flatshare_server/flatshare_server.sln i wcisnąć prawym przyciskiem na projekt flatshare_server i wybrać opcję Manage User Secrets.
Otworzy się plik json z sekretami, trzeba tam wkleić obiekt json z sekretami (otrzymacie go na DM).
Aby stripe-cli mógł skomunikować się z backendem w bezpieczny sposób, potrzebny jest plik *repo_directory*/flatshare_server/.env.
Problem jest taki, że na githubie może być upubliczniona tylko atrapowa wersja tego pliku.
Dlatego najpierw trzeba poprosić gita żeby ignorował dalsze zmiany w tym pliku:
git update-index --assume-unchanged *repo_directory*/flatshare_server/.envA wkleić do środka zmodyfikowaną wersję pliku, którą dostaniecie na DM.
Zostało uruchomienie docker compose'a i samego serwera:
# Uruchomienie serwisów w dockerze
# Jeśli jesteś na windowsie, najpierw uruchom docker desktop!
cd *repo_dir*/flatshare_server
docker compose up db azurite stripe-cli -d
# Następnie trzeba zainicjalizować bazę danych. Ten krok robimy tylko raz przed pierwszym uruchomieniem serwera.
# Pobranie CLI entity framework
dotnet tool install --global dotnet-ef
# Inicjalizacja bazy
cd *repo_dir*/flatshare_server/flatshare_server
dotnet ef database update
# Uruchomienie serwera lokalnie. WAŻNE aby nie zapomnieć o profilu http
cd *repo_dir*/flatshare_server/flatshare_server
dotnet run --launch-profile "http"Jesli potrzeba zamknąć serwer i uruchomić aplikację jeszcze raz. To trzeba najpierw zamknąć kontenery i uruchomić je jeszcze raz przed restartem serwera. Trzeba to zrobić bo inaczej płatności nie będą rejestrować webhooków - nie dostaniecie żadnych wyjątków ale aplikacja nie będzie prawidłowo działać. Zamykanie dockera:
cd *repo_dir*/flatshare_server
docker compose downStos technologiczny:
- Backend: .NET 9 (Web API), Entity Framework Core
- Baza danych: PostgreSQL (w kontenerach Docker na start)
- Cloud storage: Azure Blob (np. do przechowania zdjęć pokoi)
- Frontend: React
Organizacja pracy:
Cel: Skonfigurowanie środowiska, bazy danych oraz uwierzytelniania.
- Przygotowanie docker compose'a dla bazy PostgreSQL.
- Inicjalizacja projektów frontend i backend oraz konfiguracja połączenia z bazą danych.
- Wdrożenie ustandaryzowanych odpowiedzi błędów API (np.
timestamp,status,error,fieldErrors). - Implementacja modelu użytkownika (klasa
Useroraz kompozycja rólTenantRole,LandlordRole). - Realizacja rejestracji i bezpiecznego logowania (generowanie i walidacja tokenów JWT).
- Dwuetapowy mechanizm resetu hasła (żądanie i potwierdzenie).
Cel: Budowa profili użytkowników i umożliwienie właścicielom tworzenia ogłoszeń.
- Zapis i aktualizacja preferencji Lokatora powiązanych z rolą
TenantRole(np. zwierzęta, palenie, budżet). - Implementacja bazowego modelu domenowego dla ogłoszeń (
Listingpowiązany zApartmentiRoom). - Stworzenie endpointu do wystawiania ogłoszeń ze statusem początkowym
DRAFTlubUNDER_REVIEW. - Integracja zewnętrznego magazynu plików (Azure blob) dla zdjęć (zapisywanie samych URL-i w bazie).
Cel: Domknięcie cyklu życia ogłoszenia i rozpoczęcie wyszukiwarki/dopasowań.
- Pełna obsługa cyklu życia ogłoszenia: przejścia między stanami
ACTIVE,HIDDEN,ARCHIVED. - Wdrożenie encji
Unavailabilitydo zarządzania okresami niedostępności pokoju (np. na czas remontu). - Podstawowy endpoint pobierający dopasowane da lokatora mieszkania z użyciem stronicowania (
page,size). - Implementacja algorytmu wyliczającego
matchScorena podstawie preferencji.
Cel: Rozwinięcie wyszukiwania i rozpoczęcie interakcji wynajmu.
- Stworzenie obiektu
Bookingi endpointu inicjującego rezerwację (statusPENDING_APPROVAL). - Zarządzanie rezerwacją przez właściciela: endpointy do akceptacji (
/accept) i odrzucania (/reject). - Anulowanie rezerwacji przez lokatora (
/cancel) i obsługa konfliktów terminów (błąd409 Conflict). - Stworzenie obiektu
Paymenti integracja z zewnętrznym systemem płatności (stanyInitiated,Redirected,Succeeded/Failed). - Automatyczna zmiana statusu rezerwacji na
CONFIRMEDpo pomyślnej płatności. - Wdrożenie bramki płatności przy akceptacji rezerwacji przez właściciela
- Automatyczne anulowanie opłaconych rezerwacji i inicjacja zwrotów w przypadku blokady konta właściciela przez admina.
Cel: Domknięcie obsługi rezerwacji oraz budowa modułu moderacji dla administratorów.
- Budowa obiektu
ViolationReportdla zgłoszeń naruszeń (stany:Open,UnderReview,ActionTaken). - Realizacja blokady konta przez administratora (zmiana statusu na
BLOCKEDi ukrycie ogłoszeń). - Próba integracji z backendem przygotowanym przez naszych kolegów
Cel: Integracja bramek płatniczych, powiadomień oraz ostateczne szlify.
- Wdrożenie serwisu powiadomień (interfejs
INotificationPort) do wysyłania maili/pushy po ważnych zdarzeniach biznesowych. - Testy końcowe i opcjonalne wdrożenie aplikacji.