Przejdź do głównej zawartości

Przepisy na Elixir/Phoenix

Elixir zapewnia odporność na awarie i współbieżność, które inne języki dorabiają jako dodatek. Narzędzia AI czasem generują kod, który walczy z wzorcami OTP zamiast je wykorzystywać. Te przepisy produkują idiomatyczny Elixir — prawidłowe GenServery, zestawy zmian Ecto z prawdziwymi walidacjami i Phoenix LiveView, które poprawnie korzysta z socketa.

  • Przepisy na Phoenix API i LiveView z prawidłowymi wzorcami kanałów/socketów
  • Przepisy na schematy i zapytania Ecto z kompozycyjnymi zapytaniami i prawidłowymi zestawami zmian
  • Wzorce OTP: GenServer, drzewa Supervisorów i nadzór Tasków
  • Przepisy na testy dla ExUnit z prawidłowym sandboxem i wzorcami asynchronicznymi

Scenariusz: Potrzebujesz REST API do aplikacji zarządzania zadaniami z prawidłową walidacją i formatowaniem błędów.

Oczekiwany wynik: Moduł kontekstu, schemat z changesetem, kontroler, widoki JSON, specyfikacja OpenAPI i testy.


Przepis 2: Phoenix LiveView — panel w czasie rzeczywistym

Dział zatytułowany „Przepis 2: Phoenix LiveView — panel w czasie rzeczywistym”

Scenariusz: Twój panel wyświetla metryki na żywo, które aktualnie wymagają odświeżania strony. Potrzebujesz aktualizacji w czasie rzeczywistym.

Oczekiwany wynik: Moduł LiveView, 3 LiveComponents, subskrypcje PubSub, hooki JS i testy LiveViewTest.


Scenariusz: Twoje API potrzebuje ograniczania liczby zapytań per użytkownik, ale nie chcesz zewnętrznej zależności jak Redis.

Oczekiwany wynik: GenServer, optymalizacja ETS, middleware Plug, wsparcie dystrybucji i testy.


Scenariusz: Tworzenie zamówienia obejmuje aktualizacje stanów magazynowych, tworzenie rekordów płatności i wysyłanie powiadomień — jeśli jakikolwiek krok zawiedzie, wszystko powinno zostać wycofane.

Oczekiwany wynik: Potok Ecto.Multi, obsługa błędów, rozgłaszanie PubSub i testy transakcji.


Scenariusz: Potrzebujesz niezawodnych zadań w tle z ponawianiem, harmonogramowaniem i monitorowaniem.

Oczekiwany wynik: Konfiguracja Oban, 3 workery, harmonogram cron, ograniczenia unikalności i testy workerów.


Scenariusz: Twoje API potrzebuje uwierzytelniania JWT z kontrolą dostępu opartą na rolach i odświeżaniem tokenów.

Oczekiwany wynik: Konfiguracja Guardian, potok auth, plug roli, kontroler auth, unieważnanie tokenów i testy.


Scenariusz: Twoje zapytania są zduplikowane między kontekstami z drobnymi różnicami. Potrzebujesz kompozycyjnego, wielokrotnego użytku w budowaniu zapytań.

Oczekiwany wynik: Moduł QueryBuilder, zakresy, helpery preload, zapytania agregujące i testy kompozycji.


Scenariusz: Potrzebujesz czatu wielopokojowego ze śledzeniem obecności i trwałym przechowywaniem wiadomości.

Oczekiwany wynik: Kanał pokoju, trwałość wiadomości, śledzenie obecności, wskaźniki pisania i testy kanałów.


Scenariusz: Twoja aplikacja ma komponenty, które padają niezależnie. Potrzebujesz prawidłowego nadzoru dla izolacji awarii.

Oczekiwany wynik: Supervisor aplikacji, WorkerSupervisor, ConnectionPool z DynamicSupervisor i testy restartów.


Scenariusz: Twoje wdrożenie kopiuje projekt na serwer i uruchamia mix phx.server. Potrzebujesz prawidłowych releasów.

Oczekiwany wynik: Konfiguracja releasu, runtime.exs, skrypty migracji, Dockerfile, workflow CI i testy uruchomienia.