← Назад к вопросам

Какие модели хочешь получать с Backend при реализации приложения для паркинга самокатов и моноколес на Vue?

2.3 Middle🔥 141 комментариев
#Vue.js

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Архитектура взаимодействия Frontend и Backend в приложении для паркинга электротранспорта

При разработке Vue-приложения для управления парковкой самокатов и моноколес критически важна продуманная структура данных, поступающих с Backend API. Вот ключевые модели, которые необходимо реализовать:

1. Модель транспортного средства (Vehicle)

{
  id: "uuid",
  type: "scooter" | "monowheel", // тип транспорта
  name: "Xiaomi Mi Pro 2",
  batteryLevel: 85, // процент заряда
  isAvailable: true,
  coordinates: {
    lat: 50.4504,
    lng: 30.5245
  },
  parkingZoneId: "uuid | null", // привязан к парковке или свободен
  lastMaintenance: "2023-10-15T10:30:00Z"
}

2. Модель парковочной зоны (ParkingZone)

{
  id: "uuid",
  name: "Парковка возле метро",
  address: "ул. Примерная, 10",
  coordinates: {
    lat: 50.4501,
    lng: 30.5248
  },
  capacity: 20, // общая вместимость
  occupied: 12, // текущее количество транспорта
  pricePerHour: 50, // стоимость парковки
  operatingHours: {
    open: "08:00",
    close: "22:00"
  }
}

3. Модель сессии аренды (RentalSession)

{
  id: "uuid",
  userId: "uuid",
  vehicleId: "uuid",
  startTime: "2023-11-20T14:30:00Z",
  endTime: "2023-11-20T15:45:00Z | null", // null для активной аренды
  startParkingId: "uuid",
  endParkingId: "uuid | null",
  totalCost: 125.50,
  status: "active" | "completed" | "cancelled"
}

4. Модель пользователя (User)

{
  id: "uuid",
  email: "user@example.com",
  balance: 500.00,
  currentRentalId: "uuid | null", // активная аренда
  paymentMethods: [
    {
      id: "uuid",
      type: "card",
      lastFourDigits: "4242"
    }
  ]
}

5. Модель транзакции (Transaction)

{
  id: "uuid",
  userId: "uuid",
  amount: -150.00, // отрицательное для списаний
  type: "ride_payment" | "topup" | "refund",
  description: "Оплата поездки на самокате",
  timestamp: "2023-11-20T15:45:30Z"
}

Критические аспекты проектирования моделей

Оптимизация для картографических сервисов

Для отображения на карте транспортных средств и парковок Backend должен отдавать геоданные в структурированном формате. Рекомендую отдельный endpoint для карты:

// GET /api/map/vehicles?lat=...&lng=...&radius=...
{
  vehicles: Array<Vehicle>, // только необходимые поля
  parkingZones: Array<ParkingZone>
}

Реализация в Vuex/Pinia

Каждую модель стоит сопровождать соответствующим стором во Vuex/Pinia:

// Пример стора для транспортных средств в Pinia
export const useVehiclesStore = defineStore('vehicles', {
  state: () => ({
    vehicles: [],
    selectedVehicle: null,
    isLoading: false
  }),
  getters: {
    availableScooters: (state) => 
      state.vehicles.filter(v => v.type === 'scooter' && v.isAvailable),
    // другие вычисляемые свойства
  },
  actions: {
    async fetchVehiclesInArea(coordinates) {
      // логика загрузки
    }
  }
});

Особенности для разных типов транспорта

  • Самокаты: важны параметры максимальной скорости, веса
  • Моноколеса: уровень квалификации для аренды (новичок/профи)
  • Общие параметры: заряд батареи, пробег, состояние шин

Безопасность и оптимизация

  1. Never expose sensitive data — Backend не должен отдавать внутренние идентификаторы платежных систем
  2. Реализуйте пагинацию для списков транспортных средств и истории аренд
  3. Кэширование геоданных на Frontend для плавного UX
  4. WebSocket для обновлений в реальном времени (заряд батареи, освобождение транспорта)

Такой подход обеспечит масштабируемость приложения, позволит легко добавлять новые типы транспорта (электровелосипеды, сигвеи) и поддерживать согласованность данных между клиентом и сервером. Ключевой принцип — Backend должен отдавать готовые к отображению данные, минимизируя дополнительную обработку на Frontend.