Skip to content

rimma-kubanova/event-booking-app

Repository files navigation

Mereke - приложение для бронирование билетов

Технологии

Для разработки приложения были использованы Next.js для фуллстэка и PocketBase для бэкенда и датабазы. Остальные технологии указаны ниже:

Next.js 14 - позволяет утилизировать server-side rendering который позволяет быстрее грузить сайты, и также обрабатывать клиентскую и серверную часть вместе на одном фреймворке. Данная технология идеальна подходит для небольших сайтов.

PocketBase- бэкенд, который позволяет создавать базы данных, работать с ними. Данная технология очень проста в использовании и легко интегрируется к nextjs.

Next.js v14.2.3
Pocketbase
TypeScript v5.4.5
Tailwind CSS v3.0

Прототип

Дизайн для сайта разрабатывался на figma: Screenshot 2024-04-30 at 21 36 50

Запуск

Для запуска приложения необходимо клонировать данный репотизорий и загрузить данный код:

npm run dev
or
yarn dev

[Важно!] Программа будет работать только в серверной части, так как данные находятся на локальном сервере

Датабаза

Для данной веб приложения был использован Pocketbase. Pocketbase позволяет хранить данные а также совершать CRUD (CREATE, READ, UPDATE, DELETE) методы над ними с помощью API запросов. Ниже предоставлены таблицы которые были использованы:

Events
id key
name string
Description string
Datetime datetime
Location string
City string
Ticket foreign key
Datetime datetime
Type type
Photo url
Screenshot 2024-04-30 at 21 07 45
Tickets
id key
isBought boolean
price number
owner email
Screenshot 2024-04-30 at 21 09 06

Каждый Events может содержать в себе несколько tickets, и пользователи могут покупать несколько из них

Аутентификация

Аутентификация была реализована с использованием технологии NextAuth.js. Авторизация может быть сделана двумя путями: OAuth or Credentials. Пользователь может зайти через аккаунт Github либо использовать свою почту/пароль. На сайте поддерживается регистрация, логин и логаут.

Screenshot 2024-04-30 at 20 50 09 Screenshot 2024-04-30 at 20 49 43

Мероприятия

Мероприятия отображены на главной странице. Для доступа к мероприятиям авторизация не обьязателен. Пользователь может нажать на один из ивентов чтобы зайти на новую страницу и получить более детальную информацию об ивенте:

Страница /events/: Screenshot 2024-04-30 at 21 17 02

Страница /events/{eventid}/: Screenshot 2024-04-30 at 21 19 17

Билеты

В целях тестирования, для каждого мероприятия есть один билет. Пользователь должен быть авторизован для того чтобы покупать билет. В обратном случае, он будет перенаправлен на страницу авторизации. Как только пользователь купит билет, он может получить к нему доступ на своем личном кабинете:

Screenshot 2024-04-30 at 21 21 48 Screenshot 2024-04-30 at 21 21 43

Личный Кабинет

В личном кабинете пользователь может увидеть купленные им билеты. Билеты показываются путем фильтра датабазы с помощью api с билетами которые отмечены именем пользователя. Для доступа в личный кабинет необходима авторизация.

Screenshot 2024-04-30 at 21 22 49

Трудности

  • Authorization - Были трудности с имплементации авторизации, тк PocketBase новая для меня технология и была немного непонятна именно для создании авторизации. В последсвтии было принято решение использовать NextAuth.js технологию который помогает легко интегрировать авторизацию включая OAuth

  • Server and Client Side - Next.js совмещает в себе и фронт и бэк но это создает трудности так как серверная часть не должна пересекаться с клиентским. Сложность заключается в том что я не мог использовать async/await функции на клиентской части и точно также, имплементировать форму/кнопки паралельно рендеря компоненты сайта. Приходилось создавать api, отделять страницы чтобы они могли находиться на разных сторонах

  • Tickets - было тяжело связывать many-to-one-relations в датабазе, тк Pocketbase к сожалению, не позволял такое. Поэтому сайт ограничивается один билетом на одно мероприятие

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published