FitTrackee/mpwo_api/mpwo_api/activities/models.py

81 lines
2.8 KiB
Python
Raw Normal View History

2018-01-21 17:43:13 +01:00
import datetime
from mpwo_api import db
class Sport(db.Model):
__tablename__ = "sports"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
label = db.Column(db.String(50), unique=True, nullable=False)
activities = db.relationship('Activity',
lazy=True,
backref=db.backref('sports', lazy='joined'))
def __repr__(self):
return self.label
def __init__(self, label):
self.label = label
class Activity(db.Model):
__tablename__ = "activities"
id = db.Column(
db.Integer,
primary_key=True,
autoincrement=True)
user_id = db.Column(
db.Integer,
db.ForeignKey('users.id'),
nullable=False)
sport_id = db.Column(
db.Integer,
db.ForeignKey('sports.id'),
nullable=False)
gpx = db.Column(db.String(255), nullable=True)
2018-01-28 11:28:47 +01:00
creation_date = db.Column(
db.DateTime, default=datetime.datetime.utcnow)
modification_date = db.Column(
db.DateTime, onupdate=datetime.datetime.utcnow)
2018-01-21 17:43:13 +01:00
activity_date = db.Column(db.DateTime, nullable=False)
duration = db.Column(db.Interval, nullable=False)
pauses = db.Column(db.Interval, nullable=True)
moving = db.Column(db.Interval, nullable=True)
distance = db.Column(db.Numeric(5, 2), nullable=True)
min_alt = db.Column(db.Numeric(5, 2), nullable=True)
max_alt = db.Column(db.Numeric(5, 2), nullable=True)
descent = db.Column(db.Numeric(5, 2), nullable=True)
ascent = db.Column(db.Numeric(5, 2), nullable=True)
max_speed = db.Column(db.Numeric(5, 2), nullable=True)
ave_speed = db.Column(db.Numeric(5, 2), nullable=True)
def __str__(self):
2018-05-01 21:26:17 +02:00
return str(self.sport_id) + \
2018-01-21 17:43:13 +01:00
" - " + self.activity_date.strftime('%Y-%m-%d')
def __init__(self, user_id, sport_id, activity_date, duration):
2018-01-21 17:43:13 +01:00
self.user_id = user_id
self.sport_id = sport_id
self.activity_date = activity_date
self.duration = duration
2018-05-01 21:26:17 +02:00
def serialize(self):
return {
"id": self.id,
"user_id": self.user_id,
"sport_id": self.sport_id,
"creation_date": self.creation_date,
"modification_date": self.modification_date,
"activity_date": self.activity_date,
"duration": self.duration.total_seconds(),
"pauses": self.pauses.total_seconds(),
"moving": self.moving.total_seconds(),
"distance": float(self.distance),
"min_alt": float(self.min_alt),
"max_alt": float(self.max_alt),
"descent": float(self.descent),
"ascent": float(self.ascent),
"max_speed": float(self.max_speed),
"ave_speed": float(self.ave_speed)
}