旅行足迹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');
相关推荐
余衫马6 分钟前
llama.cpp:本地大模型推理的高性能 C++ 框架
c++·人工智能·llm·llama·大模型部署
deephub12 分钟前
Google开源Tunix:JAX生态的LLM微调方案来了
人工智能·深度学习·google·微调·大语言模型·jax
数据与人工智能律师41 分钟前
数字人民币钱包抉择:匿名自由与实名安全的法律风险评估
大数据·人工智能·python·云计算·区块链
云安全联盟大中华区1 小时前
以美为鉴:构建现代化的核能行业网络安全合规体系--为人工智能革命提供动力
人工智能·安全·web安全
沉默媛1 小时前
扩散模型-图像编辑【An Edit Friendly DDPM Noise Space: Inversion and Manipulations】
人工智能·计算机视觉·cvpr·扩散模型·图像编辑·ddpm
步行cgn1 小时前
Java项目包结构设计与功能划分详解
java·开发语言·架构·mvc
nju_spy1 小时前
2023 美赛C Predicting Wordle Results(上)
人工智能·机器学习·数学建模·数据挖掘·arima·时间序列预测·相关性分析
市民中心的蟋蟀1 小时前
第三章 钩入React 【上】
前端·react.js·架构
用户5191495848451 小时前
网络安全工具与社区讨论月报
人工智能·aigc
用户5191495848452 小时前
AWS Direct Connect在菲律宾马卡蒂市推出100G扩展服务
人工智能·aigc