<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="https://blog.poplauki.eu" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Poplavskij Vladimir blog</title>
    <link>https://blog.poplauki.eu/pl/feed.xml</link>
    <atom:link href="https://blog.poplauki.eu/pl/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Polski</description>
    <language>pl</language>
    
    
    
    
      
      <item>
        <title>Droga królów: podróż do Archiwum Burzowego Światła</title>
        <link>https://blog.poplauki.eu/pl/blog/the-way-of-kings-a-journey-into-the-stormlight-archive/</link>
        <description>&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Brandon_Sanderson&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Brandon Sanderson&lt;/a&gt; jest mistrzem swojego rzemiosła, a &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Way_of_Kings&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;&lt;em&gt;Droga królów&lt;/em&gt;&lt;/a&gt;, pierwszy tom słynnego cyklu &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Stormlight_Archive&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;&lt;em&gt;Archiwum Burzowego Światła&lt;/em&gt;&lt;/a&gt;, najlepiej pokazuje jego talent. Ta epicka powieść high fantasy przenosi czytelnika na Roshar — świat nieustających burz, zagadkowej magii i głębokich konfliktów politycznych.&lt;/p&gt;
&lt;h2&gt;Droga królów&lt;/h2&gt;
&lt;p&gt;Roshar to miejsce, w którym zahartowani wojownicy ścierają się w walkach pełnych honoru i desperacji, pod powierzchnią drzemią pradawne tajemnice, a los całego świata wisi na włosku. &lt;em&gt;Droga królów&lt;/em&gt; splata historie trojga fascynujących bohaterów: Shallan, młodej uczonej poszukującej zakazanej wiedzy; Dalinara, doświadczonego wojną generała szukającego sensu; oraz Kaladina, zniewolonego żołnierza walczącego o przetrwanie.&lt;/p&gt;
&lt;h2&gt;Kaladin&lt;/h2&gt;
&lt;p&gt;Kaladin jest jednym z najbardziej zapadających w pamięć bohaterów Sandersona. Dręczony przeszłością, walczy, by chronić swoich ludzi wbrew niemożliwym przeciwnościom. Jego droga pełna siły, honoru i determinacji pośród niewyobrażalnych trudności głęboko porusza.&lt;/p&gt;
&lt;h2&gt;Dalinar Kholin&lt;/h2&gt;
&lt;p&gt;Dalinar Kholin, stoicki i honorowy brat zmarłego króla, uosabia konflikt między tradycją a zmianą. Pod silnym wpływem starożytnego tekstu &lt;em&gt;Droga królów&lt;/em&gt; opiera swoje przekonania na surowym kodeksie honorowym. Jego walka polega na pogodzeniu ideałów przeszłości ze zmienną i skomplikowaną teraźniejszością. Szczególnie mocno przemawia do niego jedna z głównych zasad książki:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nie ma honoru w zwycięstwie, które zmusza cię do porzucenia tego, kim jesteś.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Kieruje ona jego działaniami, a zarazem staje się stałym źródłem wewnętrznego konfliktu.&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-image article-image--square article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/honor-square-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/honor-square-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/honor-square-400w.jpeg&quot; width=&quot;400&quot; height=&quot;400&quot; alt=&quot;Rycerz pod słowami o honorze i zwycięstwie z Drogi królów&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;Przysięga Świetlistych Rycerzy&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Życie przed śmiercią. Siła przed słabością. Podróż przed celem.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Te słowa tworzą przysięgę Świetlistych Rycerzy, starożytnego zakonu, i oddają najważniejsze motywy &lt;em&gt;Drogi królów&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Jeśli cenisz bogate światy, niezapomnianych bohaterów i przygody o wysoką stawkę, &lt;em&gt;Droga królów&lt;/em&gt; jest lekturą obowiązkową. Wyrusz w tę epicką odyseję i przekonaj się, dlaczego Sanderson uchodzi za jednego z najlepszych współczesnych autorów fantasy.&lt;/p&gt;
&lt;h2&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Droga królów&lt;/em&gt; zasługuje na uznanie. Misternie zbudowany świat, fascynujące kultury i charakterystyczne imiona wciągają bez reszty. Jednak to niedoskonali, wytrwali i niezaprzeczalnie ludzcy bohaterowie czynią tę książkę niezapomnianą podróżą. Jeśli szukasz powieści, która pobudzi umysł, poruszy serce i sprawi, że zapragniesz wrócić na Roshar, &lt;em&gt;Droga królów&lt;/em&gt; powinna znaleźć się na szczycie twojej listy.&lt;/p&gt;
&lt;p&gt;Pozostałe notatki i recenzje książek znajdziesz na &lt;a href=&quot;https://reading.poplauki.eu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;reading.poplauki.eu&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sat, 08 Aug 2026 17:14:30 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/the-way-of-kings-a-journey-into-the-stormlight-archive/</guid>
      </item>
      
    
    
    
    
    
    
    
    
      
      <item>
        <title>Notatki z Wiatr i prawda – cytaty z Stormlight Archive</title>
        <link>https://blog.poplauki.eu/pl/blog/cytaty-wiatr-prawdy-storm-light/</link>
        <description>&lt;blockquote&gt;
&lt;p&gt;Po co potrzebna jest sztuka? Dlaczego ma tak wielkie znaczenie i siłę oddziaływania? Nie powiem ci, bo krótka odpowiedź jest mało atrakcyjna, a długa zajęłaby wiele miesięcy. Zamiast tego powiem to: każde społeczeństwo w każdym regionie każdej planety, którą odwiedziłem, a było ich wiele, tworzyło sztukę.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Ten świat jest pełen rzeczy, które według ludzi nie powinno się robić, ale które są tak naprawdę w porządku. Jest też pełen rzeczy, które naprawdę, NAPRAWDĘ nie powinno się robić. I nikt nie powie ci, które jest które, więc sam musisz się domyślić.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Ale w miarę dorastania zauważam, że prawda wydaje się… różna dla różnych ludzi. Czy istnieje jedna prawda, czy jest ich wiele? Skąd mam wiedzieć, którą się kierować?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Kiedy patrzyło się w oczy śmierci, liczyli się ludzie.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        <pubDate>Sun, 26 Jul 2026 14:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/cytaty-wiatr-prawdy-storm-light/</guid>
      </item>
      
    
    
    
    
      
      <item>
        <title>Niezbędne narzędzia bezpieczeństwa OWASP: lista kontrolna przed publikacją witryny</title>
        <link>https://blog.poplauki.eu/pl/blog/list-owasp-useful-links/</link>
        <description>&lt;p&gt;Lista linków OWASP:&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Skanery&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://radar.cloudflare.com/scan&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Cloudflare Radar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.projectdiscovery.io/opensource/nuclei/overview&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Szybki i konfigurowalny skaner podatności oparty na prostych szablonach YAML&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;DNS&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://dnsdumpster.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;dns recon &amp;amp; research, find &amp;amp; lookup dns records&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Nagłówki&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://check.town/csp-validator&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Walidator nagłówka CSP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://securityheaders.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Nagłówki bezpieczeństwa (Snyk)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Sprawdzanie HSTS&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://showdns.net/hsts-checker&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;HTTP Strict Transport Security Test&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 18 Apr 2026 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/list-owasp-useful-links/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Codzienna praktyka stoicka</title>
        <link>https://blog.poplauki.eu/pl/blog/daily-stoic-routine-habits-for-inner-peace/</link>
        <description>&lt;h2&gt;Poranne dyscypliny: Odzyskiwanie dnia&lt;/h2&gt;
&lt;p&gt;Stoicki dzień zaczyna się od celowego wysiłku, by zapanować nad nadchodzącym dniem, zanim “wtargnie pośpiech”, a obowiązki zaczną się nawarstwiać&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Poranne przypomnienie:&lt;/strong&gt; Zachęca się praktykujących, aby przypominali sobie, że spotkają trudnych ludzi — “wścibskich, niewdzięcznych [i] aroganckich” — oraz że ich dobre samopoczucie nie powinno być zakładnikiem cudzego charakteru.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ustalanie intencji:&lt;/strong&gt; Poranne rytuały obejmują skupienie się na tym, co ważne, i zobowiązanie się do życia zgodnie z wartościami, a nie nastrojami, na przykład postępując z samodyscypliną i uczciwością, nawet gdy jest to niewygodne.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Przygotowanie:&lt;/strong&gt; To czas gotowości, w którym uczeń przygotowuje swój umysł, aby z cnotą reagować na wszystko, co przyniesie dzień&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;W ciągu dnia: Praktyka uwagi&lt;/h2&gt;
&lt;p&gt;Stoicyzm w życiu codziennym wymaga ciągłej “dyscypliny osądu”, aby upewnić się, że wewnętrzne reakcje są kierowane rozumem&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dychotomia kontroli:&lt;/strong&gt; W sercu codziennego życia leży proste, powtarzające się pytanie: “Czy to jest pod moją kontrolą?”. Jeśli jakieś wydarzenie — takie jak ruch uliczny, pogoda lub zachowanie innej osoby — nie jest pod naszą kontrolą, praktykujący decyduje się je odpuścić i skupia się wyłącznie na własnych reakcjach i działaniach.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stoicka pauza:&lt;/strong&gt; Aby uniknąć “oszołomienia szybkością uderzenia” zdarzeń zewnętrznych, stoicy praktykują celową pauzę. To krótkie przerwanie automatycznej reakcji stwarza przestrzeń na zadanie pytania, co właściwie się dzieje, i zapobiega konstruowaniu przez umysł “historii krzywdy” wokół neutralnych wydarzeń.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Perspektywa wieży strażniczej:&lt;/strong&gt; Aby przeciwdziałać tendencji do przyglądania się problemom ze zbyt bliska, stoicy w myślach “oddalają obraz”. Patrząc na wydarzenia tak, jakby znajdowali się na wysokiej wieży strażniczej, poszczególne problemy kurczą się i są postrzegane jako część wspólnej, zwyczajnej i ulotnej ludzkiej kondycji.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dobrowolny dyskomfort:&lt;/strong&gt; Praktykujący mogą okresowo rezygnować z luksusów, nosząc proste ubrania lub jedząc tanie posiłki, aby przypomnieć sobie, że szczęście nie zależy od posiadania rzeczy, i aby “usztywnić kręgosłup” na wypadek przyszłych trudności&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Wieczorna refleksja: Przegląd charakteru&lt;/h2&gt;
&lt;p&gt;Dzień kończy się okresem refleksji, aby ocenić swoje postępy i charakter&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Przegląd:&lt;/strong&gt; Stoicy spoglądają wstecz na wydarzenia minionego dnia, zadając sobie pytania: “Czy zachowałem cierpliwość? Czy wykazałem się odwagą? Gdzie wzięły górę emocje?”.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Korekta bez rozpaczy:&lt;/strong&gt; Jeśli praktyka mija się z zasadami, celem nie jest rozpacz, ale po prostu powrót do praktyki po porażce.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Konkretne ćwiczenia:&lt;/strong&gt; Jednym z zalecanych ćwiczeń jest wybranie pojedynczego momentu, który był niepokojący, i napisanie czterech krótkich linijek: co się po prostu wydarzyło, jakie wyciągnięto z tego wnioski, jak wygląda “wieża strażnicza” lub przyszłe spojrzenie na to wydarzenie oraz jaka jego część faktycznie należała do ciebie, by nią zarządzać&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ostatecznie codzienna praktyka stoicka dotyczy raczej mistrzostwa nad samym sobą niż nad światem, dążąc do stania się “częścią większego ciała”, które działa racjonalnie i społecznie w obecnej chwili&lt;/p&gt;
</description>
        <pubDate>Sun, 12 Apr 2026 16:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/daily-stoic-routine-habits-for-inner-peace/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>📡 Odbiór prognozy pogody z czujników 433 MHz na Raspberry Pi z RTL-SDR</title>
        <link>https://blog.poplauki.eu/pl/blog/forecast-receiver-raspberry-pi-rtl-sdr/</link>
        <description>&lt;h2&gt;Od sygnału radiowego do eleganckich dashboardów w Grafanie&lt;/h2&gt;
&lt;p&gt;W pewnym momencie przestało mi wystarczać sprawdzanie pogody w aplikacji. Chciałem wiedzieć, jaka temperatura jest na balkonie — i to nie z jakiegoś chmurzastego API, tylko z moich własnych czujników, działających w czasie rzeczywistym.
Tak narodził się pomysł stworzenia własnego, w pełni prywatnego systemu monitoringu pogody.&lt;/p&gt;
&lt;h3&gt;📡 1. Złapanie sygnału z powietrza&lt;/h3&gt;
&lt;p&gt;Podstawą całego projektu jest dongle RTL‑SDR — mały odbiornik radiowy, który potrafi przechwycić transmisje z tanich czujników 433 MHz.
Z pomocą narzędzia &lt;strong&gt;rtl_433&lt;/strong&gt; zamieniłem surowy sygnał radiowy na czytelne JSON‑y.
To moment, w którym „magia radiowa” staje się danymi.&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-image article-image--landscape article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/IMG20260411083210-landscape-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/IMG20260411083210-landscape-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/IMG20260411083210-landscape-400w.jpeg&quot; width=&quot;400&quot; height=&quot;267&quot; alt=&quot;dongle RTL-SDR + raspberry-pi&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-image article-image--landscape article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/IMG20260411083455-landscape-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/IMG20260411083455-landscape-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/IMG20260411083455-landscape-400w.jpeg&quot; width=&quot;400&quot; height=&quot;267&quot; alt=&quot;czujnik 433 MHz pogodowy&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3&gt;🔧 2. Inteligentny filtr: tylko moje czujniki, tylko to, co ważne&lt;/h3&gt;
&lt;p&gt;Nie chciałem śmieci w systemie.
Dlatego stworzyłem &lt;code&gt;bridge.js&lt;/code&gt; — mały, sprytny skrypt &lt;code&gt;Node.js&lt;/code&gt;, który:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;rozpoznaje tylko moje czujniki (po modelu i ID),&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;mapuje je na przyjazne nazwy: balcony (kąt ciemny) oraz balcony_2 (kąt sloneczny),&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;konwertuje temperaturę z &lt;strong&gt;°F&lt;/strong&gt; na &lt;strong&gt;°C&lt;/strong&gt;,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;publikuje czyste, ujednolicone dane na MQTT (&lt;code&gt;weather/&amp;lt;name&amp;gt;&lt;/code&gt;),&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;zapisuje timestamp ostatniego sygnału,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;wysyła powiadomienia, gdy bateria w czujniku zaczyna umierać.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To nie jest zwykły filtr — to mój prywatny „weather intelligence layer”.&lt;/p&gt;
&lt;h3&gt;🧠 3. Backend, który rozumie dane&lt;/h3&gt;
&lt;p&gt;Dalej dane trafiają do backendu opartego o NestJS.
Zbudowałem własny klient MQTT, który:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;subskrybuje &lt;code&gt;weather/#&lt;/code&gt;,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;odbiera gotowe JSON‑y z &lt;code&gt;bridge.js&lt;/code&gt;,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;aktualizuje cache ostatnich odczytów,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;agreguje dane i zapisuje je do PostgreSQL bazy danych.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Backend nie musi znać protokołów radiowych ani modeli czujników.
Dostaje czyste, ustandaryzowane dane — i robi z nimi to, co robi najlepiej.&lt;/p&gt;
&lt;h3&gt;🗄️ 4. Historia pogody w PostgreSQL&lt;/h3&gt;
&lt;p&gt;Każdy czujnik generuje wiele odczytów na minutę.
Zamiast zapisywać wszystko, backend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;buforuje dane,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;liczy średnie,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;zapisuje eleganckie rekordy do tabeli &lt;code&gt;weather_record&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dzięki temu baza jest lekka, szybka i gotowa do analizy.&lt;/p&gt;
&lt;h3&gt;📊 5. Pogoda w moim domu — na żywo&lt;/h3&gt;
&lt;p&gt;Na koniec wszystko trafia do Grafany, gdzie stworzyłem zestaw dashboardów:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;wykres temperatury z podziałem na sensory,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;wilgotność w czasie,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;panel diagnostyczny (bateria, ostatni sygnał),&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;szybki podgląd ostatnich wartości.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To nie jest zwykły wykres — to mój prywatny „weather center”, działający 24/7.&lt;/p&gt;
&lt;p&gt;🎯 Efekt końcowy&lt;/p&gt;
&lt;p&gt;Zbudowałem system, który:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;odbiera sygnał radiowy z czujników 433 MHz,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;filtruje i normalizuje dane,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;publikuje je na MQTT,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;backend je agreguje i zapisuje,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grafana prezentuje je w piękny, czytelny sposób.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zero chmury. Zero vendor lock‑in.
Wszystko działa lokalnie, szybko i dokładnie tak, jak chcę.&lt;/p&gt;
</description>
        <pubDate>Thu, 09 Apr 2026 10:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/forecast-receiver-raspberry-pi-rtl-sdr/</guid>
      </item>
      
    
    
    
    
    
    
    
    
      
      <item>
        <title>15 Sposobów na Osiągnięcie Spokoju Wewnętrznego: Stoicki Przewodnik</title>
        <link>https://blog.poplauki.eu/pl/blog/15-ways-to-achieve-tranquility/</link>
        <description>&lt;p&gt;Źródła przedstawiają piętnaście sposobów na osiągnięcie spokoju wewnętrznego (na podstawie sugestii &lt;a href=&quot;https://pl.wikipedia.org/wiki/Seneka_M%C5%82odszy&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Seneki&lt;/a&gt;) oraz omawiają techniczną strukturę cnót podrzędnych, które mieszczą się w czterech głównych cnotach stoicyzmu. Chociaż konkretna liczba “15 cnót podrzędnych” nie jest jawnie zdefiniowana jako jedna kanoniczna lista w źródłach, dostarczają one szczegółowej listy piętnastu praktycznych sugestii do życia cnotliwego oraz identyfikują różne cnoty podrzędne w ramach szerszego systemu stoickiego.&lt;/p&gt;
&lt;h2&gt;15 Sugestii dla Spokoju&lt;/h2&gt;
&lt;p&gt;Piętnaście punktów pochodzi z eseju Seneki “O spokoju umysłu” i reprezentuje praktyczne zastosowania stoickiej cnoty:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Zaangażuj się w świat&lt;/em&gt;: Aktywne uczestnictwo w codziennych zajęciach i wartościowej pracy uspokaja umysł i przeciwdziała niepokojowi.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Nie pozwól, by przeszkody cię powstrzymały&lt;/em&gt;: Ćwicz wytrwałość i znajduj alternatywne drogi, gdy napotykasz blokady; nawet małe przysługi przyczyniają się do cichej godności.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Zdecyduj się żyć aż do śmierci&lt;/em&gt;: Zobowiąż się do pozostania w pełni obecnym i zadowolonym, niezależnie od tego, czy twoje okoliczności są surowe, czy przyjemne.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Dopasuj swoje działania do swoich możliwości&lt;/em&gt;: Wybieraj zadania, które możesz dobrze wykonać i unikaj zobowiązań, które przekraczają twoją naturę lub zdolności.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Uważnie dobieraj przyjaciół&lt;/em&gt;: Stawiaj na autentycznych towarzyszy i unikaj “nieszczęśliwych ludzi”, którzy znajdują powód do narzekania we wszystkim.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Nie gonić za posiadłościami&lt;/em&gt;: Unikaj pochłaniającego dążenia do bogactwa i dąż zamiast tego do zadowolenia z tego, co masz.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Żyj prosto&lt;/em&gt;: Unikaj pokazywania się i zbytku; prosty żywot łatwiej utrzymać i uspokaja umysł.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Obsługuj życie z umiejętnością&lt;/em&gt;: Używaj praktyki i umiejętności, by zamieniać trudności w znośne okoliczności zamiast miażących ciężarów.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Bądź gotowy się rozstać&lt;/em&gt;: Uznaj, że każdy ludzki stan jest tymczasowy i unikaj zbyt mocnego przywiązywania się do statusu, posiadłości czy samego życia.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Unikaj bezużytecznych działań&lt;/em&gt;: Wybieraj sensowne cele i unikaj bezcelowego zgiełku, który rodzi rozproszenie.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Bądź przygotowany na rozczarowanie&lt;/em&gt;: Spodziewaj się, że rzeczy nie zawsze pójdą tak, jak się spodziewał, aby pozbawić rozczarowanie jego mocy.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Nie bądź ani uparty, ani niezdecydowany&lt;/em&gt;: Zachowuj elastyczność, by dostosować się do zmieniających się okoliczności lub wycofać się, gdy rozum tego wymaga.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Nie kieruj się opiniami innych ludzi&lt;/em&gt;: Ignoruj ludzkie szaleństwo i podążaj za tym, czego wymaga rozum.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Ucz się od odwagi innych ludzi&lt;/em&gt;: Obserwuj, jak inni stawiają czoła nieszczęściu i wzmacniaj swoje serce na ich przykładzie.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Bądź sobą, zrelaksuj się, baw się dobrze&lt;/em&gt;: Daj umysłowi odpoczynek poprzez spacery, przyjemności i posiłki z umiarem&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Techniczna Struktura Cnot Podrzędnych&lt;/h2&gt;
&lt;p&gt;Źródła wyjaśniają, że cztery główne cnoty — Mądrość (Rozwaga), Sprawiedliwość, Odwaga i Umiarkowanie — obejmują kilka cnót podrzędnych. Według Ariusza Didymusa, Rozwaga obejmuje sześć cnót podrzędnych, Odwaga pięć, a Sprawiedliwość i Umiarkowanie mają po cztery, co daje łącznie 19. Konkretne przykłady wymienione w źródłach obejmują:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cnoty podrzędne Sprawiedliwości: Obejmują one uprzejmość (wiedzę o tym, jak czynić dobro), uczciwe postępowanie, dobrą kompanię i pobożność. Inne aspekty obejmują prawdomówność, szczerość i wierność.&lt;/li&gt;
&lt;li&gt;Cnoty podrzędne Umiarkowania: Ta kategoria obejmuje samokontrolę (enkrateia), uporządkowanie (eutaksja), stosowność i skromność.&lt;/li&gt;
&lt;li&gt;Cnoty podrzędne Odwagi: Obejmuje to wielkoduszność (wielkość umysłu lub duszy), wytrwałość (filoponia lub “umiłowanie trudu”) i cierpliwość (patientia).&lt;/li&gt;
&lt;li&gt;Cnoty podrzędne Rozwagi (Mądrości): Chociaż źródła nie wymieniają wszystkich sześciu, definiują mądrość jako “cnotę nadrzędną” lub “jasnowidzącą inteligencję”, która kieruje pozostałymi.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 29 Mar 2026 20:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/15-ways-to-achieve-tranquility/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Szyfrowanie kluczem symetrycznym danych zdrowotnych: Architektura bezpieczeństwa MigrainePulse</title>
        <link>https://blog.poplauki.eu/pl/blog/migraine-pulse-security-key-management-service/</link>
        <description>&lt;p&gt;Tworząc produkty HealthTech, takie jak &lt;a href=&quot;https://migrainepulse.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;MigrainePulse&lt;/a&gt;, jednym z największych wyzwań jest zapewnienie absolutnego bezpieczeństwa i prywatności wrażliwych danych użytkowników. Historia ataków migrenowych, przyjmowane leki, dokumentacja medyczna i szczegóły dotyczące stylu życia – to wszystko jest wysoce osobistymi informacjami.&lt;/p&gt;
&lt;p&gt;Od pierwszego dnia nasza filozofia była prosta: dane użytkowników należą tylko do nich. Aby to zapewnić, wdrożyliśmy zaawansowany system szyfrowania kluczem symetrycznym (ang. &lt;code&gt;Symmetric Key Encryption&lt;/code&gt;) w architekturze MigrainePulse, który działa w połączeniu z izolowanymi rozwiązaniami mikrousługowymi (&lt;code&gt;Cloudflare Workers&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;W tym artykule zapraszamy do technicznego spojrzenia pod maskę i poznania, jak działają nasze mechanizmy ochrony.&lt;/p&gt;
&lt;h2&gt;Dlaczego standardowe rozwiązania nie wystarczą?&lt;/h2&gt;
&lt;p&gt;Większość aplikacji dziś wykorzystuje szyfrowanie podczas transmisji danych (&lt;code&gt;TLS/SSL&lt;/code&gt;) oraz szyfrowanie w spoczynku (szyfrowane bazy danych). Jednak jeśli cały system (baza danych i główny serwer przechowujący klucze szyfrowania) zostanie naruszony w tym samym czasie, dane mogą stać się jawne.&lt;/p&gt;
&lt;p&gt;Aby tego uniknąć, w systemie MigrainePulse oddzieliliśmy same dane od kluczy potrzebnych do ich odszyfrowania.&lt;/p&gt;
&lt;h2&gt;Podstawa architektury: SymmetricKeyService&lt;/h2&gt;
&lt;p&gt;W naszym systemie backend (wykorzystującym monolityczną aplikację NestJS) specjalny moduł &lt;code&gt;SymmetricKeyService&lt;/code&gt; zarządza szyfrowaniem i odszyfrowywaniem wrażliwych danych.&lt;/p&gt;
&lt;p&gt;Jak to działa w praktyce?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Zasada jednego klucza: Szyfrowanie symetryczne oznacza, że ten sam unikalny klucz jest używany zarówno do szyfrowania, jak i odszyfrowywania danych. Każdy użytkownik ma przypisany unikalny klucz, którego nawet my sami nie mamy w naszej głównej bazie danych.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Szyfrowanie ładunku (Payload Encryption): Gdy użytkownik zapisuje nowy rekord zdrowotny (np. dodaje nowy atak migreny), dane docierają do naszego serwera. &lt;code&gt;SymmetricKeyService&lt;/code&gt; pobiera te wrażliwe dane, szyfruje je za pomocą zaawansowanego algorytmu (np. &lt;code&gt;AES-256-GCM&lt;/code&gt;), a dopiero potem zapisuje w bazie danych. W bazie danych przechowywany jest tylko bezsensowny ciąg znaków.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Identyfikacja użytkownika: Sesja użytkownika i dostęp do danych są ściśle powiązane z JWT (&lt;code&gt;JSON Web Tokens&lt;/code&gt;) i uwierzytelnianiem Supabase. Użytkownik potwierdza swoją tożsamość, a przypisany mu klucz szyfrowania jest udostępniany tylko po zweryfikowanym logowaniu.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture class=&quot;article-image article-image--landscape article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-security-key-management-service-diagram-landscape-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-security-key-management-service-diagram-landscape-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-security-key-management-service-diagram-landscape-400w.jpeg&quot; width=&quot;400&quot; height=&quot;267&quot; alt=&quot;migraine-pulse-security-key-management-service diagram&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;Dodatkowa warstwa obrony: Cloudflare Worker&lt;/h2&gt;
&lt;p&gt;Pojawia się naturalne pytanie – gdzie w takim razie przechowywane są same klucze szyfrowania, jeśli nie w głównej bazie danych?&lt;/p&gt;
&lt;p&gt;Tutaj z pomocą przyszła nam technologia &lt;code&gt;Cloudflare Workers&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;W naszej architekturze klucze szyfrowania są zarządzane poprzez całkowicie izolowaną infrastrukturę działającą w sieci Edge. Rozwiązanie opisane w dokumentacji &lt;a href=&quot;https://github.com/wirtaw/migraine-tracker-docs/blob/master/docs/backend/cloudflare-worker.md&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;doc/backend/cloudflare-worker.md&lt;/a&gt; zapewnia, że główny serwer API i baza danych nigdy nie przechowują samych kluczy w pamięci długoterminowej.&lt;/p&gt;
&lt;h2&gt;Korzyści z integracji:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decentryzacja:&lt;/strong&gt; Ponieważ klucze są przechowywane i zarządzane w oddzielnej infrastrukturze chmurowej (Cloudflare), potencjalnemu hakerowi nie wystarczyłoby skompromitować naszego głównego serwera. Musiałby jednocześnie pokonać dwa całkowicie różne, wzajemnie izolowane systemy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Szybkość (Low Latency):&lt;/strong&gt; Cloudflare Workers działają w globalnej sieci Edge (najbliżej użytkownika), więc żądanie klucza od nich (do autoryzowanego odszyfrowania) dodaje tylko minimalne opóźnienie, zachowując wydajność aplikacji.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ścisła kontrola dostępu:&lt;/strong&gt; Worker jest skonfigurowany tak, aby wydawać klucze tylko po otrzymaniu poprawnie podpisanych i zweryfikowanych żądań od naszego SymmetricKeyService, sprawdzając wszystkie ograniczenia CORS i IP.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;MigrainePulse to nie tylko narzędzie do śledzenia danych. To bezpieczna przestrzeń. Łącząc solidną architekturę NestJS (&lt;a href=&quot;https://github.com/wirtaw/migraine-tracker-monolith/blob/master/src/auth/symmetric-key/symmetric-key.service.ts&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;symmetric-key.service.ts&lt;/a&gt;) z decentralizacją zapewnianą przez Cloudflare Workers, stworzyliśmy system, w którym osobiste informacje użytkownika pozostają zablokowane nawet w najgorszych scenariuszach.&lt;/p&gt;
&lt;p&gt;Dla nas „Bezpieczeństwo na pierwszym miejscu&amp;quot; to nie tylko pusty frazes marketingowy – to inżynieryjny fundament, na którym zbudowany jest cały system MigrainePulse. Ponieważ gdy mówimy o zdrowiu, nie ma miejsca na kompromisy w kwestii prywatności.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Masz pytania dotyczące naszej architektury technicznej? Dołącz do dyskusji w komentarzach lub wypróbuj sam &lt;a href=&quot;https://migrainepulse.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;MigrainePulse&lt;/a&gt;!&lt;/p&gt;
</description>
        <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/migraine-pulse-security-key-management-service/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Migraine Pulse – przeniesienie schematu danych do backendu</title>
        <link>https://blog.poplauki.eu/pl/blog/migraine-pulse-data-schema-backend/</link>
        <description>&lt;p&gt;&lt;strong&gt;Podsumowanie&lt;/strong&gt;: Ten artykuł opisuje przeniesienie schematu danych z frontend’u do backend’u w aplikacji Migraine Pulse. Dowiesz się, jak zaimplementowaliśmy dynamiczny schemat przy użyciu NestJS, walidację JSON Schema oraz jak to uprościło proces eksportu/importu danych.&lt;/p&gt;
&lt;p&gt;Jak wspomniałem we &lt;a href=&quot;https://blog.poplauki.eu/pl/blog/migraine-pulse-origin/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;wstępnym wpisie&lt;/a&gt; o aplikacji - pierwsza wersja była prototypem. Aplikacja React, do której importowałem format JSON przechowywany lokalnie. Wypełniała aplikację moimi zdarzeniami migrenowymi, objawami itp. Ulepszałem pewne rzeczy, modyfikowałem (dodawałem dane). Na końcu robiłem eksport, aby mieć najnowsze zmiany.&lt;/p&gt;
&lt;p&gt;Jednocześnie sprawdzałem i udoskonalałem wymagane pola dla każdego elementu.&lt;/p&gt;
&lt;p&gt;Później zacząłem budować &lt;a href=&quot;https://github.com/wirtaw/migraine-tracker-monolith&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;backend&lt;/a&gt;, który miał już połączenie z bazą danych. Tworząc moduły NestJS, brałem pod uwagę schemat, nad którym pracowałem wcześniej.&lt;/p&gt;
&lt;p&gt;Jednak do tej pory sam format schematu był opisany statycznie na stronie &lt;code&gt;settings/DataManagement&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Postanowiłem go zdynamicznić, tzn. gdy pola się zmienią lub zostaną dodane, aby nie trzeba było ręcznie edytować strony za każdym razem.&lt;/p&gt;
&lt;h2&gt;Implementacja&lt;/h2&gt;
&lt;p&gt;Pierwszy krok jest prosty - utwórz nowy moduł NestJS &lt;code&gt;data-management&lt;/code&gt; z serwisem i kontrolerem.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;nest g module data-management 
nest g &lt;span class=&quot;token function&quot;&gt;service&lt;/span&gt; data-management
nest g controller data-management&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Serwis zwraca obiekt schematu &lt;code&gt;JSON&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Injectable &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@nestjs/common&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Ajv &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;ajv&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; addFormats &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;ajv-formats&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  dtoToJsonSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  ClassType&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  JsonSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./utils/dto-to-json-schema&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateIncidentDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../incidents/dto/create-incident.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateTriggerDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../triggers/dto/create-trigger.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateSymptomDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../symptoms/dto/create-symptom.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateMedicationDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../medications/dto/create-medication.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateLocationDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../locations/dto/create-locations.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  CreateWaterDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateBloodPressureDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateHeightDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateSleepDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateWeightDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../health-logs/dto/create-health-logs.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; DataValidationResponse &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./interface/validation.interface&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Injectable&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DataManagementService&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; ajv&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Ajv&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ajv &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Ajv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; allErrors&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;addFormats&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ajv&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; incidentObjectSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;dtoToJsonSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      CreateIncidentDto &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; ClassType&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;properties &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;properties &lt;span class=&quot;token operator&quot;&gt;??&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;properties&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; JsonSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;properties&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;createdAt &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      format&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;date-time&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; JsonSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; existingRequired &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isArray&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;required&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;required
      &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; requiredSet &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Set&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;existingRequired&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;userId&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;type&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;startTime&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;datetimeAt&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;
      requiredSet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;required &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;requiredSet&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; incidentsSchema&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JsonSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; rootSchema&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JsonSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      properties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        incidents&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; incidentsSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        triggers&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; triggersSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        symptoms&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; symptomsSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        medications&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; medicationsSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        locations&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; locationsSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        healthLogs&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; healthLogsSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        exportedAt&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; format&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;date-time&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        version&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      required&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;incidents&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;triggers&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;symptoms&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;medications&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;locations&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;healthLogs&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;exportedAt&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;version&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      additionalProperties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; rootSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;W kontrolerze zwracany jest obiekt schematu &lt;code&gt;JSON&lt;/code&gt; z serwisu. Jest dostępny z rolą USER, ponieważ ta strona jest dostępna tylko dla zalogowanych użytkowników.&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Controller&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Get &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@nestjs/common&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; DataManagementService &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./data-management.service&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Roles &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../auth/decorators/roles.decorator&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Role &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../auth/enums/roles.enum&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Controller&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;data-management&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DataManagementController&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;readonly&lt;/span&gt; dataManagementService&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DataManagementService&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Roles&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Role&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;schema&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; object &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dataManagementService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Zintegruj nowo utworzony z stronę &lt;code&gt;settings/DataManagement&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;getDataSchema&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;token&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;MIGRAINE_BACKEND_API_URL&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/api/v1/data-management/schema&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    headers&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getHeaders&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;token&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ok&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Failed to fetch data schema&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I pierwszy krok daje możliwość modyfikacji nie HTML, ale schematu JSON, opisywania go i dzielenia na części. Dodaj wersjonowanie. Waliduj pliki przed importem, aby nie zepsuć struktury danych.&lt;/p&gt;
&lt;h3&gt;Serwis i kontroler walidacji schematu&lt;/h3&gt;
&lt;p&gt;Dodaj nowe pakiety npm do walidacji przy użyciu schematów json.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;pnpm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; ajv ajv-formats&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Injectable &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@nestjs/common&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Ajv &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;ajv&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; addFormats &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;ajv-formats&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  dtoToJsonSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  ClassType&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  JsonSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./utils/dto-to-json-schema&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateIncidentDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../incidents/dto/create-incident.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateTriggerDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../triggers/dto/create-trigger.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateSymptomDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../symptoms/dto/create-symptom.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateMedicationDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../medications/dto/create-medication.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateLocationDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../locations/dto/create-locations.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  CreateWaterDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateBloodPressureDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateHeightDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateSleepDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateWeightDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../health-logs/dto/create-health-logs.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; DataValidationResponse &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./interface/validation.interface&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Injectable&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DataManagementService&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; ajv&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Ajv&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ajv &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Ajv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; allErrors&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;addFormats&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ajv&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// Above content&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;validateImportData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DataValidationResponse &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; schema&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JsonSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; validate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ajv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;schema&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; isValid &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;isValid&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; isValid&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; errors&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; validate&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;errors &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; isValid&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pomocnicza funkcja &lt;code&gt;mapValidatorToSchema&lt;/code&gt; do konwersji &lt;code&gt;DTO&lt;/code&gt; na schemat &lt;code&gt;JSON&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;reflect-metadata&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; getMetadataStorage &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;class-validator&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ClassType&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;args&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PrimitiveTypeName&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;number&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;integer&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;boolean&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;null&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PrimitiveSchema&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; PrimitiveTypeName&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  format&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;enum&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ArraySchema&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JsonSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ObjectSchema&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  properties&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Record&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; JsonSchema&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  required&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  additionalProperties&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;JsonSchema&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; PrimitiveSchema &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; ArraySchema &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; ObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ValidationMetadataLite&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  propertyName&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  constraints&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  each&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;MetadataStorageLite&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;getTargetValidationMetadatas&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    targetConstructor&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    targetSchema&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ValidationMetadataLite&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;asMetadataStorage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MetadataStorageLite &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;getTargetValidationMetadatas&#39;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; cast &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; obj &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; cast&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;getTargetValidationMetadatas &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;function&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; cast &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; MetadataStorageLite&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mapValidatorToSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  meta&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ValidationMetadataLite &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  designType&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JsonSchema &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; Number&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;number&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; Boolean&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;boolean&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; additionalProperties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isString&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isNumber&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;number&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isInt&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;integer&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isBoolean&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;boolean&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isDateString&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; format&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;date-time&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isUUID&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; format&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;uuid&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isEmail&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; format&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;email&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isArray&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isEnum&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; maybeEnum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isArray&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constraints&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constraints&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; schema&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; PrimitiveSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;maybeEnum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; schema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;enum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; maybeEnum&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; schema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; Number&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;number&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; Boolean&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;boolean&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; additionalProperties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token generic-function&quot;&gt;&lt;span class=&quot;token function&quot;&gt;dtoToJsonSchema&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  dtoClass&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ClassType&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ObjectSchema &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; rawStorage &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getMetadataStorage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; storage &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;asMetadataStorage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;rawStorage&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; metadatas&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ValidationMetadataLite&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; storage
    &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; storage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getTargetValidationMetadatas&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dtoClass &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; byProp &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Map&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ValidationMetadataLite&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; m &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; metadatas&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; prop &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;propertyName&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; arr &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; byProp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;??&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    byProp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; properties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Record&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; JsonSchema&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; required&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; byProp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;entries&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; designType &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Reflect&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getMetadata&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;token string&quot;&gt;&#39;design:type&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      dtoClass&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      prop&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Function&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; isArray &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isArray&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;isArray&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; eachMeta &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;each &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isArray&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; itemsSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mapValidatorToSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eachMeta&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      properties&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; itemsSchema &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; preferredOrder &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isDateString&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isEnum&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isNumber&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isInt&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isBoolean&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isUUID&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isEmail&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isString&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isObject&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; chosen&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ValidationMetadataLite &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; t &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; preferredOrder&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        chosen &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; t&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;chosen&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;chosen&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; chosen &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; propSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mapValidatorToSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;chosen&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; designType&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; hasNested &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;nestedValidation&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        hasNested &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        designType &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        designType &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; Object &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        designType &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        properties&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;dtoToJsonSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; ClassType&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        properties&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; propSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; isOptional &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isOptional&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; hasNotEmpty &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isNotEmpty&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;isOptional &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; hasNotEmpty&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; required&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; schema&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ObjectSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    properties&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    additionalProperties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;required&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; schema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;required &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; required&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; schema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Endpoint kontrolera do walidacji plików.&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
  Controller&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  Get&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  Post&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  UploadedFile&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  UseInterceptors&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  BadRequestException 
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@nestjs/common&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; FileInterceptor &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@nestjs/platform-express&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; DataManagementService &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./data-management.service&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Public &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../auth/decorators/public.decorator&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Controller&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;data-management&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DataManagementController&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;readonly&lt;/span&gt; dataManagementService&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DataManagementService&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Roles&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Role&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;schema&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dataManagementService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Roles&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Role&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Post&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;validate-upload&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;UseInterceptors&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;FileInterceptor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;file&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;validateFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;UploadedFile&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; file&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Express&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Multer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;File&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DataValidationResponse &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;file&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BadRequestException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;No file uploaded.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;file&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mimetype &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;application/json&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BadRequestException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Uploaded file must be a JSON file.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; fileContent&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; file&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;utf-8&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; jsonData&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fileContent&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; validationResult&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dataManagementService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;validateImportData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;jsonData&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;validationResult &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BadRequestException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;validationResult&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;message&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; validationResult &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; DataValidationResponse&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token function&quot;&gt;ErrorExceptionLogging&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; DataManagementController&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; error&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Przykład użycia we frontendzie:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;checkUploadedFile&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;file&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; File&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; formData &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;FormData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  formData&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;file&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; file&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;API_URL&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/api/v1/data-management/validate-upload&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    method&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;POST&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    body&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; formData&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isValid&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token builtin&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;File is perfect! Proceed with import.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token builtin&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Validation failed:&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;errors&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tutaj pełne zmiany kodu - &lt;a href=&quot;https://github.com/wirtaw/migraine-tracker-monolith/commit/6e9884018a822337c9546e28f1c3a480463d5bbe&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;backend&lt;/a&gt; i &lt;a href=&quot;https://github.com/wirtaw/migrane-tracker-dashboard/commit/dad4f607b455320753191ac1ce3d6c7362d2e25f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;frontend&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/migraine-pulse-data-schema-backend/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Paradoks głębi: dlaczego izolacja intelektualna jest nową walutą sukcesu</title>
        <link>https://blog.poplauki.eu/pl/blog/deep-work/</link>
        <description>&lt;p&gt;Ten artykuł powstał po przestudiowaniu przełomowej książki &lt;a href=&quot;https://en.wikipedia.org/wiki/Cal_Newport&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Cala Newporta&lt;/a&gt; „Głęboka praca: Zasady skoncentrowanego sukcesu w rozproszonym świecie&amp;quot;. Newport, profesor informatyki na Uniwersytecie Georgetown, argumentuje, że zdolność do skupienia się bez rozproszenia na poznawczo wymagających zadaniach staje się coraz rzadsza — i coraz cenniejsza — w naszej gospodarce opartej na wiedzy. To opracowanie przekazuje najważniejsze wnioski z jego badań, ujęte w perspektywie praktycznego zastosowania dla współczesnych profesjonalistów.&lt;/p&gt;
&lt;h2&gt;Paradoks głębi: dlaczego izolacja intelektualna jest nową walutą sukcesu&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Epidemia rozproszenia: tonięcie w funkcjonalnej nieistotności&lt;/strong&gt;
We współczesnym krajobrazie pracy umysłowej rozwija się cicha kryzys. Większość profesjonalistów tonie w morzu funkcjonalnej nieistotności — uwięziona w stanie ciągłego ruchu, który nie przynosi żadnej trwałej wartości. Opanowaliśmy sztukę „bycia zajętymi&amp;quot;, podczas gdy nasza zdolność do tworzenia wartościowych rezultatów więdnie. Ten problem wynika z fundamentalnej niezdolności do rozróżniania dwóch typów wysiłku: Głębokiej pracy i Powierzchownej pracy.
Głęboka praca odnosi się do czynności zawodowych wykonywanych w stanie skupienia bez rozproszenia, które pchają twoje zdolności poznawcze do ich absolutnego limitu. Te wysiłki tworzą nową wartość, doskonalą twoją umiejętność i są niezwykle trudne do odtworzenia. Powierzchowna praca natomiast obejmuje niewymagające poznawczo zadania logistyczne, często wykonywane podczas rozproszenia. W nowej gospodarce zdolność do głębi staje się coraz rzadsza dokładnie w momencie, gdy jej wartość rynkowa gwałtownie rośnie. To już nie jest zwykły nawyk; to supermoc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Zaleta głębokiej pracy: mistrzostwo w nowej gospodarce&lt;/strong&gt;
Aby przetrwać przesunięcie w kierunku zautomatyzowanej i hiperkonkurencyjnej gospodarki, trzeba opanować dwie niezbędne umiejętności: zdolność do szybkiego uczenia się złożonych rzeczy oraz zdolność do osiągania wyników na poziomie elite z jakością i szybkością. Żadnej z nich nie można osiągnąć poprzez fragmentację uwagi przy powierzchownym wysiłku.
Jako badacz wydajności poznawczej twierdzę, że głębia jest fundamentalnym mechanizmem tworzenia wartości. Aby ją osiągnąć, trzeba wybrać strukturę koncentracji. Metoda monastyczna polega na radykalnej izolacji w celu skupienia na jednym wysokiego poziomu celu. Metoda bimodalna pozwala na wyraźny podział czasu między okresami głębi a okresami na wszystko inne. Wreszcie metoda dziennikarska polega na natychmiastowym przełączaniu się w stan głębokiej pracy, gdy tylko pojawi się wolna chwila. Niezależnie od metody, cel jest ten sam:
„Głęboka praca to skupienie na czynnościach zawodowych bez rozproszenia, aby zdolności poznawcze mogły rozwinąć się w pełni. Tylko poprzez takie wysiłki tworzone są nowe wartości i rozwijane umiejętności&amp;quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pułapka zajętości: droga najmniejszego oporu&lt;/strong&gt;
Dlaczego tak trudno nam wybrać głębię? Odpowiedź leży w &lt;strong&gt;Zasadzie najmniejszego oporu&lt;/strong&gt;. W braku jasnej informacji zwrotnej o tym, jak konkretne zachowania wpływają na wynik finansowy, instynktownie wybieramy to, co jest najłatwiejsze w danym momencie. Nie jesteśmy leniwi; jesteśmy poznawczo niezakotwiczeni.
Ponieważ współczesna praca umysłowa nie ma widocznego wyniku linii produkcyjnej, pracownicy powracają do miar epoki przemysłowej: robić jak najwięcej i jak najbardziej widocznie. Ta „widoczna zajętość&amp;quot; służy jako psychologiczna maska. Mylimy liczbę wysłanych e-maili z wartością naszego wyniku, wybierając powierzchowną drogę najmniejszego oporu zamiast rygorystycznej, często samotnej drogi poznawczej głębi.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Produktywna siła bezczynności: strategia przedsiębiorcza&lt;/strong&gt;
Wysoko intensywna koncentracja wymaga poświęcenia temu, co wielu nazwałoby „bezczynnością&amp;quot;. Jednak wysoko wydajny człowiek nie traktuje odpoczynku jako luksusu, lecz jako warunek wstępny. Aby osiągnąć maksymalne wyniki, trzeba przyjąć mentalność przedsiębiorcy — dążyć do rezultatów jak biznesmen — który uznaje, że czas odpoczynku jest paliwem dla intuicji.
Z neurologicznym punktu widzenia, umysł nie potrzebuje całkowitego zaprzestania aktywności; potrzebuje zmiany tempa, aby odzyskać energię wymaganą do głębokiej pracy. Aby zintegrować odpoczynek z systemem wysokiej wydajności, stosuj te cztery zasady:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Skup się na znaczących celach:&lt;/strong&gt; Kieruj energię na niewielką liczbę kluczowych celów.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wskaźniki wyprzedzające:&lt;/strong&gt; Mierz zachowania prowadzące do sukcesu (np. godziny spędzone na głębokiej pracy).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tablica wyników:&lt;/strong&gt; Prowadź widoczny zapis zwycięstw, aby utrzymać motywację.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rytm rozliczania się:&lt;/strong&gt; Ustal regularny rytm przeglądu wyników.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;strong&gt;Podejście rzemieślnika do technologii&lt;/strong&gt;
Większość ludzi wybiera swoje narzędzia cyfrowe na podstawie &lt;strong&gt;Zasady jakiejkolwiek korzyści&lt;/strong&gt;: jeśli narzędzie oferuje jakąkolwiek minimalną przewagę, czują się usprawiedliwieni w jego używaniu. To puładka prowadząca do fragmentacji poznawczej. &lt;strong&gt;Zasada rzemieślnika&lt;/strong&gt; oferuje bardziej rygorystyczną alternatywę:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;„Używaj narzędzia tylko wtedy, gdy jego pozytywny wpływ na główne cele znacząco przewyższa negatywy&amp;quot;.&lt;/p&gt;
&lt;p&gt;Rozważmy autora Michaela Lewisa. Jego główny cel zawodowy to pisanie historii zmieniających światopogląd. Aby to osiągnąć, jego niezbędne kroki to cierpliwe, głębokie badania i przemyślane pisanie. Przez ten pryzmat narzędzie takie jak Twitter (X) oferuje minimalną korzyść (pozostawanie „poinformowanym&amp;quot;), która jest przyćmiona przez negatywny wpływ na jego zdolność do głębokich badań.
Aby przełamać zależność od narzędzi, wypróbuj 30-dniowy „post cyfrowy&amp;quot;. Następnie zapytaj: czy te trzydzieści dni byłyby znacząco lepsze, gdybym korzystał z tej usługi? Czy komuś zależało, że mnie nie było? Jeśli odpowiedź brzmi „nie&amp;quot;, narzędzie przeszkadza w twojej głębi.&lt;/p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Wysokiej jakości wypoczynek: umysł potrzebuje zmiany, nie odpoczynku&lt;/strong&gt;
Wielu profesjonalistów traci skupienie na „stronach-wampirach&amp;quot; w wolnym czasie, ponieważ nie planują swojego wypoczynku. Jak zauważył Arnold Bennett, umysł nie jest jak kończyna, która musi przestać się ruszać, aby się zregenerować:
„Umysł może pracować nieprzerwanie i ciężko; nie męczy się jak ręka czy noga… Wszystko, czego potrzebuje, to zmiana, nie odpoczynek (z wyjątkiem snu)&amp;quot;.
Nieplanowany wieczór tworzy próżnię łatwo wypełnianą przez powierzchowne rozproszenia. Strukturyzując swój wolny czas zamierzoną, wymagającą aktywnością — czytaniem, złożonymi hobby lub głębokimi więziami społecznymi — chronisz swoją zdolność poznawczo. Zamierzony wypoczynek zapewnia, że gdy dzień pracy się zacznie, twój umysł będzie odświeżony i gotowy do wysoko intensywnej koncentracji.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Radikalna sztuka ignorowania e-maili&lt;/strong&gt;
Komunikacja jest często największym wrogiem integralności poznawczej. Aby zachować głębię, musisz przyjąć „Zasadę profesora&amp;quot; radykalnej selektywności. Ignoruj każdą wiadomość spełniającą te kryteria:&lt;/p&gt;
&lt;p&gt;Jest sformułowana niejasno lub trudno odpowiedzieć na nią bezpośrednio.
Propozycja jest nieciekawa lub nieistotna dla twoich głównych celów.
Odpowiedź nie przyniesie pozytywnego rezultatu, a nic złego się nie stanie, jeśli nie odpowiesz.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ponadto stosuj &lt;strong&gt;ukierunkowane zarządzanie e-mailem&lt;/strong&gt;. Zamiast wymiany wiadomości tam i z powrotem, udzielaj odpowiedzi „zorientowanej na proces&amp;quot;, która zamyka temat. Rozważ typową prośbę o „kawę&amp;quot;. Zamiast mówić „Oczywiście, kiedy?“, co wywołuje 10-wątkową wymianę e-maili, odpowiedz: „Mogę spotkać się we wtorek o 10:00 w kawiarni na 5th Street. Jeśli to pasuje, zobaczę się tam; jeśli nie, proszę zaproponuj dwa inne dogodne dla ciebie czasy”. To zmusza nadawcę do większego wysiłku i uwalnia twój umysł od „otwartych pętli&amp;quot;, które wysysają uwagę.&lt;/p&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;&lt;strong&gt;Wniosek: odwaga, by być mniej zajętym&lt;/strong&gt;
Sukces w nowoczesnej erze nie jest przyznawany tym, którzy mogą pracować najdłużej lub odpowiadać na najwięcej powiadomień. Jest zarezerwowany dla tych, którzy mają odwagę chronić swoją głębię poznawczą. Bezlitośnie odrzucając powierzchowność, nie tylko oszczędzasz czas — zyskujesz energię potrzebną do stworzenia czegoś znaczącego.
Zmniejszanie powierzchownej pracy nie polega na robieniu mniej; chodzi o stanie się rodzajem profesjonalisty, który może osiągać wyniki niemożliwe w stanie ciągłego rozproszenia. Patrząc na swój kalendarz, zapytaj siebie: które powierzchowne nawyki jesteś gotów poświęcić, aby odzyskać swoją supermoc?&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/deep-work/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Migraine Pulse – moja droga do stworzenia osobistej aplikacji do śledzenia migreny</title>
        <link>https://blog.poplauki.eu/pl/blog/migraine-pulse-origin/</link>
        <description>&lt;h2&gt;Część pierwsza. Jak to się zaczęło&lt;/h2&gt;
&lt;p&gt;Czasami cierpię na napady migreny – czasem silne. Słyszałem, że warto prowadzić dziennik napadów. W 2024 roku, po jednym szczególnie silnym napadzie, zacząłem spisywać tekstowe opisy z datami i objawami. Równolegle zacząłem testować różne aplikacje, w których próbowałem zapisywać te same zdarzenia.&lt;/p&gt;
&lt;h2&gt;Dlaczego istniejące aplikacje mi nie odpowiadały&lt;/h2&gt;
&lt;p&gt;Po pierwsze, co mi się nie podobało w istniejących aplikacjach – ich sposób przetwarzania danych osobowych był niewystarczająco przejrzysty. A bezpieczeństwo też było wątpliwe.&lt;/p&gt;
&lt;p&gt;Po drugie, brakowało importu i eksportu moich danych. Mało formatów i żadnych standardów.&lt;/p&gt;
&lt;p&gt;Po trzecie, nie było możliwości dodawania własnej logiki napadów. Lub innego zasobu z danymi, które są mi potrzebne, jak prognozy burz magnetycznych lub ich historia.&lt;/p&gt;
&lt;p&gt;Wtedy zdecydowałem, że stworzę własny dziennik migreny do śledzenia objawów. I nie tylko to.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Czego się nauczyłem budując ten projekt&lt;/h2&gt;
&lt;p&gt;Budując ten projekt, jak i wszystko inne, uczyłem się nowych technologii i narzędzi. Wypróbowywałem usługi, których wcześniej nie używałem w pracy ani w innych osobistych projektach.&lt;/p&gt;
&lt;p&gt;Jedną z pierwszych rzeczy, której użyłem, było stworzenie prototypu frontendu. Pozostał prawie niezmieniony.&lt;/p&gt;
&lt;p&gt;Drugą rzeczą, której użyłem do burzy mózgów, generowania prototypów i przepisywania monotonnego kodu, była AI. Wypróbowałem tutaj ChatGPT, Khoj (Gemini, Claude Sonnet) oraz usługi Google Antigravity.&lt;/p&gt;
&lt;p&gt;Kod serwisów – &lt;a href=&quot;https://github.com/wirtaw/migraine-tracker-monolith&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;backend&lt;/a&gt; i &lt;a href=&quot;https://github.com/wirtaw/migrane-tracker-dashboard&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;frontend&lt;/a&gt; – udostępniłem publicznie, ponieważ uważam, że każdy powinien mieć możliwość wzięcia go i modyfikacji dla siebie. Albo aby pomóc mi go ulepszyć. Albo zaproponować i dodać nowe funkcje.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Co będzie w przyszłości?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Dodam więcej różnych raportów i moduł, który będzie analizował tylko twoje dane i na ich podstawie ostrzegał o zwiększonym prawdopodobieństwie migreny lub bólu głowy.&lt;/li&gt;
&lt;li&gt;Tłumaczenie na inne języki – pierwsze to ukraiński, litewski i polski.&lt;/li&gt;
&lt;li&gt;Wybór płci i dodanie cyklu kobiecego.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Środowisko demo, w którym można to wypróbować, nie wprowadzając wielu informacji – można je znaleźć, przechodząc przez ten &lt;a href=&quot;https://migrane-tracker-dashboard.sliplane.app/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Strona z dokumentacją jest &lt;a href=&quot;https://wirtaw.github.io/migraine-tracker-docs/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;tutaj&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Oficjalny produkt programu, który będzie zawierał moje osobiste funkcje i więcej integracji – można go znaleźć &lt;a href=&quot;https://migrainepulse.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;tutaj&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-image article-image--landscape article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-kaip-pradejau-kurti-heatmap-landscape-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-kaip-pradejau-kurti-heatmap-landscape-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-kaip-pradejau-kurti-heatmap-landscape-400w.jpeg&quot; width=&quot;400&quot; height=&quot;267&quot; alt=&quot;Heatmap Migrain Pulse&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;W kolejnych postach na blogu opowiem bardziej szczegółowo o każdej funkcji. Również o ciekawych odkryciach podczas tworzenia tego produktu.&lt;/p&gt;
&lt;p&gt;Powodzenia i zdrowia!&lt;/p&gt;
</description>
        <pubDate>Wed, 11 Mar 2026 22:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/migraine-pulse-origin/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Spokój w niespokojnych czasach Stoickie lekcje Seneki na rok 2026</title>
        <link>https://blog.poplauki.eu/pl/blog/stoic-strategies-tranquility-modern-world/</link>
        <description>&lt;p&gt;Kluczowe lekcje:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Dopasuj ciężar do sił: Burnout często wynika z brania na siebie zbyt wiele. Zapytaj siebie: „Czy jestem silniejszy niż ładunek, który chcę nieść?”.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wybieraj towarzystwo: Negatywność jest zaraźliwa. Unikaj ludzi, którzy „rozkoszują się nieszczęściem”. Twoje otoczenie to Twoja higiena psychiczna.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Elastyczność zamiast sztywności: Spokojny umysł to taki, który potrafi się adaptować. Jeśli plan A zawodzi, stoik szuka planu B, zamiast tracić energię na narzekanie.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 28 Feb 2026 16:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/stoic-strategies-tranquility-modern-world/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>40 prowokacyjnych pytań do głębokiej autorefleksji</title>
        <link>https://blog.poplauki.eu/pl/blog/40-provocative-questions-deep-self-reflection/</link>
        <description>&lt;h2&gt;Prowokacyjne pytania do samego siebie&lt;/h2&gt;
&lt;p&gt;Wielu z nas od czasu do czasu potrzebuje solidnego wstrząsu, aby wyrwać się z półautomatycznego, rutynowego stanu. Poniższa lista prowokacyjnych pytań otrzeźwia i pozwala spojrzeć na swoje życie z różnych perspektyw, stać się nieco bardziej świadomym, zrozumieć, co jest ważne, gdzie kryją się możliwości i wiele więcej. Nie ma na nie jednej “prawidłowej” odpowiedzi i nie na wszystkie można odpowiedzieć od razu. Jednak samo poszukiwanie pomoże Ci poznać siebie i swoje potrzeby, zastanowić się nad tym, co często pozostaje poza zasięgiem wzroku.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Co ludzie powiedzą na Twoim pogrzebie? I kto będzie na nim obecny?&lt;/li&gt;
&lt;li&gt;Jakie Twoje nawyki stoją między Tobą a szczęściem?&lt;/li&gt;
&lt;li&gt;Stoisz przed bramami raju, pytają Cię: „Dlaczego mamy Cię wpuścić?”. Jak odpowiesz?&lt;/li&gt;
&lt;li&gt;Jeśli stracisz dziś wszystko, jak będziesz działać? Do jakich ludzi zwrócisz się o pomoc? Jak zmienią się Twoje działania i nawyki?&lt;/li&gt;
&lt;li&gt;Czy są ludzie, którzy znaczą dla Ciebie bardzo wiele? Kiedy ostatni raz im to powiedziałeś?&lt;/li&gt;
&lt;li&gt;Co zmieniłbyś w swoim życiu, gdybyś wiedział, że nigdy nie zachorujesz i nie umrzesz?&lt;/li&gt;
&lt;li&gt;Masz milion dolarów, ale dziś jest ostatni dzień Twojego życia. Co zrobisz?&lt;/li&gt;
&lt;li&gt;Jak opisałbyś siebie w pięciu słowach?&lt;/li&gt;
&lt;li&gt;Jakie są szanse, że już przegapiłeś coś ważnego, czego będziesz żałować do końca życia?&lt;/li&gt;
&lt;li&gt;Jakie wnioski można by z tego wyciągnąć?&lt;/li&gt;
&lt;li&gt;Gdybyś mógł teraz zagwarantować sobie posiadanie trzech umiejętności, jakie by to były? A co najważniejsze — dlaczego?&lt;/li&gt;
&lt;li&gt;Gdybyś mógł zagwarantować sobie pozbycie się trzech nawyków, to których? W czym Ci one dzisiaj przeszkadzają i dlaczego do tej pory się ich nie pozbyłeś?&lt;/li&gt;
&lt;li&gt;Gdybyś mógł przeżyć trzy momenty z przeszłości, to jakie? Co jest w nich wyjątkowego?&lt;/li&gt;
&lt;li&gt;Gdybyś potrafił znaleźć podejście i wpływać na każdą osobę na świecie, jak wyglądałaby Twoja droga do sukcesu? Co byś osiągnął i w jaki sposób?&lt;/li&gt;
&lt;li&gt;Jaka jest Twoja pierwsza myśl w obliczu bardzo trudnego problemu lub porażki?&lt;/li&gt;
&lt;li&gt;Czy uważasz, że Twoja złość, irytacja i gniew to wyłącznie Twoja wina?&lt;/li&gt;
&lt;li&gt;Ile miałeś hobby pięć lat temu, a ile masz teraz? Jeśli jest różnica, to co jest przyczyną?&lt;/li&gt;
&lt;li&gt;Jakie są trzy główne wydarzenia w Twoim życiu? Podjąłeś trzy kluczowe decyzje i teraz żyjesz zupełnie inaczej, niż mogłeś. Dlaczego tak postąpiłeś i czy jesteś zadowolony z wyboru?&lt;/li&gt;
&lt;li&gt;Czym się zajmowałeś, gdy ostatnim razem byłeś tak pochłonięty, że straciłeś poczucie czasu?&lt;/li&gt;
&lt;li&gt;Czy starasz się od czasu do czasu szukać odpowiedzi na pytania dotyczące Twojego życia, czy po prostu puszczasz je wolno?&lt;/li&gt;
&lt;li&gt;Dlaczego rano jesteś zmotywowany, a wieczorem tracisz motywację? I odwrotnie, co dokładnie robiłeś, gdy rano nic Ci się nie chciało, a wieczorem byłeś pełen entuzjazmu?&lt;/li&gt;
&lt;li&gt;Gdyby odwiedziła Cię karma, pomogłaby Ci czy ukarała? Za co dokładnie i w jaki sposób?&lt;/li&gt;
&lt;li&gt;Co jesteś winien samemu sobie?&lt;/li&gt;
&lt;li&gt;Co jesteś winien swojej rodzinie i przyjaciołom?&lt;/li&gt;
&lt;li&gt;Kiedy myślisz o przyszłości — przeraża Cię ona czy inspiruje?&lt;/li&gt;
&lt;li&gt;Jak uważasz: należy najpierw pomóc samemu sobie, czy osobie potrzebującej pomocy? I w jakich konkretnie przypadkach?&lt;/li&gt;
&lt;li&gt;Co czyni Cię wyjątkowym?&lt;/li&gt;
&lt;li&gt;Ile osób naprawdę kochasz? Co dla nich robisz i jak często?&lt;/li&gt;
&lt;li&gt;Opisz najlepszą przygodę swojego życia.&lt;/li&gt;
&lt;li&gt;Gdzie chciałbyś mieszkać? Dlaczego jeszcze się tam nie przeprowadziłeś?&lt;/li&gt;
&lt;li&gt;Wierzysz bardziej w logikę czy myślenie twórcze?&lt;/li&gt;
&lt;li&gt;Kogo podziwiasz i dlaczego?&lt;/li&gt;
&lt;li&gt;Gdybyś dowiedział się, kiedy i jak umrzesz, jak zmieniłoby się Twoje życie teraz?&lt;/li&gt;
&lt;li&gt;Co to jest honor? Czy ma on dla Ciebie znaczenie?&lt;/li&gt;
&lt;li&gt;Co jest lepsze: dziesięć lat życia w doskonałym zdrowiu czy trzydzieści lat w przeciętnym?&lt;/li&gt;
&lt;li&gt;Gdybyś od tego momentu nie marnował czasu, co byś osiągnął?&lt;/li&gt;
&lt;li&gt;Które sfery swojego życia kontrolujesz?&lt;/li&gt;
&lt;li&gt;Częściej przebywasz w strefie komfortu czy poza nią?&lt;/li&gt;
&lt;li&gt;Uważasz się za bohatera czy złoczyńcę?&lt;/li&gt;
&lt;li&gt;Których naukowców uważasz za złoczyńców i dlaczego?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Filozof Wolter nawoływał, by oceniać człowieka po pytaniach, jakie zadaje. To dobra i słuszna rada, ponieważ dzięki temu można dowiedzieć się wielu rzeczy: od umiejętności docierania do sedna spraw po osobiste priorytety. Ucz się zadawać właściwe pytania, również samemu sobie — to także swoista sztuka. Nieustannie pytaj siebie o to, dlaczego coś się wydarzyło i jak rozwiązać dany problem.&lt;/p&gt;
</description>
        <pubDate>Wed, 28 Jan 2026 23:29:37 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/40-provocative-questions-deep-self-reflection/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Siła braku opinii w sieci: Dlaczego warto czasem milczeć</title>
        <link>https://blog.poplauki.eu/pl/blog/power-of-not-having-an-online-opinion/</link>
        <description>&lt;p&gt;Nie musisz mieć opinii na każdy temat w internecie.
Niektóre sprawy to po prostu nie twój interes.&lt;/p&gt;
&lt;p&gt;Dzisiejszy świat wymusza na nas ciągłe zabieranie głosu. Prawdziwy komfort psychiczny zyskujemy jednak wtedy, gdy zrozumiemy, że nie każda dyskusja w sieci wymaga naszego udziału. Chroń swoją energię.&lt;/p&gt;
</description>
        <pubDate>Sat, 27 Dec 2025 16:02:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/power-of-not-having-an-online-opinion/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Architekci Rzeczywistości: Dlaczego Twoja Prawda Nie Musi Być Moją</title>
        <link>https://blog.poplauki.eu/pl/blog/architekci-rzeczywistosci-subiektywna-prawda/</link>
        <description>&lt;p&gt;Czy kiedykolwiek zastanawiałeś się, dlaczego dwie osoby patrzące na to samo wydarzenie, widzą dwie zupełnie różne historie? To nie błąd w “systemie” – to fundamentalna cecha naszej egzystencji.&lt;/p&gt;
&lt;p&gt;Każdy człowiek nosi w sobie własną prawdę. Nasze pojęcie o religii, filozofii czy nawet faktach społecznych jest przefiltrowane przez unikalny zestaw doświadczeń. Ale co to tak naprawdę oznacza dla nas jako gatunku?&lt;/p&gt;
&lt;h2&gt;Człowiek jako Kreator z Wyobraźnią&lt;/h2&gt;
&lt;p&gt;Z punktu widzenia psychologii rozwoju, nie jesteśmy jedynie biernymi obserwatorami świata. Jesteśmy jego &lt;strong&gt;kreatorami&lt;/strong&gt;. To ludzka wyobraźnia, napędzana potrzebą zrozumienia otoczenia, “stworzyła” obecny świat w formie, jaką znamy.&lt;/p&gt;
&lt;p&gt;Budynki, w których mieszkamy, systemy prawne, którym podlegamy, a nawet pieniądz, którym płacimy – wszystko to istniało najpierw w czyjejś wyobraźni, zanim stało się materialną rzeczywistością. Jesteśmy architektami sceny, na której odgrywamy swoje życie.&lt;/p&gt;
&lt;h2&gt;Narzędzia, nie Więzienia: Religia, Etyka i Nauka&lt;/h2&gt;
&lt;p&gt;Często traktujemy religię, etykę, filozofię czy naukę jako absolutne, zewnętrzne byty, które narzucają nam swoją wolę. Jednak warto spojrzeć na nie inaczej. Zostały one wynalezione przez człowieka w konkretnym celu:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Uproszczenie komunikacji:&lt;/strong&gt; Abyśmy mogli się porozumieć w skomplikowanym chaosie bodźców.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nadanie sensu:&lt;/strong&gt; Aby odpowiedzieć na odwieczne pytanie “dlaczego tu jesteśmy?”.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Te systemy to mapy, które pomagają nam nawigować przez życie. Ale jak wiadomo – mapa to nie terytorium.&lt;/p&gt;
&lt;h2&gt;Prawo do Własnej Interpretacji&lt;/h2&gt;
&lt;p&gt;Najważniejszy wniosek płynący z tej perspektywy jest wyzwalający: istnienie wspólnych systemów &lt;strong&gt;nie usprawiedliwia oczekiwania, że każdy musi rozumieć i przejmować wszystkie rzeczy tak samo.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Twoja interpretacja filozofii może różnić się od mojej. Twój sposób przeżywania duchowości może być unikalny. To, że używamy tych samych słów (jak “dobro”, “prawda”, “sukces”), nie oznacza, że definicje w naszych głowach są identyczne.&lt;/p&gt;
&lt;p&gt;Zrozumienie, że każdy z nas jest suwerennym twórcą własnego rozumienia świata, to pierwszy krok do głębszej tolerancji i lepszej komunikacji. Zamiast walczyć o to, czyja “mapa” jest prawdziwa, zacznijmy doceniać różnorodność krajobrazów, które dzięki nim odkrywamy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zapamiętaj:&lt;/strong&gt; Rzeczywistość jest płótnem, a Twoja percepcja pędzlem. Maluj odważnie.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        <pubDate>Sat, 13 Dec 2025 16:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/architekci-rzeczywistosci-subiektywna-prawda/</guid>
      </item>
      
    
    
    
    
    
    
    
    
      
      <item>
        <title>Jak przestać porównywać się z innymi i odnaleźć własną ścieżkę: Filozoficzne refleksje o sensie życia</title>
        <link>https://blog.poplauki.eu/pl/blog/stop-comparing-find-your-path/</link>
        <description>&lt;p&gt;Porównywanie się z innymi to nawyk zaszczepiony w nas od wczesnego dzieciństwa. Uczymy się patrzeć na siebie oczami otoczenia, być obiektem czyjejś oceny, dążyć do spełniania zewnętrznych oczekiwań. Tak rodzi się bezsensowny wyścig, w którym tracimy samych siebie.&lt;/p&gt;
&lt;p&gt;Ale warto się zastanowić: czy w tym wyścigu jest jakiś cel końcowy? Czy można osiągnąć prawdziwe zadowolenie, próbując dogonić cudze sukcesy, zmieniając się według cudzych standardów?&lt;/p&gt;
&lt;p&gt;Rzadko uczy się nas podążania ścieżką własnej duszy, szukania w sobie tego, co unikalne, bycia w zgodzie z samym sobą. Jak często pozwalamy, by świat zewnętrzny stał się naszym sternikiem, zapominając, że prawdziwa wolność to nie prawo do bycia jak wszyscy, lecz prawo do bycia sobą?&lt;/p&gt;
&lt;p&gt;Zwycięstwo można nazwać prawdziwym tylko wtedy, gdy jest ono wynikiem wewnętrznego wyboru, odzewu serca, ruchu własnej woli. Tylko wychodząc poza narzucone stereotypy, możemy zacząć żyć swoim prawdziwym życiem, a nie tylko odgrywać rolę społeczną.&lt;/p&gt;
&lt;p&gt;Wszystko inne to jedynie próba utrzymania się na powierzchni znanych scenariuszy, nie dopuszczając do siebie pytania: „Kim tak naprawdę jestem?”&lt;/p&gt;
&lt;p&gt;Jeśli chcesz zbliżyć się do swojej istoty, spróbuj wykonać krok:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Żyj od wewnątrz, a nie z zewnątrz.&lt;/li&gt;
&lt;li&gt;Pozwól sobie na odpowiedzialność za swoje uczucia i decyzje.&lt;/li&gt;
&lt;li&gt;Zrezygnuj z porównywania i rywalizacji — wybierz eksplorację i akceptację.&lt;/li&gt;
&lt;li&gt;Nie tłumacz się światu — światu nie jest potrzebny twój raport, lecz twoja obecność.&lt;/li&gt;
&lt;li&gt;Pracuj z namysłem, a nie wyczerpując się.&lt;/li&gt;
&lt;li&gt;Obudź twórczą siłę, pozwól jej prowadzić.&lt;/li&gt;
&lt;li&gt;Wypełniaj każdą czynność sensem i uwagą.&lt;/li&gt;
&lt;li&gt;Pozwól sobie na kreowanie sensu swojego życia — nie szukaj gotowego, lecz rodź swój własny.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 31 Oct 2025 21:10:49 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/stop-comparing-find-your-path/</guid>
      </item>
      
    
    
    
    
    
    
      
      <item>
        <title>9 Behawioralnych Oznak Prawdziwie Obiecujących Ludzi</title>
        <link>https://blog.poplauki.eu/pl/blog/9-behavioral-signs-of-truly-promising-people/</link>
        <description>&lt;p&gt;Znaczenie Twojego &lt;strong&gt;kręgu towarzyskiego&lt;/strong&gt; jest oczywiste. Jednak to, jak znaleźć &lt;strong&gt;wartościowych&lt;/strong&gt; lub &lt;strong&gt;obiecujących ludzi&lt;/strong&gt;, pozostaje otwartą kwestią. Oto zestawienie wymownych oznak behawioralnych.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Nie są ciągnięci w dół przez otoczenie ani własne pragnienia.&lt;/strong&gt; Są niezależni i potrafią odmawiać, rozsądnie trzymając się swoich priorytetów.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Nie gonią za tłumem.&lt;/strong&gt; Patrzą na rzeczy nieco inaczej. Szanują pojęcie &lt;strong&gt;„indywidualności”&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Nie boją się zadawać pytań.&lt;/strong&gt; Podtrzymują swoją ciekawość i są otwarci na dyskusję. Nie starają się agresywnie narzucać swoich poglądów jako jedynych słusznych.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Nie biorą udziału w small talku i bezsensownej gadaninie.&lt;/strong&gt; Nie obchodzi ich, kto co gotuje na obiad, kto z kim się spotyka, kto co założył, ani co powiedział jakiś celebryta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Preferują samotność zamiast hucznych imprez.&lt;/strong&gt; Rozumieją różnicę między fałszywą satysfakcją a prawdziwą przyjemnością.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Są łatwo irytowani przez głupich, agresywnie natarczywych i toksycznych ludzi.&lt;/strong&gt; Unikają takich osób za wszelką cenę.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Potrafią łatwo i jasno wszystko wytłumaczyć.&lt;/strong&gt; Są wyraziści w swoich pomysłach i w razie potrzeby mogą sporządzić szkice lub diagramy dla jasności.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unikają powierzchownej wiedzy.&lt;/strong&gt; Badają rzeczy z różnych stron i autentycznie cieszą się nieznanymi, alternatywnymi punktami widzenia.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Jeśli natkniesz się na kogoś, kto pasuje do opisu co najmniej 2-3 punktów, to jest osoba, której potrzebujesz. Jej towarzystwo pomoże Ci szybciej osiągnąć sukces. Odpowiednio, im więcej takich ludzi w Twoim otoczeniu, tym lepiej.&lt;/p&gt;
</description>
        <pubDate>Wed, 29 Oct 2025 20:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/9-behavioral-signs-of-truly-promising-people/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Dlaczego stoisz w miejscu? 7 powodów, dla których warto przestać i zacząć działać</title>
        <link>https://blog.poplauki.eu/pl/blog/why-youre-stuck-personal-growth/</link>
        <description>&lt;p&gt;Z pewnością każdy z nas miał w życiu moment, kiedy czuł, że stoi w miejscu. Marzymy o wielkich rzeczach, snujemy plany, ale z jakiegoś powodu rzeczywistość nie nadąża za naszymi ambicjami. Ten artykuł nie jest po to, by Cię zdemotywować, lecz by rzucić światło na niewygodne prawdy, które mogą być kluczem do odblokowania Twojego prawdziwego potencjału. Przygotuj się na konfrontację z siedmioma powodami, które mogą być źródłem Twojego braku postępu. Gotowy na szczerą rozmowę z samym sobą?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Nie straciłeś wystarczająco dużo.&lt;/em&gt; Jesteś zbyt wygodny w swoim przeciętnym życiu i nawet nie próbuj. Mówisz o uczeniu się nowych rzeczy, zamiast faktycznie je robić.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Za bardzo przejmujesz się tym, co myślą inni.&lt;/em&gt; Dostosowujesz się, aby się dopasować, skupiając się na tym, co posiadasz, zamiast na tym, co robisz.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Myślisz, że jesteś mądrzejszy niż jesteś.&lt;/em&gt; Właśnie nauczyłeś się tego samego, co wszyscy inni, aby zdać testy, ale prawdziwa wiedza pochodzi z prawdziwego życia.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Nie czytasz.&lt;/em&gt; Czytasz tylko to, co musisz, albo nic. Wolisz oglądać telewizję, niż nauczyć się czegoś nowego lub zrozumieć różne perspektywy.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Nie jesteś ciekawy.&lt;/em&gt; Po prostu chłoniesz każdą wiadomość, którą cię karmi się łyżeczką, nigdy niczego nie kwestionując ani nie kopiąc głębiej.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Nie zadajesz pytań.&lt;/em&gt; Nie kwestionujesz autorytetów, ani nawet siebie. Po prostu przetrwasz w monotonii.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Prawda cię wkurza.&lt;/em&gt; Żyjesz z głową w chmurach, ignorując rzeczywistość i prawdopodobnie denerwuje Cię teraz ten artykuł. Jesteś jedyną osobą, która powstrzymuje się przed robieniem niesamowitych rzeczy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://raymmar.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Raymmar Tirado&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Co sądzisz o tych powodach?&lt;/p&gt;
</description>
        <pubDate>Thu, 25 Sep 2025 19:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/why-youre-stuck-personal-growth/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>🚀 Czy naprawdę się rozwijasz jako programista?</title>
        <link>https://blog.poplauki.eu/pl/blog/rozwoj-programisty-quiz/</link>
        <description>&lt;p&gt;&lt;em&gt;Zadaj sobie pytanie:&lt;/em&gt; Czy Twoje codzienne decyzje prowadzą Cię do wzrostu, czy tylko do wygody?&lt;/p&gt;
&lt;p&gt;Sprawdź siebie w poniższym quizie — 10 pytań, które pomogą Ci ocenić, czy naprawdę rośniesz jako inżynier oprogramowania.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;✅ Quiz: Czy rozwijasz się jako programista?&lt;/p&gt;
&lt;p&gt;Oceń każdy punkt w skali od 0 (nie dotyczy mnie) do 5 (zdecydowanie tak):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Czy działasz z własnej inicjatywy, bez czekania na polecenia?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Czy Twoja aktywność przekłada się na realny postęp?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Czy potrafisz działać mimo dyskomfortu?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Czy bierzesz odpowiedzialność za swoje błędy i sukcesy?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Czy regularnie prosisz o informację zwrotną?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Czy potrafisz odmawiać zadaniom, które nie mają sensu?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Czy uczysz się poza bieżącymi projektami?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Czy dzielisz się wiedzą z innymi?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Czy masz odwagę myśleć niezależnie?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Czy Twoje działania są zgodne z Twoimi wartościami?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;📊 Interpretacja wyniku:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;0–20 pkt – Czas na refleksję. Może działasz z automatu, zamiast świadomie się rozwijać.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;21–35 pkt – Jesteś na dobrej drodze, ale warto przyjrzeć się obszarom, które Cię blokują.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;36–50 pkt – Brawo! Twoje podejście pokazuje, że rozwój to dla Ciebie codzienna praktyka.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/posts/daniil-shykhov_3-red-flags-in-engineers-who-never-grow-activity-7352224943167688704-bORI&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;3 Red Flags in Engineers Who Never Grow&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 15 Sep 2025 22:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/rozwoj-programisty-quiz/</guid>
      </item>
      
    
    
      
      <item>
        <title>Analiza świata i motywów w „Opowieściach z meekhańskiego pogranicza. Północ – Południe” Roberta M. Wegnera</title>
        <link>https://blog.poplauki.eu/pl/blog/opowiesci-meekhan-wegner-analiza/</link>
        <description>&lt;p&gt;&lt;a href=&quot;https://blog.poplauki.eu/pl/blog/opowiesci-meekhan-wegner-analiza/(https://www.goodreads.com/author/show/2932918.Robert_M_Wegner)&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Robert M. Wegner&lt;/a&gt;, twórca uniwersum Meekhanu, zyskał uznanie dzięki swojej zdolności do budowania światów, które wykraczają poza tradycyjne ramy gatunku fantasy. Jego twórczość, porównywana przez doświadczonych czytelników do takich autorów jak J.R.R. Tolkien, George R.R. Martin czy Andrzej Sapkowski, wyróżnia się dogłębnym przedstawieniem kultur, wierzeń i polityki. W „Opowieściach z meekhańskiego pogranicza. Północ – Południe” autor prezentuje fascynujące zderzenie dwóch skrajnie różnych społeczności.&lt;/p&gt;
&lt;h2&gt;Kulturowe kontrasty: Północ i Południe Meekhanu&lt;/h2&gt;
&lt;p&gt;Wegner z mistrzostwem maluje obraz dwóch odmiennych narodów. Północna część Meekhanu to terytorium zamieszkane przez góralskie plemiona, których mentalność i struktura społeczna mogą przypominać polską kulturę góralską. Ich życie opiera się na prostocie, bliskości natury i silnych, rodowych więzach.&lt;/p&gt;
&lt;p&gt;Zupełnym przeciwieństwem jest południowy lud Meekhanu, którego charakterystyka przywołuje na myśl Fremenów z „Diuny” Franka Herberta. Żyją w surowym, pustynnym środowisku, które ukształtowało ich na nieugiętych, wytrzymałych i niezłomnych wojowników. To zderzenie kulturowe jest osią narracji, pozwalając Wegnerowi na eksplorację uniwersalnych tematów tożsamości, przetrwania i konfliktu wartości.&lt;/p&gt;
&lt;h2&gt;Złożoność psychologiczna i moralne dylematy&lt;/h2&gt;
&lt;p&gt;Książka wychodzi poza klasyczną walkę dobra ze złem, skupiając się na subtelnych, psychologicznych motywach. Jednym z najbardziej intrygujących wątków jest wewnętrzny konflikt Yatecha z plemienia Yassech. Po zabiciu dziewczyny, która jednak ujrzała jego twarz, bohater zmuszony jest zmierzyć się z konsekwencjami, które łamią jego rodowe przekonania i naruszają kodeks honorowy. Ten wątek nie tylko dodaje głębi postaci, ale także ilustruje, jak kruche są tradycje w obliczu osobistej traumy i moralnych wyborów.&lt;/p&gt;
&lt;p&gt;Wegner porusza również szersze zagadnienia, które rezonują z naszą współczesnością. Jak trafnie zauważono w notatkach, cytaty z książki odnoszą się do ponadczasowych problemów:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Pamięć i historia&lt;/em&gt;: „Moja matka mawia, że jedyną rzeczą krótszą niż kuśka jej męża jest ludzka pamięć”. Ten cyniczny, lecz celny aforyzm, podkreśla ulotność ludzkiej pamięci i jej kluczowe znaczenie w kontekście wojny i pokoju.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Narracja i wina&lt;/em&gt;: „Zamieniacie winę na poczucie krzywdy? To musi być łatwe i proste, pozwala budzić się co rano z przekonaniem o własnej wyższości nad resztą świata i pewnością, że każdy występek da się usprawiedliwić”. Ten cytat stanowi przenikliwą krytykę manipulacji narracją, powszechnej we współczesnym świecie mediów i internetu, gdzie narracje tworzone wokół poczucia winy są potężnym narzędziem.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Imperializm i usprawiedliwienie agresji&lt;/em&gt;: Wegner eksploruje mechanizmy usprawiedliwiania agresji, czy to pod pretekstem religijnym, kulturowym, czy obroną własnych interesów. Autor wskazuje na psychologiczne podłoże ludzkiej natury, która ma skłonność do usprawiedliwiania napaści na inne państwa.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Podsumowania&lt;/h2&gt;
&lt;p&gt;„Opowieści z meekhańskiego pogranicza. Północ – Południe” to pozycja obowiązkowa dla każdego, kto ceni sobie literaturę, która prowokuje do myślenia. To nie tylko historia o walce, ale także głęboka analiza ludzkiej psychiki i mechanizmów społecznych. Wegner stworzył świat, w którym magia i polityka przeplatają się z codziennymi dylematami, a bohaterowie zmuszeni są stawiać czoła nie tylko zewnętrznym zagrożeniom, ale przede wszystkim własnym przekonaniom. To świadectwo, że prawdziwa siła fantasy leży w zdolności do opowiadania o naszej rzeczywistości w krzywym zwierciadle fikcji.&lt;/p&gt;
</description>
        <pubDate>Sat, 16 Aug 2025 12:30:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/opowiesci-meekhan-wegner-analiza/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Przydatne zasoby do nauki JavaScript na GitHubie</title>
        <link>https://blog.poplauki.eu/pl/blog/list-js-useful-links/</link>
        <description>&lt;p&gt;Witaj w mojej przygotowanej liście wspaniałych repozytoriów GitHub, które mogą pomóc Ci nauczyć się JavaScript, począwszy od podstaw aż po zaawansowane koncepcje. GitHub to skarbnica materiałów edukacyjnych, przykładów kodu i interaktywnych projektów.&lt;/p&gt;
&lt;p&gt;Lista linków do JavaScript:&lt;/p&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sorrycc/awesome-javascript&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Awesome JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/getify/You-Dont-Know-JS&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;You-Dont-Know-JS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/denysdovhan/wtfjs&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Wtfjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mbeaudru/modern-js-cheatsheet&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Modern JS Cheatsheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/HowProgrammingWorks/Book/blob/master/content/en/Index.md&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;HowProgrammingWorks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/trekhleb/javascript-algorithms&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;JavaScript Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ryanmcdermott/clean-code-javascript&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;clean-code-javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sindresorhus/awesome-npm&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Awesome npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tc39&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Ecma International, Technical Committee 39 – ECMAScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 29 Jun 2025 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/list-js-useful-links/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Niewidzialne Łańcuchy: Zrozumienie 5 Pułapek Neurotyzmu</title>
        <link>https://blog.poplauki.eu/pl/blog/understanding-the-5-traps-of-neuroticism/</link>
        <description>&lt;p&gt;Czy kiedykolwiek czułeś uporczywy niepokój, dręczące poczucie, że coś jest nie tak, nawet gdy na zewnątrz wszystko wydaje się w porządku? A może obserwowałeś wzorce u innych, które po prostu się nie sumują? Możliwe, że napotykasz subtelny, ale potężny wpływ neurotyzmu.&lt;/p&gt;
&lt;p&gt;Neurotyzm, w swej istocie, jest często konsekwencją nierozwiązanych wewnętrznych konfliktów. To złożony krajobraz psychologiczny, gdzie nasze wewnętrzne zmagania rzutują na zewnątrz, czasami zniekształcając nasze postrzeganie i interakcje w nieoczekiwany sposób. Dziś przyjrzymy się pięciu wspólnym „pułapkom”, w które często wpadają osoby skłonne do wzorców neurotycznych, i co najważniejsze, jak je rozpoznać u siebie lub u innych.&lt;/p&gt;
&lt;h2&gt;1. Roszczenie do Miłości: Gdy Związek Staje się Kulą u Nogi&lt;/h2&gt;
&lt;p&gt;Wszyscy szukamy miłości i więzi, ale dla osoby neurotycznej sama definicja miłości może ulec zniekształceniu. To, co może być nazwane „miłością”, często jest czymś zupełnie innym – desperacką potrzebą, pasożytniczym uzależnieniem lub pragnieniem posiadania.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jak się manifestuje:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Potrzeba, by inni żyli Twoim życiem&lt;/strong&gt;: Niezdolność do samodzielnego funkcjonowania, poleganie na innej osobie w zaspokajaniu podstawowych potrzeb lub zapewnianiu poczucia sensu. Nie chodzi o wspólne życie, ale o fundamentalną niezdolność do życia własnym życiem.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pasożytnicze istnienie&lt;/strong&gt;: Uzależnienie od kogoś innego w zaspokajaniu swoich potrzeb, ponieważ jesteś niezdolny lub niechętny do samodzielnego ich zaspokojenia. To nie jest wzajemne wsparcie; to jednostronny drenaż.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Posiadanie dla prestiżu&lt;/strong&gt;: Pragnienie „posiadania” innej osoby, zwłaszcza jeśli ta osoba ma znaczną władzę, prestiż lub bogactwo. Postrzegana „miłość” dotyczy mniej samej osoby, a bardziej tego, co reprezentuje dla Twojego własnego poczucia ważności.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Zrozumienie wpływu&lt;/strong&gt;: Ta pułapka prowadzi do relacji zbudowanych na niestabilnych fundamentach, często powodując ogromne napięcie i niezadowolenie u obu stron. To miłość, która dusi, a nie wyzwala.&lt;/p&gt;
&lt;h2&gt;2. Roszczenie do Życzliwości: Uległość Maskująca się jako Cnota&lt;/h2&gt;
&lt;p&gt;Życzliwość to piękna cecha, ale podobnie jak miłość, może być błędnie interpretowana w ramach neurotycznych. Tutaj to, co wydaje się „życzliwością”, może być w rzeczywistości głęboko zakorzenioną uległością, tłumieniem prawdziwych uczuć napędzanym strachem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jak się manifestuje&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stłumiona agresja&lt;/strong&gt;: Zamiast wyrażać uzasadniony gniew lub frustrację, osoba neurotyczna może tłumić te agresywne impulsy z powodu przytłaczającego strachu przed osądem lub odrzuceniem.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Uprzejme zachowanie&lt;/strong&gt;: Nadmierne pragnienie zadowolenia, nawet kosztem osobistym, nie z prawdziwego altruizmu, ale z desperackiej potrzeby aprobaty. To nie jest prawdziwa empatia; to strategiczny ruch mający na celu uniknięcie dezaprobaty.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Zrozumienie wpływu&lt;/strong&gt;: Ta pułapka uniemożliwia autentyczne wyrażanie siebie i może prowadzić do narastającej urazy pod fasadą uprzejmości. Utrudnia to również innym prawdziwe nawiązanie kontaktu, ponieważ życzliwość wydaje się bardziej przedstawieniem niż szczerą intencją.&lt;/p&gt;
&lt;h2&gt;3. Roszczenie do Wszechwiedzącego Zainteresowania: Gdy Intelekt Dominuje Nad Emocjami&lt;/h2&gt;
&lt;p&gt;Dla niektórych neurotycznych jednostek, szczególnie tych odłączonych od swoich uczuć i emocji, istnieje silne przekonanie, że wszystko można rozwiązać za pomocą czystego rozumu. Często przekłada się to na fasadę wszechwiedzy lub intensywnego zainteresowania szeroką gamą tematów.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jak się manifestuje&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Nadmierne poleganie na intelekcie&lt;/strong&gt;: Przekonanie, że analiza logiczna może rozwiązać wszystkie problemy, często odrzucając rolę emocji, intuicji czy dynamiki międzyludzkiej.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Zawód jako tarcza&lt;/strong&gt;: Poświęcenie się zawodowi lub sprawie, nie ze względu na ich wewnętrzną wartość, ale jako sposób na osiągnięcie dobrobytu materialnego, prestiżu lub władzy. Prawdziwa motywacja jest ukryta, nawet przed samym sobą.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Powierzchowne zaangażowanie&lt;/strong&gt;: Szerokie, ale często płytkie, zainteresowanie wieloma rzeczami, służące jako sposób na uniknięcie głębszej introspekcji emocjonalnej lub prawdziwej wrażliwości.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Zrozumienie wpływu&lt;/strong&gt;: Ta pułapka może stworzyć emocjonalną próżnię, prowadząc do życia, które wydaje się intelektualnie bogate, ale emocjonalnie niespełnione. Może również utrudniać innym tworzenie głębokich więzi, ponieważ unika się prawdziwej wymiany emocjonalnej.&lt;/p&gt;
&lt;h2&gt;4. Roszczenie do Uczciwości i Sprawiedliwości: Agresja Przebrana za Prawość&lt;/h2&gt;
&lt;p&gt;Ta pułapka jest częściej spotykana u agresywnych typów neurotycznych. To, co prezentują jako niezachwianą uczciwość i zaangażowanie w sprawiedliwość, jest często cienko zawoalowanym wyrazem ich własnej agresji, przebranym za wyższość moralną.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jak się manifestuje&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Brutalna „uczciwość”&lt;/strong&gt;: Niezdolność do „koloryzowania” lub taktu jest prezentowana jako cnota, ale często służy jako ujście dla wrogości, mającej na celu poniżenie lub umniejszenie innych, a nie oferowanie konstruktywnej prawdy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;„Nie” jako broń&lt;/strong&gt;: Mówienie „nie” nie jest asercją zdrowych granic czy siły, ale pragnieniem upokorzenia, stłumienia lub podważenia innych. Chodzi o kontrolę, a nie o przekonanie.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Moralne grandstanding&lt;/strong&gt;: Tendencja do głośnego deklarowania własnej prawości, jednocześnie agresywnie wytykając postrzegane wady lub niesprawiedliwości innych.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Zrozumienie wpływu&lt;/strong&gt;: Ta pułapka tworzy toksyczne środowisko, podważając zaufanie i podsycając konflikty. Nie chodzi o prawdziwą prawość; chodzi o wykorzystanie pretekstu uczciwości do asertywnego dominowania i wyrażania agresji.&lt;/p&gt;
&lt;h2&gt;5. Roszczenie do Cierpienia: Nieświadome Motywy Kryjące się za Nieszczęściem&lt;/h2&gt;
&lt;p&gt;Osoby neurotyczne są podatne na cierpienie, ale to cierpienie często wydaje się być poza ich kontrolą, a przynajmniej jego prawdziwe źródła są ukryte. Dla zewnętrznego obserwatora ich nieszczęścia mogą wydawać się przesadzone lub nadmiernie udramatyzowane. Jednak często istnieją ukryte motywy za tym cierpieniem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jak się manifestuje&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Wołanie o uwagę/wsparcie&lt;/strong&gt;: Cierpienie może być nieświadomą prośbą o zauważenie, troskę lub walidację ze strony innych.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Błędne przypisywanie przyczyny&lt;/strong&gt;: Osoba neurotyczna może wierzyć, że cierpi z powodu poczucia winy, podczas gdy w rzeczywistości ból wynika z niedostosowania się do wyidealizowanego obrazu siebie.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Samotność maskowana jako złamane serce&lt;/strong&gt;: Wiara, że cierpi się z powodu nieodwzajemnionej miłości, podczas gdy prawdziwą przyczyną jest niezdolność do tolerowania samotności z powodu wewnętrznej fragmentacji.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Przesadzony dramat&lt;/strong&gt;: Chociaż ból jest prawdziwy dla cierpiącego, jego opis często wydaje się nieproporcjonalny do rzeczywistych wydarzeń, co prowadzi innych do poczucia zagubienia lub wyczerpania.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Zrozumienie wpływu&lt;/strong&gt;: Ta pułapka może prowadzić do cyklu wiecznego bycia ofiarą, gdzie prawdziwe samopoznanie i rozwój są utrudnione przez nieświadomą manipulację lub błędną interpretację własnego bólu. Utrudnia to również innym oferowanie skutecznego wsparcia, ponieważ prawdziwe potrzeby nie są wyrażane.&lt;/p&gt;
&lt;h2&gt;Rozpoznawanie Nici Neurotyzmu&lt;/h2&gt;
&lt;p&gt;Te pięć pułapek, choć odrębnych, często przeplata się, prowadząc do złożonych dylematów moralnych i wyzwań interpersonalnych dla neurotycznej jednostki. Są one ostatecznie konsekwencjami nierozwiązanych wewnętrznych konfliktów – osoby podzielonej na części, niezdolnej do pełnej integracji swoich doświadczeń i emocji.&lt;/p&gt;
&lt;p&gt;Zrozumienie tych wzorców jest pierwszym krokiem do ich rozplątywania. Jeśli rozpoznajesz te cechy w sobie, jest to zaproszenie do eksploracji swojego wewnętrznego krajobrazu z ciekawością i współczuciem. Jeśli widzisz je u innych, może to sprzyjać głębszemu zrozumieniu, pozwalając na interakcje z większą świadomością i empatią. Droga do uwolnienia się od tych niewidzialnych łańcuchów zaczyna się od rozpoznania.&lt;/p&gt;
&lt;h2&gt;Źródło&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.instagram.com/psiholog_natakoshulko/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;psiholog_natakoshulko&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 28 Jun 2025 16:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/understanding-the-5-traps-of-neuroticism/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Cyniczne Prawdy: Niekomfortowe Rzeczywistości o Życiu i Związkach</title>
        <link>https://blog.poplauki.eu/pl/blog/cynical-truths/</link>
        <description>&lt;p&gt;&lt;picture class=&quot;article-image article-image--square article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/cynical-truths-square-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/cynical-truths-square-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/cynical-truths-square-400w.jpeg&quot; width=&quot;400&quot; height=&quot;400&quot; alt=&quot;Cyniczne Prawdy: Niekomfortowe Rzeczywistości o Życiu i Związkach&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wprowadzenie do Cynizmu&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cynizm, u swej podstawy, to filozofia zakorzeniona w kwestionowaniu norm społecznych i postrzeganych prawd. Polega na odrzucaniu iluzji i spoglądaniu na świat krytycznym, często sceptycznym, okiem. Chociaż może być postrzegany jako pesymistyczny, cynizm może być również ścieżką do bardziej autentycznego i świadomego istnienia. Cynicy cenią cnotę i rozsądek, często odrzucając konwencjonalne pragnienia bogactwa, władzy i sławy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;11 Cynicznych Prawd&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ciągle wszystkim wybaczając, pomagasz złu utrwalać się w bezkarności.&lt;/strong&gt; Przymykanie oczu na zło tylko pozwala mu kwitnąć.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Przesadzony punkt: Bóg cię nie wezwie.&lt;/strong&gt; Jesteś odpowiedzialny za swoje działania i ich konsekwencje.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Porażki życiowe są koniecznością.&lt;/strong&gt; Są nieuniknione i dostarczają cennych lekcji do rozwoju.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Przykład:&lt;/em&gt; Oblany test uczy, jak ważna jest nauka.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pieniądze, jakkolwiek na to nie patrzeć, są najważniejsze.&lt;/strong&gt; Stabilność finansowa często decyduje o możliwościach i jakości życia.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Nawet największa porażka ma wymówkę.&lt;/strong&gt; Ludzie zawsze znajdą sposób, aby racjonalizować swoje niedociągnięcia.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Przykład:&lt;/em&gt; Obwinianie złej koniunktury za nieudane przedsięwzięcie biznesowe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;„Zawsze mów tak” nie jest dobrą zasadą.&lt;/strong&gt; Ustalanie granic jest kluczowe dla samooceny i zapobiegania wykorzystywaniu.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Nie jesteś pierwszy w kolejce do niesprawiedliwości tego świata.&lt;/strong&gt; Cierpienie jest uniwersalnym doświadczeniem, a uznanie tego może sprzyjać empatii.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Przykład:&lt;/em&gt; Obserwowanie dyskryminacji uwypukla systemowe nierówności.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Każdy nosi maski.&lt;/strong&gt; Ludzie prezentują różne wersje siebie w zależności od sytuacji.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Warto przejrzeć swoją listę znajomych.&lt;/strong&gt; Nie wszystkie relacje są korzystne, a niektóre mogą być szkodliwe dla twojego dobrego samopoczucia.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Przykład:&lt;/em&gt; Zerwanie kontaktów z przyjaciółmi, którzy konsekwentnie wprowadzają negatywność do twojego życia.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Nikt nie myśli tak samo jak ty.&lt;/strong&gt; Akceptuj indywidualność i zrozum, że perspektywy są bardzo zróżnicowane.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Każda osoba wykorzystuje cię na swój sposób.&lt;/strong&gt; Uznanie tego nie musi być negatywne, ale ważne jest, aby być świadomym dynamiki w twoich związkach.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Przykład:&lt;/em&gt; Kolega poszukujący twojej ekspertyzy, aby przyspieszyć swój własny projekt.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Podsumowanie&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Te cyniczne prawdy mogą wydawać się ostre, ale oferują trzeźwe spojrzenie na realia życia. Uznając te prawdy, możesz poruszać się po świecie z większą świadomością, chronić się przed manipulacją i podejmować bardziej świadome decyzje. Przyjęcie odrobiny cynizmu może prowadzić do bardziej autentycznego i odpornego istnienia.&lt;/p&gt;
</description>
        <pubDate>Mon, 23 Jun 2025 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/cynical-truths/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Miecz Obosieczny Pragnienia: Dlaczego „Uważaj, czego sobie życzysz” to ponadczasowa mądrość</title>
        <link>https://blog.poplauki.eu/pl/blog/be-careful-what-you-wish-for-timeless-wisdom/</link>
        <description>&lt;p&gt;„To wielka lekcja z historii, która prowadzi do prawdy, która zawsze będzie aktualna: Uważaj, czego sobie życzysz.”&lt;/p&gt;
&lt;p&gt;– „Same as Ever: A Guide to What Never Changes” &lt;a href=&quot;https://www.amazon.com/Morgan-Housel/e/B084ZNV1LR&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Morgan Housel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ten potężny cytat streszcza prawdę tak starą jak ludzkość. Często gonimy za pragnieniami z niezachwianą koncentracją, przekonani, że ich osiągnięcie przyniesie ostateczne szczęście. Jednak historia, osobiste doświadczenia i głębokie tradycje filozoficzne konsekwentnie ujawniają paradoks: otrzymanie dokładnie tego, czego chcemy, może czasami prowadzić do nieprzewidzianych trudności, głębszego niezadowolenia, a nawet żalu. Zarówno stoicyzm, jak i uważność oferują nieocenione ramy do zrozumienia tej skomplikowanej relacji z naszymi pragnieniami, prowadząc nas do bardziej roztropnego i spokojnego podejścia do życia.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Stoicyzm: Opanowanie wewnętrznej cytadeli wobec zewnętrznych pragnień&lt;/h2&gt;
&lt;p&gt;Stoicyzm, starożytna filozofia skupiająca się na cnocie, rozumie i życiu w zgodzie z naturą, dostarcza solidnych ram do zrozumienia pułapek nieprzemyślanych pragnień. Jego podstawowa zasada, &lt;strong&gt;Dychotomia Kontroli&lt;/strong&gt;, uczy nas rozróżniania między tym, co jest w naszej mocy (nasze myśli, sądy i działania) a tym, co nie jest (wydarzenia zewnętrzne, opinie innych ludzi, zdrowie, bogactwo). Nadmierne pragnienie rzeczy poza naszą kontrolą jest, dla stoika, bezpośrednią drogą do cierpienia.&lt;/p&gt;
&lt;p&gt;Na przykład, rozważmy &lt;strong&gt;pragnienie sławy lub publicznego uznania&lt;/strong&gt;. Możesz wkładać swoją energię w projekt twórczy, marząc o nagrodach i szerokim uznaniu. Stoik ostrzegłby przed tym żarliwym życzeniem. Dlaczego?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zależność zewnętrzna:&lt;/strong&gt; Sława jest zewnętrzną „obojętną”. Nie jest ani dobra, ani zła, i co najważniejsze, nie jest czymś, co możesz kontrolować. Możesz tworzyć sztukę, ale nie możesz kontrolować, jak inni na nią zareagują.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Podatność na Fortunę:&lt;/strong&gt; Jeśli Twój spokój ducha zależy od publicznej aprobaty, stajesz się niewolnikiem kapryśnych humorów innych. Co, jeśli projekt się nie powiedzie? Co, jeśli sukces przyniesie niechciane zainteresowanie lub presję? Seneka, wybitny stoik, obszernie ostrzegał przed niebezpieczeństwami poszukiwania popularności, ponieważ często narusza ona integralność i wewnętrzny spokój.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kompromitowanie cnoty:&lt;/strong&gt; Intensywne pragnienie zewnętrznej walidacji może subtelnie osłabić twoje zaangażowanie w cnotę. Możesz się znaleźć w sytuacji, gdy będziesz podejmować decyzje na podstawie tego, co jest popularne, a nie tego, co jest słuszne lub autentyczne dla twojej twórczości.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zamiast pragnąć sławy, stoik doradziłby zinternalizowanie swoich pragnień: życz sobie &lt;strong&gt;tworzenia swojej najlepszej pracy&lt;/strong&gt;, &lt;strong&gt;działania z uczciwością&lt;/strong&gt; i &lt;strong&gt;pilnego przykładania się&lt;/strong&gt;. Prawdziwe zadowolenie pochodzi z samego cnotliwego wysiłku, a nie z zewnętrznego rezultatu.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Uważność: Obserwowanie przejściowej natury tęsknoty&lt;/h2&gt;
&lt;p&gt;Uważność, głęboko zakorzeniona w tradycjach buddyjskich, kładzie nacisk na kultywowanie &lt;strong&gt;świadomości chwili obecnej bez osądzania&lt;/strong&gt;. Jeśli chodzi o pragnienia, uważność zachęca nas do obserwowania ich jako przejściowych zdarzeń mentalnych, zamiast natychmiast się do nich przywiązywać lub działać na ich podstawie. Problemem nie jest samo pragnienie, ale nasze &lt;strong&gt;przywiązanie&lt;/strong&gt; do niego i błędne przekonanie, że spełnienie każdego pragnienia doprowadzi do trwałego szczęścia.&lt;/p&gt;
&lt;p&gt;Rozważmy &lt;strong&gt;życzenie konkretnego awansu zawodowego&lt;/strong&gt;. Możesz spędzić niezliczone godziny, marząc o nowym tytule, wyższej pensji, postrzeganym prestiżu.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Przywiązanie do nietrwałości:&lt;/strong&gt; Z uważnej perspektywy, nawet jeśli uzyskasz awans, początkowa euforia jest ulotna. Często następują nowe stresy, większe obowiązki lub uświadomienie sobie, że rola nie jest tym, co sobie wyobrażałeś. Twoje szczęście staje się zależne od zewnętrznego warunku, który jest z natury niestabilny i podlega zmianom.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cierpienie z powodu nieosiągnięcia:&lt;/strong&gt; Jeśli awans się nie ziści, twoje intensywne pragnienie i przywiązanie mogą prowadzić do głębokiego rozczarowania, złości lub poczucia porażki. Twój spokój psychiczny zostaje zakłócony przez kurczowe trzymanie się przyszłego scenariusza, który nie rozwinął się zgodnie z życzeniem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Utrata teraźniejszości:&lt;/strong&gt; Pochłonięty tęsknotą za przyszłym awansem, możesz przeoczyć obecną wartość swojej pracy, możliwości uczenia się i rozwoju w swojej obecnej roli, czy proste radości codziennego życia. Twój umysł jest ciągle odciągany od bogactwa „teraz”.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Uważne podejście obejmowałoby:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Obserwowanie pragnienia:&lt;/strong&gt; Zauważanie życzenia awansu jako myśli lub uczucia, bez wpadania w nie. „Ach, oto myśl o chęci tego awansu.”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brak przywiązania:&lt;/strong&gt; Sumienne dążenie do celów, ale kultywowanie akceptacji dla każdego wyniku, jaki się pojawi. Twoja wewnętrzna wartość nie jest związana z awansem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skupienie na procesie:&lt;/strong&gt; Znajdowanie satysfakcji w wysiłku, nauce i zaangażowaniu w bieżące zadania, niezależnie od przyszłej nagrody. Zrozumienie, że prawdziwe zadowolenie pochodzi z wnętrza, a nie z zewnętrznych osiągnięć, które z natury są nietrwałe.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 15 Jun 2025 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/be-careful-what-you-wish-for-timeless-wisdom/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Niezachwiana Prawda? Przyjmowanie Granic Uzasadnienia w Obliczu Münchhausena</title>
        <link>https://blog.poplauki.eu/pl/blog/unshakeable-truth-munchhausen-justification-limits/</link>
        <description>&lt;p&gt;Zanurz się w głębokie wyzwanie, jakim jest Trilema Münchhausena i odkryj, jak możemy osiągnąć solidne zrozumienie, nawet gdy stykamy się z granicami uzasadnienia. Ten post rozpakowuje nieskończony regres, błędne koło i dogmatyzm, oferując wgląd w praktyczne sposoby budowania wiedzy i podejmowania decyzji, gdy absolutna pewność pozostaje nieuchwytna. Odkryj, jak przyjęcie pokory epistemologicznej może prowadzić do bardziej odpornych przekonań i jaśniejszej drogi naprzód.&lt;/p&gt;
&lt;h2&gt;Przykłady&lt;/h2&gt;
&lt;p&gt;Oto kilka jasnych, zrozumiałych przykładów dla każdej części Trilemy Münchhausena:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Nieskończony łańcuch przyczyn (nieskończony regres):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Przykład: Wyobraź sobie dziecko, które ciągle pyta „Dlaczego?” o wszystko.
&lt;ul&gt;
&lt;li&gt;„Dlaczego niebo jest niebieskie?”&lt;/li&gt;
&lt;li&gt;„Ponieważ tak rozprasza się światło w atmosferze.”&lt;/li&gt;
&lt;li&gt;„Dlaczego światło tak się rozprasza?”&lt;/li&gt;
&lt;li&gt;„Z powodu długości fali niebieskiego światła i rozmiaru cząsteczek powietrza.”&lt;/li&gt;
&lt;li&gt;„Dlaczego światło i cząsteczki tak się zachowują?”&lt;/li&gt;
&lt;li&gt;…i tak dalej, potencjalnie w nieskończoność, bez osiągnięcia ostatecznej, samooczywistej pierwszej zasady. Każda odpowiedź wymaga kolejnego wyjaśnienia.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Błędne koło (argumentowanie w kółko):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Przykład: Klasycznym przykładem jest stwierdzenie „Biblia jest prawdziwa, ponieważ sama tak mówi, i mówi, że jest słowem Bożym, więc musi być prawdziwa.”
&lt;ul&gt;
&lt;li&gt;„Skąd wiesz, że Biblia jest prawdziwa?”&lt;/li&gt;
&lt;li&gt;„Ponieważ Biblia mówi, że jest słowem Bożym, a Bóg nie skłamałby.”&lt;/li&gt;
&lt;li&gt;„Skąd wiesz, że Bóg nie skłamałby?”&lt;/li&gt;
&lt;li&gt;„Ponieważ Biblia mówi, że Bóg jest prawdomówny.”&lt;/li&gt;
&lt;li&gt;Uzasadnienie prawdziwości Biblii opiera się na samej prawdziwości Biblii, tworząc zamkniętą pętlę bez zewnętrznej walidacji.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nieudowodnione założenia (dogmatyzm):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Przykład: Ktoś mocno wierzy, że cała medycyna alternatywna jest z natury oszustwem, po prostu dlatego, że „wie”, iż medycyna tradycyjna jest jedyną słuszną formą leczenia, nie badając ani nie rozważając żadnych dowodów na rzecz praktyk alternatywnych.
&lt;ul&gt;
&lt;li&gt;„Odmawiam nawet rozważania akupunktury; to tylko szarlataneria.”&lt;/li&gt;
&lt;li&gt;„Ale czy widziałeś jakieś badania nad jej skutecznością w łagodzeniu bólu?”&lt;/li&gt;
&lt;li&gt;„Nieważne. To nie jest ‘prawdziwa’ medycyna, i nie potrzebuję dowodów, żeby to wiedzieć.”&lt;/li&gt;
&lt;li&gt;Ta osoba zatrzymuje łańcuch uzasadnienia, deklarując pewne założenie (tylko medycyna tradycyjna jest ważna) jako samooczywistą prawdę, nie wymagającą dalszych dowodów ani dociekań.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jak więc działać w obliczu tych pozornie nierozwiązywalnych wyzwań? Klucz nie leży w przezwyciężeniu trilemy w sensie absolutnym, ale w zrozumieniu jej implikacji i przyjęciu bardziej pragmatycznych i odpornych podejść do uzasadnienia. W przypadku nieskończonego regresu uczymy się akceptować „wystarczające uzasadnienie” dla danego kontekstu, często opierając się na powszechnie przyjętym konsensusie naukowym, praktycznej użyteczności lub zgodzie społeczności jako tymczasowym fundamencie. Aby przeciwdziałać błędnym kołom, musimy kultywować rygorystyczne zaangażowanie w walidację zewnętrzną, stale poszukując niezależnych dowodów lub różnych perspektyw, aby przerwać pętlę samoopierania się. Wreszcie, aby uniknąć popadania w dogmatyzm, przyjmujemy intelektualną pokorę, pozostając otwartymi na nowe dowody, kwestionując własne założenia i krytycznie oceniając podstawy naszych przekonań, nawet tych, które są nam drogie.&lt;/p&gt;
&lt;h2&gt;Podsumowanie:&lt;/h2&gt;
&lt;p&gt;Ten post śmiało podejmuje Trilemę Münchhausena, fundamentalne wyzwanie dla sposobu, w jaki uzasadniamy wiedzę. Rozpakowujemy jej trzy nieuniknione ścieżki: nieskończony regres przyczyn, pułapki błędnych rozumowań i sztywną postawę dogmatyzmu, ilustrując każdą z nich jasnymi, zrozumiałymi przykładami. Zamiast szukać niemożliwej absolutnej prawdy, artykuł proponuje praktyczne ramy do nawigowania po tych epistemologicznych przeszkodach. Zachęca do przyjęcia „wystarczającego uzasadnienia” w określonych kontekstach, aktywnego poszukiwania zewnętrznej walidacji w celu przerwania logiki błędnego koła i kultywowania intelektualnej pokory w celu ochrony przed nieuzasadnionymi założeniami. Ostatecznie, ten artykuł umożliwia czytelnikom budowanie bardziej odpornych przekonań i podejmowanie świadomych decyzji poprzez zrozumienie i inteligentne działanie w ramach nieodłącznych ograniczeń ludzkiego uzasadniania.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Linki:&lt;/h2&gt;
</description>
        <pubDate>Sun, 08 Jun 2025 13:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/unshakeable-truth-munchhausen-justification-limits/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Przestań Marzyć, Zacznij Działać: Stoickie Cytaty, Które Rozpalą Akcję i Skupienie</title>
        <link>https://blog.poplauki.eu/pl/blog/stop-wishing-start-doing-stoic/</link>
        <description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Nie potrzebujesz więcej czasu, potrzebujesz mniej rozproszeń.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nie potrzebujesz motywacji, potrzebujesz samokontroli.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nie potrzebujesz więcej zasobów, potrzebujesz pomysłowości.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nie potrzebujesz szczęścia, potrzebujesz przygotowania.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nie musisz być zajęty, musisz być skoncentrowany.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nie musisz wiedzieć wszystkiego, musisz po prostu zacząć.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Masz wszystko, czego potrzebujesz.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 11 May 2025 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/stop-wishing-start-doing-stoic/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Bycie Samemu a Samotność - Dwie Różne Rzeczy</title>
        <link>https://blog.poplauki.eu/pl/blog/bycie-samemu-a-samotnosc-dwie-rozne-rzeczy/</link>
        <description>&lt;p&gt;Izolacja społeczna może wpłynąć na twoje zdrowie psychiczne, jeśli nie jesteś przyzwyczajony do spędzania czasu ze sobą. Jednak nawet do tego można się przystosować i czerpać z tego przyjemność.&lt;/p&gt;
&lt;p&gt;Wielu myślicieli na przestrzeni wieków podkreślało wagę pogodzenia się z tym stanem. Michel de Montaigne napisał kiedyś: „Największą rzeczą na świecie jest wiedzieć, jak należeć do siebie”.&lt;/p&gt;
&lt;p&gt;Samotność sprzyja wyobraźni i umożliwia pojawienie się poważnych myśli w ludzkiej głowie, które wykraczają poza zwykłą rutynę i zmuszają zakręty do ruchu.&lt;/p&gt;
&lt;p&gt;Samotność jest natomiast negatywnym doświadczeniem. Dręczy litość nad sobą, myśli o straconym życiu, smutek. Jeśli naprawdę zależy ci na rozwoju osobistym, warto przekształcić to uczucie w coś pozytywnego i konstruktywnego.&lt;/p&gt;
&lt;p&gt;Pierwszym krokiem do bycia szczęśliwym w samotności jest zaakceptowanie sytuacji. Należy zadawać sobie pytania, przekształcając samotność w konstruktywne spędzanie czasu: co tak naprawdę cenię w życiu? Czego potrzebuję najbardziej? Co muszę zrobić z…? Co dalej?&lt;/p&gt;
&lt;p&gt;Drugim krokiem jest utrzymywanie umysłu i ciała w ciągłym tonie. Potrzebujesz swojego ciała, aby uspokoić mózg. Potrzebujesz uczuć, aby uporządkować myśli. Nie karm się pustymi rozmowami i pustymi dramatycznymi myślami, które tylko pogarszają sytuację.&lt;/p&gt;
&lt;p&gt;Nie musisz przed niczym uciekać. Zamiast uciekać od tego, co jest, powinieneś zauważyć to, co znajduje się tuż pod twoim nosem. Brzmi to trochę skomplikowanie, ale zastanów się.&lt;/p&gt;
&lt;p&gt;Spróbuj zacząć prowadzić dziennik i zapisywać myśli o tym, co cię interesuje. Pisz wiersze. Pobierz Duolingo i zagłęb się w jakiś nowy język. Zacznij pisać swoją autobiografię lub książkę. Odwiedź wirtualne muzeum. Naucz się czegoś nowego za pośrednictwem YouTube lub ukończ kurs, który pomoże ci przyspieszyć rozwój kariery i poszerzyć kompetencje. Cokolwiek.&lt;/p&gt;
&lt;p&gt;Bycie szczęśliwym w samotności to ciągłe dążenie do bycia lepszym mentalnie, społecznie i emocjonalnie dla siebie i swoich bliskich.&lt;/p&gt;
&lt;p&gt;Dzisiejszy temat jest trochę skomplikowany, ale aktualny - bez urazy. Zakończymy go mądrym powiedzeniem: „Nie możesz być samotny, jeśli lubisz osobę, z którą jesteś sam”.&lt;/p&gt;
</description>
        <pubDate>Sun, 29 Dec 2024 20:44:16 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/bycie-samemu-a-samotnosc-dwie-rozne-rzeczy/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Znalezienie Wewnętrznego Spokoju w Szalonym Świecie</title>
        <link>https://blog.poplauki.eu/pl/blog/finding-inner-peace-crazy-world/</link>
        <description>&lt;p&gt;Pewnego dnia przestajesz się awanturować i próbować coś komuś udowodnić, z uśmiechem patrzysz na świat wokół siebie z całym jego szaleństwem, nie spieszysz się, aby zadowolić ludzi, nie spieszysz się, aby dawać rady, osądzać lub ratować kogokolwiek, przestajesz odbierać telefony od ludzi, którzy od dawna cię nie podziwiają lub nie interesują, patrzysz w niebo bardziej niż na to, kto jest zajęty czym i jak żyje, pamiętasz, co cię inspiruje, niezależnie od okoliczności, nie przepraszasz, nie tłumaczysz się, nie kłócisz się, nie marnujesz czasu na to, co nieciekawe i tymczasowe, i odkrywasz niewiarygodny spokój i wiele rzeczy, których wcześniej nie zauważyłeś w pogoni za spełnieniem czyichś pomysłów lub spełnieniem czyichś oczekiwań. Komfort wewnętrzny jest cenniejszy niż jakiekolwiek pokusy tymczasowej przyjemności. Cenniejszy niż jacykolwiek tymczasowi ludzie i tymczasowe rzeczy. Wszystko, co lubisz, jest osobiste, a to, co osobiste, należy tylko do osoby, którą widzisz w lustrze. Reszta to puste spekulacje i domysły tych, którzy próbują zobaczyć w tobie coś innego.&lt;/p&gt;
&lt;p&gt;Jesteś swoim najlepszym sojusznikiem w tym, jak być sobą i być szczęśliwym w tym szalonym świecie.&lt;/p&gt;
&lt;p&gt;Źródło: &lt;em&gt;Tatiana Marach&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 29 Dec 2024 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/finding-inner-peace-crazy-world/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Przestań to robić: nawyki, które zabijają sukces</title>
        <link>https://blog.poplauki.eu/pl/blog/habits-that-kill-success/</link>
        <description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Przestań być ugodowym wobec innych. Nie da się zadowolić wszystkich, a poza tym to stresujące. Lepiej mieć małe grono bliskich kontaktów niż wielu znajomych, których musisz zadowalać. Chcesz być kimś, a nie wazeliniarzem, prawda?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Przestań zadawać się z obrzydliwymi typami. Twoje otoczenie albo ciągnie cię w górę, albo depcze jeszcze głębiej w ziemię. To, z kim się przyjaźnić i kim się otaczać, jest kwestią, do której warto podejść praktycznie. Unikaj śmieci.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Przestań oglądać tak często porno (mężczyźni). Ono nie tylko uzależnia, ale z każdym orgazmem pozbawia cię sił - wytryskujesz nie tylko nasienie, ale i swoją motywację. Lepiej oszczędzać energię i spędzać czas mądrzej.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Przestań szukać rozmów, kiedy się nudzisz. Nie wiesz, co robić? Nie dzwoń do kogoś dla godzinnych dialogów o niczym. Zamiast tego poczytaj / posłuchaj książki lub zrób coś, co odkładasz na później już od kilku dni. Pozbądź się potrzeby wypełniania ciszy pustą gadaniną. Wypełnij ją swoją głębią.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Przestań przejmować się opinią innych. To wykracza poza to, co możesz kontrolować. A jeśli nie możesz, to po co się przejmować i martwić? To strata czasu. Bądź niezależny i uwolnij się od kajdan aprobaty - one utrudniają drogę do sukcesu. Nie wszystkie twoje działania będą aprobowane przez innych, więc śmiało je ignoruj. Sam siebie akceptuj.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Przestań tkwić w destrukcyjnych związkach. Twój partner ciągle na ciebie naciska? Ciągle prowokuje kłótnie i awantury? W związku nie ma żadnej konstruktywności? Nie wierz w lepsze jutro, tylko idź dalej. Zerwij. Oszczędź nerwy, jeszcze ci się przydadzą.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Przestań liczyć na cuda czy szczęście. 99% wszystkich rezultatów zależy od twoich wysiłków, wytrwałości i ambicji. Po co masz gnić w cieniu przez 60 lat, licząc na cud, skoro ten cud możesz sam dla siebie stworzyć w krótszym czasie?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Przestań odkładać na później. Jeśli musisz coś zrobić - zrób to. Nie łudź się, że jutro znajdziesz ze sobą kompromis i zechcesz zająć się czymś pożytecznym. Rób to, co trzeba, od razu. Nie oszukuj się i nie wrzucaj zobowiązań do szuflady. W ten sposób tylko opóźniasz swój sukces.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 21 Dec 2024 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/habits-that-kill-success/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>4 podstawy samodyscypliny</title>
        <link>https://blog.poplauki.eu/pl/blog/four-foundations-of-self-discipline/</link>
        <description>&lt;p&gt;1. Zbyt wiele obowiązków - destrukcyjne rozerwanie na strzępy. Rób tylko to, co chcesz robić, bez względu na wszystko. Ignoruj to, co nieistotne.&lt;/p&gt;
&lt;p&gt;Każde zobowiązanie, które bierzesz na swoje barki, wpływa na siłę woli.  Jeśli jest zbyt wiele nadmiaru, nie wytrzyma i pękniesz.&lt;/p&gt;
&lt;p&gt;2. Zacznij dzień od najważniejszej rzeczy. Coś znaczącego można zrobić już w pierwszej godzinie po przebudzeniu.&lt;/p&gt;
&lt;p&gt;Jeśli nie chcesz z rana obciążać się czymś znaczącym, zrób coś małego. To i tak lepsze niż po prostu gapienie się w telefon.&lt;/p&gt;
&lt;p&gt;3. Bądź ostry i poważny wobec siebie. Jeśli zapomniałeś coś zrobić, nie żałuj siebie, ale ukarz się za przewinienie. Oczywiście nie batem.&lt;/p&gt;
&lt;p&gt;Poświęć sen, aby dokończyć to, co obiecałeś, na przykład. W ten sposób zrzucisz ciężar z barków i zwiększysz pewność siebie.&lt;/p&gt;
&lt;p&gt;4. Korekta rutyny. Planuj jak najwięcej. Trzymaj się harmonogramu do samego końca dnia, nie migaj się. Planując, musisz brać pod uwagę swoje priorytety i ich przestrzegać.&lt;/p&gt;
&lt;p&gt;Im więcej nawyków i zasad wprowadzisz do swojej rutyny, tym mniej będziesz musiał się wysilać, aby utrzymać samodyscyplinę. Stanie się to takim samym wysiłkiem, jak pójście do toalety - domyślnie udanym.&lt;/p&gt;
&lt;p&gt;Silny i rozsądny harmonogram to niezbędny składnik wybitnych ludzi. Prędzej czy później i tak będziesz musiał przejąć kontrolę nad dniami. I lepiej, jeśli dojdziesz do tego sam, a nie zmuszą cię okoliczności. Będziesz miał doświadczenie.&lt;/p&gt;
</description>
        <pubDate>Sun, 15 Dec 2024 08:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/four-foundations-of-self-discipline/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Powściągliwość i poświęcenie</title>
        <link>https://blog.poplauki.eu/pl/blog/self-resistaint-and-sacrifice/</link>
        <description>&lt;p&gt;Możliwe, że zamiłowanie do powściągliwości, jakie te wierzenia, jakkolwiek fałszywe, zaszczepiły ludzkości, nie przydało się do wzmocnienia rasy ludzkiej.&lt;/p&gt;
&lt;p&gt;Przecież siła charakteru gatunkowego i indywidualnego polega przede wszystkim na umiejętności poświęcenia teraźniejszości na rzecz przyszłości, na lekceważeniu pokus ulotnej przyjemności na rzecz bardziej odległej i trwałej satysfakcji.&lt;/p&gt;
&lt;p&gt;Im częściej ktoś ćwiczy tę zdolność, tym bardziej wzniosły i silniejszy staje się jego charakter; Najwyższy heroizm osiągają ci, którzy w imię zachowania lub zdobycia wolności i prawdy dla innych, być może odległych epok, wyrzekają się przyjemności życia, a nawet samego życia.&lt;/p&gt;
&lt;p&gt;© James George Fraser
„Złota Gałąź”&lt;/p&gt;
</description>
        <pubDate>Sun, 08 Dec 2024 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/self-resistaint-and-sacrifice/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Podstawa Piramidy Sukcesu</title>
        <link>https://blog.poplauki.eu/pl/blog/success-pyramide/</link>
        <description>&lt;p&gt;&lt;picture class=&quot;article-image article-image--landscape article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/PyramidThinkingSuccess-800x518-768x497-landscape-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/PyramidThinkingSuccess-800x518-768x497-landscape-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/PyramidThinkingSuccess-800x518-768x497-landscape-400w.jpeg&quot; width=&quot;400&quot; height=&quot;267&quot; alt=&quot;biznesubezpieczeniowy.pl&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://biznesubezpieczeniowy.pl/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;zrodlo biznesubezpieczeniowy.pl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Podstawa Piramidy Sukcesu &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Wooden&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Johna Woodena&lt;/a&gt; składa się z pięciu kluczowych wartości, które stanowią fundament dla osiągnięcia sukcesu:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Pracowitość&lt;/em&gt;: Jest to kluczowy element, który polega na starannym planowaniu i ciężkiej pracy, co prowadzi do wartościowych rezultatów &lt;a href=&quot;https://pieknoumyslu.com/john-wooden-i-piramida-sukcesu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;1&lt;/a&gt;
. W kontekście sprzedaży, najlepsi sprzedawcy często osiągają sukces dzięki realizacji większej liczby rozmów z klientami niż przeciętni pracownicy [2](https://biznesubezpieczeniowy.pl/piramida-sukcesu/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Entuzjazm&lt;/em&gt;: To pragnienie robienia tego, co się robi, które przenosi się również na innych. Entuzjazm jest niezbędny do wytrwania w codziennych wyzwaniach &lt;a href=&quot;https://pieknoumyslu.com/john-wooden-i-piramida-sukcesu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;1&lt;/a&gt;
. W zespołach sprzedażowych, entuzjastyczne podejście menadżera może pozytywnie wpłynąć na pracowników, a ci z kolei na klientów &lt;a href=&quot;https://biznesubezpieczeniowy.pl/piramida-sukcesu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Przyjaźń&lt;/em&gt;: Odnosi się do budowania pozytywnych relacji z innymi, co pomaga w zwiększeniu entuzjazmu i wspiera własne działania&lt;a href=&quot;https://pieknoumyslu.com/john-wooden-i-piramida-sukcesu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;1&lt;/a&gt;
. W zespołach sprzedażowych, przyjaźń może prowadzić do atmosfery “jeden za wszystkich, wszyscy za jednego”, co zwiększa efektywność i odporność na trudności &lt;a href=&quot;https://biznesubezpieczeniowy.pl/piramida-sukcesu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Lojalność&lt;/em&gt;: Oznacza bycie lojalnym wobec siebie i innych, którzy na nas polegają &lt;a href=&quot;https://pieknoumyslu.com/john-wooden-i-piramida-sukcesu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;1&lt;/a&gt;
. W kontekście zespołu, lojalność wiąże się z uczciwością w kontaktach między członkami i zachowaniem poufności wewnętrznych spraw grupy &lt;a href=&quot;https://biznesubezpieczeniowy.pl/piramida-sukcesu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Współpraca&lt;/em&gt;: Polega na wzajemnym zachęcaniu się, co zwiększa szanse na osiągnięcie celów &lt;a href=&quot;https://pieknoumyslu.com/john-wooden-i-piramida-sukcesu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;1&lt;/a&gt;
. W zespołach sprzedażowych, współpraca może być budowana poprzez koncentrację na wspólnych celach, rywalizację z innymi zespołami czy rozwijanie mentoringu &lt;a href=&quot;https://biznesubezpieczeniowy.pl/piramida-sukcesu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Te fundamentalne wartości tworzą solidną podstawę, na której można budować dalsze elementy Piramidy Sukcesu, prowadzące do osiągnięcia zamierzonych celów.&lt;/p&gt;
</description>
        <pubDate>Sun, 08 Dec 2024 08:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/success-pyramide/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Ideały świetlistego rycerza</title>
        <link>https://blog.poplauki.eu/pl/blog/idealy-swietlistego-rycerza/</link>
        <description>&lt;p&gt;&lt;em&gt;Pierwszy ideał Swiatlości&lt;/em&gt;: Życie ponad śmiercią. Siła ponad słabością. Podróż ponad celem.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Drugi ideał Sprawiedliwości&lt;/em&gt;: Będę chronić tych, którzy nie mogą ochronić się sami.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Trzeci ideał Poświęcenia&lt;/em&gt;: Obrona każdego, w razie konieczności.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Czwarty ideał Krucjaty&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Piąty ideał Prawa&lt;/em&gt;:&lt;/p&gt;
</description>
        <pubDate>Sat, 16 Nov 2024 14:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/pl/blog/idealy-swietlistego-rycerza/</guid>
      </item>
      
    
    
    
    
    
  </channel>
</rss>

