旅行足迹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');
相关推荐
Codebee13 小时前
OneCode 移动套件多平台适配详细报告
前端·人工智能
硬件工程师宝典13 小时前
PCIe从入门到精通之三:PCIe设备的内部组件
架构
sinat_2869451913 小时前
Case-Based Reasoning用于RAG
人工智能·算法·chatgpt
许泽宇的技术分享13 小时前
AI时代的内容创作革命:深度解析xiaohongshu-mcp项目的技术创新与实战价值
人工智能
地平线开发者13 小时前
征程 6 灰度图部署链路介绍
人工智能·算法·自动驾驶·汽车
工藤学编程13 小时前
零基础学AI大模型之SpringAI
人工智能
Xy-unu13 小时前
[VL|RIS] RSRefSeg 2
论文阅读·人工智能·transformer·论文笔记·分割
好多1713 小时前
《微服务事务管理》
java·微服务·架构
zzu123zsw14 小时前
第五章:自动化脚本开发
人工智能·自动化
IT_陈寒14 小时前
Python 3.12 新特性实战:10个性能优化技巧让你的代码快如闪电⚡
前端·人工智能·后端