Добавлена интеграция с Fitbit
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m25s

This commit is contained in:
poignatov
2026-02-06 20:50:49 +03:00
parent f1c590de43
commit dfccba4e55
13 changed files with 1711 additions and 21 deletions

View File

@@ -0,0 +1,2 @@
DROP TABLE IF EXISTS fitbit_daily_stats;
DROP TABLE IF EXISTS fitbit_integrations;

View File

@@ -0,0 +1,38 @@
-- Fitbit integrations table (depends on users)
CREATE TABLE fitbit_integrations (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
fitbit_user_id VARCHAR(255),
access_token TEXT,
refresh_token TEXT,
token_expires_at TIMESTAMP WITH TIME ZONE,
goal_steps_min INTEGER DEFAULT 8000,
goal_steps_max INTEGER DEFAULT 10000,
goal_floors_min INTEGER DEFAULT 8,
goal_floors_max INTEGER DEFAULT 10,
goal_azm_min INTEGER DEFAULT 22,
goal_azm_max INTEGER DEFAULT 44,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fitbit_integrations_user_id_unique UNIQUE (user_id)
);
CREATE INDEX idx_fitbit_integrations_user_id ON fitbit_integrations(user_id);
CREATE UNIQUE INDEX idx_fitbit_integrations_fitbit_user_id ON fitbit_integrations(fitbit_user_id) WHERE fitbit_user_id IS NOT NULL;
-- Fitbit daily stats table (depends on users and fitbit_integrations)
CREATE TABLE fitbit_daily_stats (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
date DATE NOT NULL,
steps INTEGER DEFAULT 0,
floors INTEGER DEFAULT 0,
active_zone_minutes INTEGER DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fitbit_daily_stats_user_date_unique UNIQUE (user_id, date)
);
CREATE INDEX idx_fitbit_daily_stats_user_id ON fitbit_daily_stats(user_id);
CREATE INDEX idx_fitbit_daily_stats_date ON fitbit_daily_stats(date);
CREATE INDEX idx_fitbit_daily_stats_user_date ON fitbit_daily_stats(user_id, date);