Trudny / egzaminacyjny · lekcja 20
Projekt 1: Kalkulator BMI z historią pomiarów (Angular + ASP.NET Core)
Czas na pierwszy z czterech pełnych projektów łączących wszystko, czego się nauczyłeś. Pamiętasz kalkulator BMI z lekcji 4? Tam był to prosty, samodzielny komponent Angular liczący wynik lokalnie. Teraz rozbudujemy go o prawdziwy backend ASP.NET Core — każdy p...
Zacznij tutaj
Po co się tego uczymy?
Wprowadzenie
Teoria
Wymagania projektu:
- Formularz Angular (Reactive Forms, lekcja 10) z polami wzrost/waga i walidacją (obie wartości muszą być dodatnie);
- Po obliczeniu BMI, wynik jest wysyłany do backendu ASP.NET Core i zapisywany w bazie SQLite (Entity Framework Core, lekcje 14-16);
- Lista poniżej formularza pokazuje HISTORIĘ wszystkich dotychczasowych pomiarów (data, wzrost, waga, wynik, kategoria), pobieraną z backendu przez
HttpClient(lekcja 11); - Stylowanie całości Bootstrapem (lekcja 7).
Model danych (backend, C#):
public class PomiarBmi
{
public int Id { get; set; }
public double WzrostCm { get; set; }
public double WagaKg { get; set; }
public double Wynik { get; set; }
public string Kategoria { get; set; } = "";
public DateTime DataPomiaru { get; set; } = DateTime.Now;
}
Przepływ danych całego projektu: użytkownik wypełnia formularz Angular → walidacja Reactive Forms (lekcja 11) → kliknięcie "Oblicz i zapisz" → Angular oblicza BMI LOKALNIE (żeby natychmiast pokazać wynik, bez czekania na serwer) I RÓWNOCZEŚNIE wysyła dane przez HttpClient.post() do kontrolera PomiaryController → backend oblicza kategorię, zapisuje przez EF Core, zwraca zapisany rekord (z nadanym Id) → Angular dodaje nowy wpis do lokalnie wyświetlanej listy historii, bez przeładowania całej strony.
Ten projekt ćwiczy WSZYSTKIE elementy z bloku Angular (formularz z walidacją, serwis, HttpClient) połączone z WSZYSTKIMI elementami backendu (kontroler API, EF Core, model danych) — to twoja pierwsza PEŁNA, kompletna aplikacja pełnego stosu (full-stack) w tym kursie.
Zobacz zależności
Schemat
Angular: formularz-bmi.component
[wzrost, waga] → Reactive Forms + Validators (lekcja 10)
│ klik "Oblicz i zapisz"
▼
obliczBmiLokalnie() → natychmiastowy wynik na ekranie
│
▼
this.http.post<PomiarBmi>(".../api/pomiary", {wzrostCm, wagaKg})
│
▼ (CORS, lekcja 11)
ASP.NET Core: PomiaryController
[HttpPost] Dodaj(PomiarBmi pomiar)
│
├── oblicz Kategoria (serwerowo, "źródło prawdy")
├── context.Pomiary.Add(pomiar); SaveChangesAsync(); (EF Core, lekcja 14-15)
│
▼
return CreatedAtAction(..., pomiar); → JSON z powrotem do Angular
│
▼
Angular: dopisuje nowy wpis do tablicy historiaPomiarow (bez przeładowania)
│
▼
@for (p of historiaPomiarow) { <tr>...</tr> } ← lista historii (lekcja 8)
Połącz z praktyką
Przykład z życia
Aplikacja fitness śledząca postępy użytkownika (waga, BMI w czasie) zapisuje KAŻDY pomiar z datą, żeby po miesiącach móc pokazać wykres zmian — dokładnie ten sam mechanizm "oblicz i zapisz z historią" realizuje ten projekt, tylko w uproszczonej, edukacyjnej wersji.