旅行足迹App技术架构全解析

旅行足迹移动应用技术架构文档

1. Architecture design


外部服务 数据层 后端层 前端层 AI服务API 音乐服务API Supabase数据库 云存储服务 后端服务 React Native应用 百度地图SDK 设备原生API 移动端用户

2. Technology Description

  • 前端: React Native@0.72 + TypeScript + React Navigation@6 + React Native Maps + Lottie React Native

  • 后端: Node.js + Express.js + TypeScript

  • 数据库: Supabase (PostgreSQL)

  • 云存储: Supabase Storage

  • 地图服务: 百度地图React Native SDK

  • AI服务: OpenAI API / 百度文心一言API

  • 音乐服务: 网易云音乐API / QQ音乐API

  • 动画: Lottie + React Native Reanimated

  • 状态管理: Redux Toolkit + RTK Query

  • 本地存储: AsyncStorage + MMKV

3. Route definitions

Route Purpose
/home 首页,显示地图概览和快捷操作入口
/map 地图页面,百度地图集成和足迹标记功能
/media 多媒体页面,拍照录像和云存储管理
/media/camera 相机页面,拍照和录像功能
/media/video/:id 短视频播放页面,类抖音播放体验
/music 音乐播放页面,播放器和播放列表管理
/music/playlist/:id 播放列表详情页面
/chat AI对话页面,聊天和情绪分析功能
/game 游戏页面,目的地抽奖和动画效果
/profile 个人中心,用户信息和设置选项
/profile/settings 设置页面,应用配置和隐私设置
/auth/login 登录页面,用户身份验证
/auth/register 注册页面,新用户注册

4. API definitions

4.1 Core API

用户认证相关

复制代码
POST /api/auth/login

Request:

Param Name Param Type isRequired Description
email string true 用户邮箱
password string true 用户密码

Response:

Param Name Param Type Description
success boolean 登录是否成功
token string JWT访问令牌
user object 用户基本信息

足迹管理相关

复制代码
GET /api/footprints
POST /api/footprints
PUT /api/footprints/:id
DELETE /api/footprints/:id

多媒体文件相关

复制代码
POST /api/media/upload
GET /api/media/:id
DELETE /api/media/:id

AI对话相关

复制代码
POST /api/chat/message
GET /api/chat/history
POST /api/chat/analyze-emotion

游戏相关

复制代码
POST /api/game/lottery
GET /api/game/destinations

5. Server architecture diagram

外部服务 服务端 百度地图服务 AI服务 音乐服务 云存储服务 API网关层 认证中间件 控制器层 服务层 数据访问层 React Native客户端 Supabase数据库

6. Data model

6.1 Data model definition

USERS uuid id PK string email string password_hash string nickname string avatar_url string phone enum user_type timestamp created_at timestamp updated_at FOOTPRINTS uuid id PK uuid user_id FK string title text description decimal latitude decimal longitude string address timestamp visit_time timestamp created_at timestamp updated_at MEDIA_FILES uuid id PK uuid user_id FK uuid footprint_id FK string file_name string file_url string file_type integer file_size decimal latitude decimal longitude timestamp created_at CHAT_MESSAGES uuid id PK uuid user_id FK text message string message_type json emotion_analysis timestamp created_at PLAYLISTS uuid id PK uuid user_id FK string name string description string cover_url timestamp created_at timestamp updated_at PLAYLIST_SONGS uuid id PK uuid playlist_id FK string song_id string song_name string artist string album string cover_url integer duration integer sort_order timestamp added_at creates uploads sends creates contains includes

6.2 Data Definition Language

用户表 (users)

sql 复制代码
-- 创建用户表
CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    nickname VARCHAR(100) NOT NULL,
    avatar_url TEXT,
    phone VARCHAR(20),
    user_type VARCHAR(20) DEFAULT 'normal' CHECK (user_type IN ('normal', 'premium', 'admin')),
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_created_at ON users(created_at DESC);

-- 设置权限
GRANT SELECT ON users TO anon;
GRANT ALL PRIVILEGES ON users TO authenticated;

足迹表 (footprints)

sql 复制代码
-- 创建足迹表
CREATE TABLE footprints (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL,
    title VARCHAR(200) NOT NULL,
    description TEXT,
    latitude DECIMAL(10, 8) NOT NULL,
    longitude DECIMAL(11, 8) NOT NULL,
    address TEXT,
    visit_time TIMESTAMP WITH TIME ZONE,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引
CREATE INDEX idx_footprints_user_id ON footprints(user_id);
CREATE INDEX idx_footprints_location ON footprints(latitude, longitude);
CREATE INDEX idx_footprints_visit_time ON footprints(visit_time DESC);

-- 设置权限
GRANT SELECT ON footprints TO anon;
GRANT ALL PRIVILEGES ON footprints TO authenticated;

多媒体文件表 (media_files)

sql 复制代码
-- 创建多媒体文件表
CREATE TABLE media_files (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL,
    footprint_id UUID,
    file_name VARCHAR(255) NOT NULL,
    file_url TEXT NOT NULL,
    file_type VARCHAR(50) NOT NULL CHECK (file_type IN ('image', 'video', 'audio')),
    file_size INTEGER,
    latitude DECIMAL(10, 8),
    longitude DECIMAL(11, 8),
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引
CREATE INDEX idx_media_files_user_id ON media_files(user_id);
CREATE INDEX idx_media_files_footprint_id ON media_files(footprint_id);
CREATE INDEX idx_media_files_type ON media_files(file_type);

-- 设置权限
GRANT SELECT ON media_files TO anon;
GRANT ALL PRIVILEGES ON media_files TO authenticated;

聊天消息表 (chat_messages)

sql 复制代码
-- 创建聊天消息表
CREATE TABLE chat_messages (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL,
    message TEXT NOT NULL,
    message_type VARCHAR(20) DEFAULT 'user' CHECK (message_type IN ('user', 'ai')),
    emotion_analysis JSONB,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引
CREATE INDEX idx_chat_messages_user_id ON chat_messages(user_id);
CREATE INDEX idx_chat_messages_created_at ON chat_messages(created_at DESC);

-- 设置权限
GRANT SELECT ON chat_messages TO anon;
GRANT ALL PRIVILEGES ON chat_messages TO authenticated;

播放列表表 (playlists)

sql 复制代码
-- 创建播放列表表
CREATE TABLE playlists (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL,
    name VARCHAR(100) NOT NULL,
    description TEXT,
    cover_url TEXT,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建播放列表歌曲表
CREATE TABLE playlist_songs (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    playlist_id UUID NOT NULL,
    song_id VARCHAR(100) NOT NULL,
    song_name VARCHAR(200) NOT NULL,
    artist VARCHAR(200),
    album VARCHAR(200),
    cover_url TEXT,
    duration INTEGER,
    sort_order INTEGER DEFAULT 0,
    added_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引
CREATE INDEX idx_playlists_user_id ON playlists(user_id);
CREATE INDEX idx_playlist_songs_playlist_id ON playlist_songs(playlist_id);
CREATE INDEX idx_playlist_songs_sort_order ON playlist_songs(playlist_id, sort_order);

-- 设置权限
GRANT SELECT ON playlists TO anon;
GRANT ALL PRIVILEGES ON playlists TO authenticated;
GRANT SELECT ON playlist_songs TO anon;
GRANT ALL PRIVILEGES ON playlist_songs TO authenticated;

初始化数据

sql 复制代码
-- 插入测试用户
INSERT INTO users (email, password_hash, nickname, user_type) VALUES
('test@example.com', '$2b$10$example_hash', '测试用户', 'normal'),
('admin@example.com', '$2b$10$example_hash', '管理员', 'admin');

-- 插入示例足迹
INSERT INTO footprints (user_id, title, description, latitude, longitude, address, visit_time) VALUES
((SELECT id FROM users WHERE email = 'test@example.com'), '天安门广场', '北京的心脏地带', 39.9042, 116.4074, '北京市东城区天安门广场', NOW() - INTERVAL '7 days');
相关推荐
2501_9248895514 分钟前
商超高峰客流统计误差↓75%!陌讯多模态融合算法在智慧零售的实战解析
大数据·人工智能·算法·计算机视觉·零售
维基框架1 小时前
维基框架 (Wiki Framework) 1.1.0 版本发布 提供多模型AI辅助开发
人工智能
西猫雷婶1 小时前
神经网络|(十二)概率论基础知识-先验/后验/似然概率基本概念
人工智能·神经网络·机器学习·回归·概率论
小厂永远得不到的男人1 小时前
基于 Spring Validation 实现全局参数校验异常处理
java·后端·架构
9527华安2 小时前
FPGA高端项目:图像采集+Aurora 8B10B+UDP图传架构,基于GTH高速收发器的光口转网口,提供工程源码和技术支持
fpga开发·架构·udp·aurora·gth·高速收发器·aurora 8b10b
Bug退退退1232 小时前
关于微服务下的不同服务之间配置不能通用的问题
微服务·云原生·架构
居7然2 小时前
大模型微调面试题全解析:从概念到实战
人工智能·微调
haidizym3 小时前
质谱数据分析环节体系整理
大数据·人工智能·数据分析·ai4s
Godspeed Zhao3 小时前
Tesla自动驾驶域控制器产品(AutoPilot HW)的系统化梳理
人工智能·机器学习·自动驾驶
fsnine4 小时前
机器学习案例——预测矿物类型(模型训练)
人工智能·机器学习