/warsawjs-workshop-31-calendar

⛩️ WarsawJS Workshop #31 — Node.js

Primary LanguageJavaScriptMIT LicenseMIT

warsawjs-workshop-31-calendar

⛩️ WarsawJS Workshop #31 — Node.js

Front-end part created by @g3f4 — https://github.com/G3F4/warsawjs-workshop-31-calendar-client

Preview 🎉

Dostępne tylko po uruchomieniu bazy danych MongoDB oraz ewentualnie klienta.

Step by step 👣

  • ✅ Stworzenie struktury aplikacji

  • ✅ Stworzenie web serwera (npm/express)

  • ✅ Stworzenie pierwszego endpointa

  • ✅ Napisanie testu integracyjnego (npm/jasmine & npm/supertest)

  • ✅ Wydzielenie konfiguracji do zewnętrznego pliku (npm/dotenv)

  • 🌟 Bonus: Dodanie middlewarów

    • Logowanie requestów (npm/morgan)
    • CORS (npm/cors)
    • Włączenie kompresji nagłówków (npm/compression)
  • ✅ Dodanie middleware-a do odczytywania body z zapytania POST (npm/body-parser)

  • ✅ Napisać testy weryfikujące endpointy (npm/ajv).
    Wykorzystać schemy z katalogu docs/schemas.
    Schemy są wygenerowane za pomocą https://www.jsonschema.net/.

  • ✅ Podłączenie się od bazy danych (npm/mongoose)

  • ✅ Implementacja API na potrzeby części klienckiej (npm/dayjs).

    • GET: /api/calendar?month={YYYY-MM} — zwracanie danych do budowy kalendarza

      response body
      {
          data: [
              {
                  date: string(format=YYYY-MM-DD),
                  events: [
                      {
                          id: string(format=guid)
                          title: string
                      }
                  ]
              }
          ]
      }
    • GET: /api/day?date={YYYY-MM-DD} — zwracanie danych do prezentowania wydarzeń z pojedynczego dnia

      response body
      {
          data: [
              {
                  id: string(format=guid)
                  title: string
                  description: string
                  time: string(format=YYYY-MM-DDThh:mm)
                  notification: boolean
              }
          ]
      }
    • POST: /api/event — dodanie nowego wydarzenia (konkretnego dnia)

      request body
      {
          title: string
          description: string
          time: string(format=YYYY-MM-DDThh:mm)
          notification: boolean
      }
      response body
      {
          id: string
      }
    • PUT: /api/event/:id — aktualizacja wydarzenia

      request body
      {
          title: string
          description: string
          time: string(format=YYYY-MM-DDThh:mm)
          notification: boolean
      }
      response body
      {
          id: string
      }
    • DELETE: /api/event/:id — usunięcie wydarzenia

      request body
      {
          id: string
      }
      response body
      {
          id: string
      }
    • POST: /api/subscriptions

      request body
      {
          data: {
              endpoint: URL
              expirationTime: Date
              keys: {
                  p256dh: string
                  auth: string
              }
          }
      }
      response body
      {
          id: string
      }
  • 🌟 Walidacja parametrów zapytań HTTP (npm/celebrate & npm/@hapi/joi)

  • 🌟 Bonus: Uwierzytelnienie za pomocą GitHuba (npm/passport)

License

The MIT License @ 2019