class Role(base.PaginatedCollection, db.Model): """ Role table. References user """ id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(10)) description = db.Column(db.String(35)) users = db.relationship('User', backref='role', lazy='dynamic') def __repr__(self): return '<Role id={}>'.format(self.name) def to_json(self): data = { 'id': self.id, 'name': self.name, 'description': self.description, '_links': { 'self': url_for('api.get_role', id=self.id), 'users': url_for('api.get_role_users', id=self.id), } } return data def from_json(self, data): for field in ['id', 'name', 'description']: if field in data: setattr(self, field, data[field])
class Fleet(base.PaginatedCollection, db.Model): """ Fleet table. References fleet_pool and fleet_user """ id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(35)) cars = db.relationship('Fleet_Pool', backref='pool', lazy='dynamic') users = db.relationship('Fleet_User', backref='fleet', lazy='dynamic') def __repr__(self): return '<Fleet id={}, name={}>'.format(self.id, self.name) def to_json(self): data = { 'id': self.id, 'name': self.name, '_links': { 'self': url_for('api.get_fleet', id=self.id), 'cars': url_for('api.get_fleet_cars', id=self.id), 'users': url_for('api.get_fleet_users', id=self.id) } } return data def from_json(self, data): for field in ['id', 'name']: if field in data: setattr(self, field, data[field])
class User(base.PaginatedCollection, db.Model): """ User table. References log, journey, address """ id = db.Column(db.String(9), primary_key=True) first_name = db.Column(db.String(35)) last_name = db.Column(db.String(35)) email = db.Column(db.String(254)) password = db.Column(db.String(64)) role_id = db.Column(db.Integer, db.ForeignKey('role.id')) status = db.Column(db.Boolean) logs = db.relationship('Log', backref='issuer', lazy='dynamic') fleets = db.relationship('Fleet_User', backref='users', lazy='dynamic') journeys = db.relationship('Journey', backref='driver', lazy='dynamic') addresses = db.relationship('Address', backref='creator', lazy='dynamic') def __repr__(self): return '<User id={}>'.format(self.id) def to_json(self): data = { 'id': self.id, 'first_name': self.first_name, 'last_name': self.last_name, 'email': self.email, # Do not add hashed password to json representation #'password': self.password, 'role_id': self.role_id, 'status': self.status, '_links': { 'self': url_for('api.get_user', id=self.id), 'role': url_for('api.get_role', id=self.role_id), 'fleets': url_for('api.get_user_fleets', id=self.id), 'journeys': url_for('api.get_user_journeys', id=self.id), 'addresses': url_for('api.get_user_addresses', id=self.id), 'logs': url_for('api.get_user_logs', id=self.id) } } return data def from_json(self, data): for field in [ 'id', 'first_name', 'last_name', 'email', 'password', 'role_id', 'status' ]: if field in data: setattr(self, field, data[field])
class Car(base.PaginatedCollection, db.Model): """ Car table. References journey, fleet_pool """ id = db.Column(db.String(10), primary_key=True) brand = db.Column(db.String(35)) model = db.Column(db.String(35)) fuel = db.Column(db.String(10)) vin = db.Column(db.String(17)) owner = db.Column(db.String(35)) mot = db.Column(db.Date) wheel = db.Column(db.String(10)) status = db.Column(db.Boolean) fleets = db.relationship('Fleet_Pool', backref='cars', lazy='dynamic') journeys = db.relationship('Journey', backref='car', lazy='dynamic') def __repr__(self): return '<Car id={}>'.format(self.id) def to_json(self): data = { 'id': self.id, 'brand': self.brand, 'model': self.model, 'fuel': self.fuel, 'vin': self.vin, 'owner': self.owner, 'mot': self.mot, 'wheel': self.wheel, 'status': self.status, '_links': { 'self': url_for('api.get_car', id=self.id), 'fleets': url_for('api.get_car_fleets', id=self.id), 'journeys': url_for('api.get_car_journeys', id=self.id) } } return data def from_json(self, data): for field in [ 'id', 'brand', 'model', 'fuel', 'vin', 'owner', 'mot', 'wheel', 'status' ]: if field in data: setattr(self, field, data[field])
class Address(base.PaginatedCollection, db.Model): """ Address table. References user """ id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(35)) group = db.Column(db.String(10)) street = db.Column(db.String(35)) number = db.Column(db.String(10)) zipcode = db.Column(db.String(5)) city = db.Column(db.String(35)) user_id = db.Column(db.String(9), db.ForeignKey('user.id')) # TODO: Map all journeys which used this address def __repr__(self): return '<Address id={}>'.format(self.id) def to_json(self): data = { 'id': self.id, 'name': self.name, 'group': self.group, 'street': self.street, 'number': self.number, 'zipcode': self.zipcode, 'city': self.city, '_links': { 'self': url_for('api.get_address', id=self.id), 'user': url_for('api.get_user', id=self.user_id) } } return data def from_json(self, data): for field in [ 'id', 'name', 'group', 'street', 'number', 'zipcode', 'city' ]: if field in data: setattr(self, field, data[field])
class Log(base.PaginatedCollection, db.Model): """ Log table. References user """ timestamp = db.Column(db.DateTime, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) info = db.Column(db.String(255)) def __repr__(self): return '<Log timestamp={}, user_id={}, info={}>'.format( self.timestamp, self.user_id, self.info) def to_json(self): data = { 'timestamp': self.timestamp, 'user_id': self.issuer.id, 'info': self.info } return data def from_json(self, data): for field in ['timestamp', 'user_id', 'info']: if field in data: setattr(self, field, data[field])
class Journey(base.PaginatedCollection, db.Model): """ Journey table. References car, address, bill, user """ id = db.Column(db.Integer, primary_key=True) car_id = db.Column(db.String(10), db.ForeignKey('car.id')) time_start = db.Column(db.DateTime) time_end = db.Column(db.DateTime) address_id_start = db.Column(db.Integer, db.ForeignKey('address.id')) address_id_end = db.Column(db.Integer, db.ForeignKey('address.id')) reason = db.Column(db.String(35)) visited = db.Column(db.String(35)) km_start = db.Column(db.Integer) km_business = db.Column(db.Integer) km_commute = db.Column(db.Integer) km_private = db.Column(db.Integer) km_end = db.Column(db.Integer) bill_id = db.Column(db.Integer, db.ForeignKey('bill.id')) bill = db.relationship('Bill', back_populates='journey') user_id = db.Column(db.String(9), db.ForeignKey('user.id')) def __repr__(self): return '<Journey id={}, car_id={}, user_id={}>'.format( self.id, self.car_id, self.user_id) def to_json(self): data = { 'id': self.id, 'car_id': self.car_id, 'time_start': self.time_start, 'time_end': self.time_end, 'address_id_start': self.address_id_start, 'address_id_end': self.address_id_end, 'reason': self.reason, 'visited': self.visited, 'km_start': self.km_start, 'km_business': self.km_business, 'km_commute': self.km_commute, 'km_private': self.km_private, 'km_end': self.km_end, 'bill_id': self.bill_id, 'user_id': self.user_id, '_links': { 'self': url_for('api.get_journey', id=self.id), 'car': url_for('api.get_car', id=self.car_id), 'address_start': url_for('api.get_address', id=self.address_id_start), 'address_end': url_for('api.get_address', id=self.address_id_end), 'bill': url_for('api.get_bill', id=self.bill_id), 'user': url_for('api.get_user', id=self.user_id) } } return data def from_json(self, data): array = { 'id', 'car_id', 'time_start', 'time_end', 'address_id_start', 'address_id_end', 'reason', 'visited', 'km_start', 'km_business', 'km_commute', 'km_private', 'km_end', 'bill_id', 'user_id' } for field in array: if field in data: setattr(self, field, data[field])