220 lines
No EOL
8.1 KiB
Markdown
220 lines
No EOL
8.1 KiB
Markdown
# minivan
|
||
|
||
Проект: minivan-berlin.de — сервис аренды автомобилей (Minivan) в Берлине.
|
||
|
||
Стек: Astro (SSR) + SolidJS + PocketBase + Tailwind CSS v4.
|
||
|
||
## Коллекции PocketBase
|
||
|
||
- `users` — пользователи
|
||
- `cars` — автомобили
|
||
- `bookings` — бронирования
|
||
- `reviews` — отзывы
|
||
- `posts` — статьи блога
|
||
- `faq_items` — FAQ вопросы
|
||
- `slider_cars` — автомобили для слайдера
|
||
- `site_settings` — настройки сайта
|
||
- `t_navbar` — пункты верхнего меню
|
||
- `b_navbar` — пункты нижнего меню (Footer)
|
||
- `t_top_header` — баннер в шапке
|
||
- `pages` — мета-данные страниц
|
||
- `preise_services` — услуги и цены
|
||
- `preise_cta` — CTA секции цен
|
||
- `comments` — комментарии блога
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
frontend/
|
||
├── src/
|
||
│ ├── pages/
|
||
│ │ ├── api/
|
||
│ │ │ ├── auth/ # Авторизация
|
||
│ │ │ │ ├── login.ts
|
||
│ │ │ │ ├── register.ts
|
||
│ │ │ │ ├── logout.ts
|
||
│ │ │ │ ├── check-auth.ts
|
||
│ │ │ │ └── google/
|
||
│ │ │ ├── contact.ts
|
||
│ │ │ ├── reviews/
|
||
│ │ │ └── send-booking.ts
|
||
│ │ ├── index.astro # Главная
|
||
│ │ ├── kontakt.astro # Контакты
|
||
│ │ ├── preise.astro # Цены
|
||
│ │ ├── impressum.astro # Impressum
|
||
│ │ ├── datenschutz.astro # Privacy
|
||
│ │ ├── agb.astro # Terms
|
||
│ │ ├── stornierung.astro # Cancellation
|
||
│ │ ├── zahlungsarten.astro # Payment
|
||
│ │ ├── bewertungen.astro # Reviews
|
||
│ │ ├── partner.astro # Partner
|
||
│ │ ├── karriere.astro # Careers
|
||
│ │ ├── hilfe.astro # FAQ/Help
|
||
│ │ ├── premium-flotte.astro # Premium fleet
|
||
│ │ ├── vip-services.astro # VIP services
|
||
│ │ ├── ueber-uns.astro # About
|
||
│ │ ├── action.astro # Special offer
|
||
│ │ ├── blog/
|
||
│ │ │ ├── [slug].astro
|
||
│ │ │ ├── [...page].astro
|
||
│ │ │ └── tags/
|
||
│ │ │ └── [tag].astro
|
||
│ │ └── auth/
|
||
│ │ ├── login.astro
|
||
│ │ ├── register.astro
|
||
│ │ ├── verify-email.astro
|
||
│ │ ├── forgot-password.astro
|
||
│ │ └── reset-password.astro
|
||
│ ├── components/
|
||
│ │ ├── layouts/
|
||
│ │ │ ├── header/
|
||
│ │ │ │ ├── Header.astro
|
||
│ │ │ │ ├── TopHeader.astro
|
||
│ │ │ │ ├── SiteHeader.astro
|
||
│ │ │ │ ├── Logo.astro
|
||
│ │ │ │ └── UserAvatar.astro
|
||
│ │ │ └── footer/
|
||
│ │ │ ├── Footer.astro
|
||
│ │ │ ├── FooterInfo.astro
|
||
│ │ │ └── FooterLinkColumn.astro
|
||
│ │ ├── base/
|
||
│ │ │ ├── Button.astro
|
||
│ │ │ ├── Link.astro
|
||
│ │ │ ├── Modal.astro
|
||
│ │ │ └── Breadcrumbs.astro
|
||
│ │ ├── home/
|
||
│ │ │ ├── hero/
|
||
│ │ │ └── howIt/
|
||
│ │ ├── blog/
|
||
│ │ ├── reviews/
|
||
│ │ ├── premium/
|
||
│ │ ├── preise/
|
||
│ │ ├── services/
|
||
│ │ ├── partner/
|
||
│ │ ├── career/
|
||
│ │ └── contacts/
|
||
│ ├── lib/
|
||
│ │ ├── authService.ts
|
||
│ │ ├── emailService.ts
|
||
│ │ └── pocketbase.js
|
||
│ ├── types/
|
||
│ │ ├── globalInterfaces.ts
|
||
│ │ └── types.ts
|
||
│ ├── constants/
|
||
│ ├── layouts/
|
||
│ │ └── Layout.astro
|
||
│ └── env.d.ts
|
||
├── public/
|
||
│ ├── robots.txt
|
||
│ └── favicon.ico
|
||
├── astro.config.mjs
|
||
└── package.json
|
||
```
|
||
|
||
## Страницы
|
||
|
||
| URL | Файл | Описание |
|
||
|-----|------|----------|
|
||
| `/` | `index.astro` | Главная |
|
||
| `/kontakt` | `kontakt.astro` | Контакты |
|
||
| `/preise` | `preise.astro` | Цены |
|
||
| `/bewertungen` | `bewertungen.astro` | Отзывы |
|
||
| `/partner` | `partner.astro` | Партнёры |
|
||
| `/karriere` | `karriere.astro` | Вакансии |
|
||
| `/hilfe` | `hilfe.astro` | FAQ |
|
||
| `/premium-flotte` | `premium-flotte.astro` | Премиум флот |
|
||
| `/vip-services` | `vip-services.astro` | VIP услуги |
|
||
| `/ueber-uns` | `ueber-uns.astro` | О нас |
|
||
| `/action` | `action.astro` | Акция |
|
||
| `/blog` | `blog/[...page].astro` | Блог |
|
||
| `/blog/[slug]` | `blog/[slug].astro` | Статья |
|
||
| `/auth/login` | `auth/login.astro` | Вход |
|
||
| `/auth/register` | `auth/register.astro` | Регистрация |
|
||
| `/impressum` | `impressum.astro` | Impressum |
|
||
| `/datenschutz` | `datenschutz.astro` | Privacy |
|
||
| `/agb` | `agb.astro` | Terms |
|
||
| `/stornierung` | `stornierung.astro` | Cancellation |
|
||
| `/zahlungsarten` | `zahlungsarten.astro` | Payment methods |
|
||
|
||
## Компоненты
|
||
|
||
### Layout
|
||
- `Header.astro` — основной header с навигацией
|
||
- `TopHeader.astro` — верхняя панель с контактами
|
||
- `SiteHeader.astro` — обёртка header
|
||
- `Footer.astro` — footer с ссылками
|
||
- `FooterLinkColumn.astro` — колонка ссылок
|
||
- `FooterInfo.astro` — информация о компании
|
||
|
||
### Base
|
||
- `Button.astro` — кнопка с вариантами
|
||
- `Link.astro` — ссылка с prefetch
|
||
- `Modal.astro` — модальное окно
|
||
- `Breadcrumbs.astro` — хлебные крошки
|
||
|
||
## Навигация
|
||
|
||
- **Верхнее меню** (Header): `t_navbar` — первые 5 пунктов (order 1-5)
|
||
- **Нижнее меню** (Footer): `b_navbar` — группировка по order: 1-3, 4-6, 7-10, 11-13
|
||
|
||
## Типы
|
||
|
||
Все типы в `frontend/src/types/globalInterfaces.ts`:
|
||
- User
|
||
- Car
|
||
- Booking
|
||
- Review
|
||
- Post
|
||
- SiteSettings
|
||
|
||
## API-эндпоинты
|
||
|
||
### Auth
|
||
- `/api/auth/login` — вход (POST)
|
||
- `/api/auth/register` — регистрация (POST)
|
||
- `/api/auth/logout` — выход (POST)
|
||
- `/api/auth/sign-out` — выход (POST, alias)
|
||
- `/api/auth/check-auth` — проверка авторизации (GET)
|
||
- `/api/auth/send-email` — отправка email (POST)
|
||
- `/api/auth/send-admin-notification` — уведомление админа (POST)
|
||
- `/api/auth/send-booking-confirmation` — подтверждение брони (POST)
|
||
- `/api/auth/google/index` — Google OAuth инициация (GET)
|
||
- `/api/auth/google/callback` — Google OAuth callback (GET)
|
||
|
||
### Public
|
||
- `/api/contact` — контактная форма (POST)
|
||
- `/api/send-booking` — бронирование (POST)
|
||
- `/api/files-proxy/[collectionName]/[recordId]/[filename]` — прокси файлов (GET)
|
||
|
||
### Reviews
|
||
- `/api/reviews` — GET все отзывы, POST создать, DELETE удалить
|
||
- `/api/reviews/[id]` — GET/DELETE один отзыв
|
||
- `/api/reviews/latest-reviews` — GET последние отзывы
|
||
|
||
## Переменные окружения
|
||
|
||
```
|
||
PB PocketBase URL=https://minivan-berlin.de
|
||
MAIL_* — почта
|
||
SMTP_* — SMTP
|
||
SENDER_* — отправитель
|
||
ADMIN_* — админ
|
||
```
|
||
|
||
## Правила
|
||
|
||
1. SolidJS компоненты — `.tsx` расширение
|
||
2. Astro компоненты — `.astro` расширение
|
||
3. Запросы к PB — через authService
|
||
4. Типизация в types/globalInterfaces.ts
|
||
5. Не использовать any без крайней необходимости
|
||
6. Tailwind CSS v4
|
||
7. Картинки — в astro:assets
|
||
|
||
## Особенности
|
||
|
||
- SSR mode с @astrojs/node
|
||
- Sitemap автоматически @astrojs/sitemap
|
||
- prefetching страниц
|
||
- Session via cookies
|
||
- Аутент<D0BD><D182>фикация через PocketBase |