class Entity(db.Model): id = db.Column(db.CHAR(255), primary_key=True) name = db.Column(db.String) is_searchable = db.Column(db.Boolean) marked_deleted = db.Column(db.Boolean) date_created = db.Column(db.DateTime) date_updated_ac = db.Column(db.DateTime, server_default=func.now()) date_updated_org = db.Column(db.DateTime, server_default=func.now()) is_verified = db.Column(db.Boolean) last_verified = db.Column(db.DateTime) rating = db.Column(db.REAL) is_closed = db.Column(db.Boolean) phone = db.Column(db.String) user_id = db.Column(db.String) website = db.Column(db.String) lat = db.Column(db.REAL) lon = db.Column(db.REAL) address_id = db.Column(db.CHAR(255), db.ForeignKey('address.id')) attachements = db.relationship('Attachement', backref='entity', lazy=True) comments = db.relationship('Comments', backref='entity', lazy=True) emails = db.relationship('Email', backref='entity', lazy=True) entity_languages = db.relationship('EntityLanguage', backref='entity', lazy=True) entity_properties = db.relationship('EntityProperty', backref='entity', lazy=True) entity_tags = db.relationship('EntityTag', backref='entity', lazy=True) service_providers = db.relationship('ServiceProvider', backref='entity', lazy=True) user_favorites = db.relationship('UserFavorites', backref='entity', lazy=True)
class Schedule(db.Model): id = db.Column(db.CHAR(255), primary_key=True) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) day_time_id = db.Column(db.CHAR(255), db.ForeignKey('day_time.id')) entities = db.relationship('Entity', backref='schedules', lazy=True) day_times = db.relationship('DayTime', backref='schedules', lazy=True)
class Email(db.Model): id = db.Column(db.CHAR(255), primary_key=True) email = db.Column(db.String(255)) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) def __init__(self, email): self.email = email
class Address(db.Model): id = db.Column(db.CHAR(255), primary_key=True) street_number = db.Column(db.Integer) street_number_suffix = db.Column(db.String) street_name = db.Column(db.String) street_type = db.Column(db.String) street_direction = db.Column(db.String) address_type = db.Column(db.String) address_type_id = db.Column(db.String) minor_municipality = db.Column(db.String) major_municipality = db.Column(db.String) governing_district = db.Column(db.String) postal_area = db.Column(db.String) iso3_code = db.Column(db.CHAR(3)) lat = db.Column(db.REAL) lon = db.Column(db.REAL) @property def serialize(self): address = f'{self.street_number} {self.street_name} {self.street_type} {self.street_direction},' return { 'address': address, 'city': self.major_municipality, 'id': self.id, 'state': self.governing_district, 'unit': f'{self.address_type} {self.address_type_id}', 'zip_code': self.postal_area, 'lat': self.lat, 'lon': self.lon }
class Users(db.Model): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String) user_type = db.Column(db.String) hashed_password = db.Column(db.String) salt = db.Column(db.String) created_at = db.Column(db.DateTime) iso3_code = db.Column(db.CHAR(3)) active = db.Column(db.Boolean) preferred_language = db.Column(db.CHAR(3)) comments = db.relationship('Comments', backref='user', lazy=True) user_favorites = db.relationship('UserFavorites', backref='user', lazy=True) asylum_seekers = db.relationship('AsylumSeeker', backref='user', lazy=True) service_providers = db.relationship('ServiceProvider', backref='user', lazy=True) def __init__(self, id, email, preferred_language): self.id = id self.email = email self.preferred_language = preferred_language @property def serialize(self): return { 'user_id': self.id, 'email': self.email, 'preferred_language': self.preferred_language }
class Services(db.Model): id = db.Column(db.CHAR(255), primary_key=True) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) parent_organization = db.Column(db.CHAR(255), db.ForeignKey('organization.id')) appointment = db.Column(db.Boolean) access = db.relationship('Access', backref='service', lazy=True)
class Comments(db.Model): id = db.Column(db.CHAR(255), primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) date_created = db.Column(db.DateTime) date_updated = db.Column(db.DateTime) flagged = db.Column(db.Boolean) comment = db.Column(db.Text)
class Attachement(db.Model): id = db.Column(db.CHAR(255), primary_key=True) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) image = db.Column(db.Boolean) name = db.Column(db.String) date_uploaded = db.Column(db.DateTime) entities = db.relationship('Entity', backref='attachement', lazy=True)
class Organization(db.Model): __tablename__ = 'organization' id = db.Column(db.CHAR(255), primary_key=True) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) entity = db.relationship('Entity', backref="organization", uselist=False) services = db.relationship('Services', backref='organization', lazy=True) @property def serialize(self): return {'id': self.id}
class Entity(db.Model): id = db.Column(db.CHAR(255), primary_key=True) name = db.Column(db.String) is_searchable = db.Column(db.Boolean) marked_deleted = db.Column(db.Boolean) date_created = db.Column(db.DateTime) date_updated_ac = db.Column(db.DateTime, server_default=func.now()) date_updated_org = db.Column(db.DateTime, server_default=func.now()) is_verified = db.Column(db.Boolean) last_verified = db.Column(db.DateTime) rating = db.Column(db.REAL) is_closed = db.Column(db.Boolean) user_id = db.Column(db.String) website = db.Column(db.String) address_id = db.Column(db.CHAR(255), db.ForeignKey('address.id')) attachements = db.relationship('Attachement', backref='entity', lazy=True) comments = db.relationship('Comments', backref='entity', lazy=True) emails = db.relationship('Email', backref='entity', lazy=True) entity_languages = db.relationship('EntityLanguage', backref='entity', lazy=True) phones = db.relationship('Phone', backref='entity', lazy=True) service_providers = db.relationship('ServiceProvider', backref='entity', lazy=True) user_favorites = db.relationship('UserFavorites', backref='entity', lazy=True) address = db.relationship('Address', backref='entity', uselist=False) properties = db.relationship('Property', backref='entity', secondary=entity_property) tags = db.relationship('Tags', backref='entity', secondary=entity_tag, lazy=False) @property def serialize(self): return { 'name': self.name, 'last_verified': self.last_verified, 'updated_at': self.date_updated_ac, 'website': self.website, 'rating': self.rating, 'is_closed': self.is_closed }
class ServiceProvider(db.Model): id = db.Column(db.CHAR(255), primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) type = db.Column(db.String) description = db.Column(db.String) organization_name = db.Column(db.String) about = db.Column(db.String) phone = db.Column(db.String) website = db.Column(db.String) cost = db.Column(db.String) appointment_needed = db.Column(db.Boolean) languages_spoken = db.Column(db.String) who_we_serve = db.Column(db.String) verified = db.Column(db.Boolean) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id'))
class User(db.Model, UserMixin): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32), nullable=False) last_name = db.Column(db.String(32), nullable=False) genre = db.Column(db.CHAR(1), db.CheckConstraint('genre in (\'M\', \'F\')'), nullable=False) username = db.Column(db.String(80), nullable=False, unique=True) email = db.Column(db.String(120), nullable=False, unique=True) _password = db.Column('password', db.String(128), nullable=False) def __init__(self, name, last_name, genre, username, email, pw): self.name = name self.last_name = last_name self.genre = genre self.username = username self.email = email self._password = bcrypt.generate_password_hash(pw) @hybrid_property def password(self): return self._password @password.setter def _set_password(self, pw): self._password = bcrypt.generate_password_hash(pw) def validate_password(self, password): return bcrypt.check_password_hash(bytes(self.password), password) def __repr__(self): return 'User <%r>' % self.username
class Address(db.Model): id = db.Column(db.CHAR(255), primary_key=True) street_number = db.Column(db.Integer) street_number_suffix = db.Column(db.String) street_name = db.Column(db.String) street_type = db.Column(db.String) street_direction = db.Column(db.String) address_type = db.Column(db.String) address_type_id = db.Column(db.String) minor_municipality = db.Column(db.String) major_municipality = db.Column(db.String) governing_district = db.Column(db.String) postal_area = db.Column(db.String) iso3_code = db.Column(db.CHAR(3)) entities = db.relationship('Entity', backref='address', lazy=True)
class Property(db.Model): id = db.Column(db.CHAR(255), primary_key=True) name = db.Column(db.String) definition = db.Column(db.Text) value = db.Column(db.String) entity_properties = db.relationship('EntityProperty', backref='property', lazy=True)
class Comments(db.Model): id = db.Column(db.CHAR(255), primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) date_created = db.Column(db.DateTime) date_updated = db.Column(db.DateTime) flagged = db.Column(db.Boolean) comment = db.Column(db.Text) @property def serialize(self): return { 'id': self.id, 'user_id': self.user_id, 'date_updated': self.date_updated, 'comment': self.comment }
class Services(db.Model): id = db.Column(db.CHAR(255), primary_key=True) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) parent_organization_id = db.Column(db.CHAR(255), db.ForeignKey('organization.id')) appointment = db.Column(db.Boolean) entity = db.relationship('Entity', backref="services", uselist=False) access = db.relationship('Access', backref="access", lazy=False) @property def serialize(self): return { 'id': self.id, 'parent_organization_id': self.parent_organization_id, 'is_appointment': self.appointment }
class Access(db.Model): id = db.Column(db.CHAR(255), primary_key=True) access_type = db.Column(db.String) access_value = db.Column(db.String) location = db.Column(db.String) direct_access = db.Column(db.Boolean) opportunities_id = db.Column(db.String, db.ForeignKey('services.id')) date_created = db.Column(db.DateTime) date_updated = db.Column(db.DateTime) meta_data = db.Column(db.Text)
class AsylumSeeker(db.Model): id = db.Column(db.CHAR(255), primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) first_name = db.Column(db.String) last_name = db.Column(db.String) def __init__(self, id, user_id, first_name, last_name): self.id = id self.user_id = user_id self.first_name = first_name self.last_name = last_name
class Email(db.Model): id = db.Column(db.CHAR(255), primary_key=True) email = db.Column(db.String(255)) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) is_primary = db.Column(db.Boolean) def __init__(self, email): self.email = email @property def serialize(self): return { 'email': self.email, 'id': self.id, 'is_primary': self.is_primary, 'first_name': 'Jane', 'last_name': 'Doe', 'show_on_organization': True, 'title': 'Jane Doe' }
class Phone(db.Model): id = db.Column(db.Integer, primary_key=True) country_code = db.Column(db.VARCHAR(255)) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) area_code = db.Column(db.VARCHAR(255)) digits = db.Column(db.VARCHAR(255)) is_primary = db.Column(db.Boolean) @property def serialize(self): return { 'id': self.id, 'digits': f'{self.area_code}{self.digits}', 'phone_type': '', 'is_primary': self.is_primary }
class Paramedic(Employee): __tablename__ = 'paramedic' dni = db.Column(db.Integer, db.ForeignKey('employee.dni'), primary_key=True) specialization = db.Column(db.CHAR(3), nullable=False, default='UNK') id_params_team = db.Column(db.Integer, db.ForeignKey('paramedics_team.id_params_team')) team = db.relationship('ParamedicTeam', back_populates='members') __mapper_args__ = {'polymorphic_identity': 'PRM'} __table_args__ = (db.CheckConstraint(""" specialization = 'PAB' OR specialization = 'APA' OR specialization = 'AEM' OR specialization = 'TEM'"""), ) def __init__(self, dni, name, ln, addr, pn, salary, available, _type, specialization): super(Paramedic, self).__init__(dni, name, ln, addr, pn, salary, available, _type) self.specialization = specialization
class EntityTag(db.Model): id = db.Column(db.CHAR(255), primary_key=True) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) tag_id = db.Column(db.CHAR(255), db.ForeignKey('tags.id'))
class Tags(db.Model): id = db.Column(db.CHAR(255), primary_key=True) name = db.Column(db.String) parent_tag = db.Column(db.String, db.ForeignKey('tags.id')) entity_tags = db.relationship('EntityTag', backref='tag', lazy=True)
class UserFavorites(db.Model): id = db.Column(db.CHAR(255), primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id'))
class TimeBlock(db.Model): id = db.Column(db.CHAR(255), primary_key=True) start_time = db.Column(db.Time) end_time = db.Column(db.Time) daytimes = db.relationship('DayTime', backref='timeblock', lazy=True)
class Day(db.Model): id = db.Column(db.CHAR(255), primary_key=True) day = db.Column(db.Integer) daytimes = db.relationship('DayTime', backref='day', lazy=True)
class EntityLanguage(db.Model): id = db.Column(db.Integer, primary_key=True) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) iso3_language = db.Column(db.CHAR(3)) description = db.Column(db.Text) notes = db.Column(db.Text)
from application import db from sqlalchemy import func # For many-many relationships table are best suited # https://docs.sqlalchemy.org/en/13/orm/basic_relationships.html#relationships-one-to-one entity_property = db.Table( 'entity_property', db.Model.metadata, db.Column('entity_id', db.CHAR(255), db.ForeignKey('entity.id')), db.Column('property_id', db.Integer, db.ForeignKey('property.id'))) entity_tag = db.Table( 'entity_tag', db.Model.metadata, db.Column('entity_id', db.CHAR(255), db.ForeignKey('entity.id')), db.Column('tag_id', db.Integer, db.ForeignKey('tags.id'))) # create our database models class Access(db.Model): id = db.Column(db.Integer, primary_key=True) access_type = db.Column(db.String) access_value = db.Column(db.String) location = db.Column(db.String) direct_access = db.Column(db.Boolean) service_id = db.Column(db.String, db.ForeignKey('services.id')) date_created = db.Column(db.DateTime) date_updated = db.Column(db.DateTime) meta_data = db.Column(db.Text) @property def serialize(self): return {
class DayTime(db.Model): id = db.Column(db.CHAR(255), primary_key=True) time_id = db.Column(db.CHAR(255), db.ForeignKey('time_block.id')) day_id = db.Column(db.Integer, db.ForeignKey('day.id'))
class Organization(db.Model): id = db.Column(db.CHAR(255), primary_key=True) entity_id = db.Column(db.CHAR(255), db.ForeignKey('entity.id')) services = db.relationship('Services', backref='organization', lazy=True)