Beispiel #1
0
class Review(db.Model):
    """Class to create a Review class object"""

    __tablename__ = 'reviews'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), unique=True, nullable=False)
    description = db.Column(db.String(256), nullable=False)
    business = db.Column(db.Integer, db.ForeignKey('businesses.id'))
    created_by = db.Column(db.Integer, db.ForeignKey('users.id'))
    created_at = db.Column(db.DateTime, default=db.func.current_timestamp())
    updated_at = db.Column(db.DateTime, default=db.func.current_timestamp(
    ), onupdate=db.func.current_timestamp())
    author = db.relationship("User")

    def __init__(self, name, description, business):
        self.name = name
        self.description = description
        self.business = business
        self.created_by = session["user_id"]

    def __repr__(self):
        return '<Review: {}>'.format(self.name)

    def review_as_dict(self):
        """Represent the review as a dict"""

        review = {r.name: getattr(self, r.name) for r in self.__table__.columns}
        review['author'] = self.author.first_name + ' ' + self.author.last_name
        return review
Beispiel #2
0
class MessageModel(db.Model):
    __tablename__ = "messages"
    id = db.Column(db.Integer, primary_key=True)
    message = db.Column(db.String(140))

    sender_id = db.Column(db.Integer,
                          db.ForeignKey("users.id"),
                          nullable=False)
    recipient_id = db.Column(db.Integer,
                             db.ForeignKey("users.id"),
                             nullable=False)

    recipient = db.relationship("UserModel", foreign_keys=[recipient_id])
    sender = db.relationship("UserModel", foreign_keys=[sender_id])

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()

    def json(self):
        return {
            "id": self.id,
            "message": self.message,
            "sender_id": self.sender_id,
            "recipient_id": self.recipient_id,
        }

    @classmethod
    def find_recent_from(cls, recipient_id, sender_id):
        return (cls.query.filter_by(
            sender_id=sender_id, recipient_id=recipient_id).limit(100).all())

    @classmethod
    def find_recent(cls, recipient_id):
        return cls.query.filter_by(recipient_id=recipient_id).limit(100).all()
Beispiel #3
0
class Committee(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    posts = db.relationship("CommitteePost", back_populates="committee")
    events = db.relationship("Event", back_populates="committee")
    logo = db.Column(db.String)
    description = db.Column(db.String)
    facebook_url = db.Column(db.String)
    instagram_url = db.Column(db.String)
    page_id = db.Column(db.Integer, db.ForeignKey("page.id"))
    page = db.relationship("Page", back_populates="committee")
    category_id = db.Column(db.Integer, db.ForeignKey('CommitteeCategory.id'))
    category = db.relationship("CommitteeCategory")

    def to_dict(self):
        posts = [post.to_dict() for post in self.posts]
        events = [event.to_dict() for event in self.events]

        if self.page != None:
            page = self.page.to_dict()
        else:
            page = None

        return {
            "id": self.id,
            "name": self.name,
            "posts": sorted(posts, key=lambda p: p["weight"], reverse=True),
            "logo": self.logo,
            "description": self.description,
            "facebookUrl": self.facebook_url if not RECEPTION_MODE else None,
            "instagramUrl": self.instagram_url if not RECEPTION_MODE else None,
            "page": page,
            "events": events,
        }

    def to_dict_without_page(self):
        posts = [post.to_dict() for post in self.posts]
        events = [event.to_dict() for event in self.events]

        return {
            "id": self.id,
            "name": self.name,
            "posts": sorted(posts, key=lambda p: p["weight"], reverse=True),
            "logo": self.logo,
            "description": self.description,
            "facebookUrl": self.facebook_url if not RECEPTION_MODE else None,
            "instagramUrl": self.instagram_url if not RECEPTION_MODE else None,
            "events": events,
        }

    def to_basic_dict(self):
        return {
            "id": self.id,
            "name": self.name,
            "logo": self.logo,
            "description": self.description,
            "facebookUrl": self.facebook_url if not RECEPTION_MODE else None,
            "instagramUrl": self.instagram_url if not RECEPTION_MODE else None,
            "pageSlug": self.page.slug if self.page else None
        }
Beispiel #4
0
class DocumentTags(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    itemId = db.Column(db.Integer, db.ForeignKey("documents.itemId"))
    tagId = db.Column(db.Integer, db.ForeignKey("tags.tagId"))

    def serialize(self):
        tag = Tag.query.get(self.tagId)
        return tag.to_dict()
class Event(db.Model):
    __tablename__ = "event"
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
    title = db.Column(db.String, nullable=False)
    title_en = db.Column(db.String, nullable=True)
    date = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    scheduled_date = db.Column(db.DateTime, default=None, nullable=True)
    draft = db.Column(db.Boolean, default=False)
    body = db.Column(db.Text, nullable=False)
    body_en = db.Column(db.Text, nullable=True)
    location = db.Column(db.String)
    committee_id = db.Column(db.Integer, db.ForeignKey('committee.id'))
    committee = db.relationship("Committee", back_populates="events")
    header_image = db.Column(
        db.String, default="static/posts/default.png"
    )  #can be changed if we get a default event picture
    tags = db.relationship("PostTag", secondary=events_tags)
    facebook_link = db.Column(db.String)
    event_date = db.Column(db.DateTime, default=datetime.datetime.utcnow())
    end_date = db.Column(db.DateTime,
                         default=datetime.datetime.utcnow() +
                         datetime.timedelta(hours=5))

    def to_dict(self):
        com = None
        if self.committee:
            com = self.committee.to_basic_dict()

        return {
            "id": self.id,
            "user_id": self.user_id,
            "title": {
                "se": self.title,
                "en": self.title_en
            },
            "date": self.date,
            "scheduled_date": self.scheduled_date,
            "draft": self.draft,
            "body": {
                "se": self.body,
                "en": self.body_en
            },
            "location": self.location,
            "header_image": self.header_image,
            "committee": com,
            "tags": [t.to_dict() for t in self.tags],
            "facebook_link": self.facebook_link,
            "event_date": self.event_date,
            "end_date": self.end_date
        }
Beispiel #6
0
class Badges(db.Model):
    __tablename__ = 'Badges'

    id = db.Column(db.String(100), primary_key=True)
    image = db.Column(db.String(100), nullable=False)
    csv = db.Column(db.String(100), nullable=False)
    text_color = db.Column(db.String(100), nullable=False)
    badge_size = db.Column(db.String(100), nullable=False)
    download_link = db.Column(db.String)
    image_link = db.Column(db.String)
    created_at = db.Column(db.DateTime,
                           nullable=False,
                           default=datetime.utcnow)
    deleted_at = db.Column(db.DateTime, nullable=True)
    badge_name = db.Column(db.String(100), default='My Badge')
    user_id = db.Column(db.String(100),
                        db.ForeignKey('User.id', ondelete='CASCADE'))

    def save_to_db(self):
        self.id = str(uuid.uuid4())
        db.session.add(self)
        try:
            db.session.commit()
        except Exception as e:
            db.session.rollback()
            db.session.flush()
            print(e)

    def delete_from_db(self):
        self.deleted_at = datetime.utcnow()
        self.save_to_db()

    @classmethod
    def getBadge(cls, badge_id):
        return cls.query.filter_by(id=badge_id).first()
Beispiel #7
0
class Log(db.Model):
    """Class for database changes logs"""

    __tablename__ = 'logs'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    action = db.Column(db.String(50), nullable=False)
    message = db.Column(db.String(256), nullable=False)
    table = db.Column(db.String(50), nullable=False)
    created_by = db.Column(db.Integer, db.ForeignKey('users.id'))
    created_at = db.Column(db.DateTime, default=db.func.current_timestamp())
    author = db.relationship("User")

    def __init__(self, action, message, table, user_id):
        self.action = action
        self.message = message
        self.table = table
        self.created_by = user_id

    def __repr__(self):
        return '<Log: {}>'.format(self.message)

    def log_as_dict(self):
        """Represent the log as a dict"""

        log = {l.name: getattr(self, l.name) for l in self.__table__.columns}
        log['author'] = self.author.first_name + ' ' + self.author.last_name
        return log
Beispiel #8
0
class Permissions(db.Model):
    __tablename__ = 'Permissions'

    id = db.Column(db.String(100), primary_key=True)
    isUser = db.Column(db.Boolean, default=False)
    isAdmin = db.Column(db.Boolean, default=False)
    isSales = db.Column(db.Boolean, default=False)
    user_id = db.Column(db.String(100),
                        db.ForeignKey('User.id', ondelete='CASCADE'))

    def save_to_db(self):
        self.id = str(uuid.uuid4())
        db.session.add(self)
        try:
            db.session.commit()
        except Exception as e:
            db.session.rollback()
            db.session.flush()
            print(e)

    @classmethod
    def getPermissions(cls, permissions_id):
        return cls.query.filter_by(id=permissions_id).first()

    @classmethod
    def get_by_uid(cls, uid=None):
        return cls.query.filter_by(user_id=uid).first()
Beispiel #9
0
class Category(db.Model):
    """Class to create a Category class object"""

    __tablename__ = 'categories'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), unique=True, nullable=False)
    description = db.Column(db.String(256), nullable=False)
    created_by = db.Column(db.Integer, db.ForeignKey('users.id'))
    created_at = db.Column(db.DateTime, default=db.func.current_timestamp())
    updated_at = db.Column(db.DateTime,
                           default=db.func.current_timestamp(),
                           onupdate=db.func.current_timestamp())
    author = db.relationship("User")

    def __init__(self, name, description):
        self.name = name
        self.description = description
        self.created_by = session["user_id"]

    def __repr__(self):
        return '<Category: {}>'.format(self.name)

    def category_as_dict(self):
        """Represent the category as a dict"""

        category = {
            c.name: getattr(self, c.name)
            for c in self.__table__.columns
        }
        category[
            'author'] = self.author.first_name + ' ' + self.author.last_name
        return category
Beispiel #10
0
class Business(db.Model):
    """Class to create a Business class object"""

    __tablename__ = 'businesses'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), unique=True, nullable=False)
    description = db.Column(db.String(256), nullable=False)
    category = db.Column(db.Integer, db.ForeignKey('categories.id'))
    location = db.Column(db.Integer, db.ForeignKey('locations.id'))
    photo = db.Column(db.String(256))
    created_by = db.Column(db.Integer, db.ForeignKey('users.id'))
    created_at = db.Column(db.DateTime, default=db.func.current_timestamp())
    updated_at = db.Column(db.DateTime,
                           default=db.func.current_timestamp(),
                           onupdate=db.func.current_timestamp())
    reviews = db.relationship('Review',
                              order_by='Review.id',
                              cascade='all, delete-orphan')
    author = db.relationship("User")
    category_relationship = db.relationship("Category")
    location_relationship = db.relationship("Location")

    def __init__(self, name, description, category, location, photo):
        self.name = name
        self.description = description
        self.category = category
        self.location = location
        self.photo = photo
        self.created_by = session["user_id"]

    def __repr__(self):
        return '<Business: {}>'.format(self.name)

    def business_as_dict(self):
        """Represent the business as a dict"""

        business = {
            b.name: getattr(self, b.name)
            for b in self.__table__.columns
        }
        business[
            'author'] = self.author.first_name + ' ' + self.author.last_name
        business['category_name'] = self.category_relationship.name
        business['location_name'] = self.location_relationship.name
        return business
class CommitteePostTerm(db.Model):
    __tablename__ = "committee_post_term"
    id = db.Column(db.Integer, primary_key=True)
    post_id = db.Column(db.Integer, db.ForeignKey('committee_post.id'))
    post = db.relationship("CommitteePost", back_populates="terms")
    start_date = db.Column(db.DateTime)
    end_date = db.Column(db.DateTime)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship("User", back_populates="post_terms")

    def to_dict(self):
        return {
            "id": self.id,
            "startDate": self.start_date.strftime("%Y-%m-%d"),
            "endDate": self.end_date.strftime("%Y-%m-%d"),
            "post": self.post.to_dict_without_terms(),
            "user": self.user.to_dict_without_terms(),
            "isCurrent": self.start_date < datetime.now() < self.end_date
        }
Beispiel #12
0
class PageRevision(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime, default=datetime.datetime.now)
    revision_type = db.Column(db.Enum(PageRevisionType))
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    author = db.relationship("User")
    title_sv = db.Column(db.String)
    title_en = db.Column(db.String)
    content_sv = db.Column(db.String)
    content_en = db.Column(db.String)
    image = db.Column(db.String)
    page_id = db.Column(db.Integer, db.ForeignKey("page.id"))
    published = db.Column(db.Boolean, default=False)

    def to_dict(self):
        return {
            "id":
            self.id,
            "timestamp":
            self.timestamp,
            "type":
            self.revision_type.name,
            "author":
            self.author.to_dict_without_terms()
            if self.author != None else None,
            "title_sv":
            self.title_sv,
            "title_en":
            self.title_en,
            "image":
            self.image if not RECEPTION_MODE else None,
            "content_sv":
            self.content_sv,
            "content_en":
            self.content_en,
            "published":
            self.published
        }
Beispiel #13
0
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String, nullable=False)
    title_en = db.Column(db.String, nullable=True)
    date = db.Column(db.DateTime, default=datetime.utcnow)
    scheduled_date = db.Column(db.DateTime, default=None, nullable=True)
    draft = db.Column(db.Boolean, default=False)
    header_image = db.Column(
        db.String,
        default="https://api.medieteknik.com/static/posts/default.png")
    body = db.Column(db.String, nullable=False)
    body_en = db.Column(db.String, nullable=True)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
    committee_id = db.Column(db.Integer,
                             db.ForeignKey("committee.id"),
                             nullable=True)
    tags = db.relationship("PostTag", secondary=posts_tags)

    def to_dict(self):
        return {
            "id": self.id,
            "title": {
                "se": self.title,
                "en": self.title_en
            },
            "date": self.date,
            "scheduled_date": self.scheduled_date,
            "draft": self.draft,
            "header_image": self.header_image,
            "body": {
                "se": self.body,
                "en": self.body_en
            },
            "user_id": self.user_id,
            "committee_id": self.committee_id,
            "tags": [tag.id for tag in self.tags]
        }
Beispiel #14
0
class File(db.Model):
    __tablename__ = 'File'

    id = db.Column(db.String(100))
    filename = db.Column(db.String(100), nullable=False, primary_key=True)
    filetype = db.Column(db.String(100), nullable=False)
    user_id = db.Column(db.String(100),
                        db.ForeignKey('User.id', ondelete='CASCADE'))

    def save_to_db(self):
        self.id = str(uuid.uuid4())
        db.session.add(self)
        try:
            db.session.commit()
        except Exception as e:
            db.session.rollback()
            db.session.flush()
            print(e)
Beispiel #15
0
from api.db import db
from flask_security import UserMixin, RoleMixin

roles_users = db.Table(
    "roles_users",
    db.Column("user_id", db.Integer(), db.ForeignKey("user.id")),
    db.Column("role_id", db.Integer(), db.ForeignKey("role.id")),
)


class Role(db.Model, RoleMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))


class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())
    roles = db.relationship("Role",
                            secondary=roles_users,
                            backref=db.backref("users", lazy="dynamic"))
class CommitteePost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    officials_email = db.Column(db.String)
    committee_id = db.Column(db.Integer, db.ForeignKey('committee.id'))
    committee = db.relationship("Committee", back_populates="posts")
    is_official = db.Column(db.Boolean)
    terms = db.relationship("CommitteePostTerm", back_populates="post")
    weight = db.Column(db.Integer, default=1)

    def soft_hyphenate(self, name):
        words = [
            "ansvarig", "skyddsombud", "ordförande", "frågor", "ombud",
            "ledare"
        ]
        hyphenated = name
        for word in words:
            hyphenated = hyphenated.replace(word, "&#173;" + word, 1)
        return hyphenated

    def current_terms(self):
        date = datetime.now()
        terms = CommitteePostTerm.query.filter(
            CommitteePostTerm.post_id == self.id).filter(
                and_(CommitteePostTerm.start_date <= date,
                     CommitteePostTerm.end_date >= date)).all()

        return terms

    def new_term(self, start_date, end_date):
        term = CommitteePostTerm()
        term.post = self
        term.start_date = start_date
        term.end_date = end_date
        return term

    def to_dict(self):
        terms = []
        for term in self.current_terms():
            terms.append({
                "id": term.id,
                "startDate": term.start_date,
                "endDate": term.end_date,
                "user": term.user.to_dict_without_terms()
            })

        return {
            "id": self.id,
            "name": self.name,
            "email": self.officials_email,
            "committeeId": self.committee_id,
            "committeeCategory": self.committee.category.to_dict(),
            "isOfficial": self.is_official,
            "currentTerms": terms,
            "weight": self.weight
        }

    def to_dict_without_terms(self, hyphenate=False):
        return {
            "id": self.id,
            "name": self.soft_hyphenate(self.name) if hyphenate else self.name,
            "email": self.officials_email,
            "committeeId": self.committee_id,
            "committeeCategory": self.committee.category.to_dict(),
            "isOfficial": self.is_official,
            "weight": self.weight
        }

    def to_dict_with_all_terms(self):
        terms = []
        current_terms = self.current_terms()
        for term in self.terms:
            terms.append({
                "id": term.id,
                "startDate": term.start_date,
                "endDate": term.end_date,
                "user": term.user.to_dict_without_terms(),
                "current": term in current_terms
            })

        return {
            "id": self.id,
            "name": self.name,
            "email": self.officials_email,
            "committeeId": self.committee_id,
            "committeeCategory": self.committee.category.to_dict(),
            "isOfficial": self.is_official,
            "terms": terms,
            "weight": self.weight
        }
Beispiel #17
0
from api.db import db
import datetime

imageAssociation = db.Table(
    'album_images', db.Model.metadata,
    db.Column('album_id', db.Integer, db.ForeignKey('albums.albumId')),
    db.Column('image_id', db.Integer, db.ForeignKey('images.imageId')))

video_playlist_table = db.Table(
    'album_videos', db.Model.metadata,
    db.Column('album_id',
              db.Integer,
              db.ForeignKey('albums.albumId'),
              primary_key=True),
    db.Column('video_id',
              db.Integer,
              db.ForeignKey('video.id'),
              primary_key=True))


class Album(db.Model):
    __tablename__ = "albums"
    albumId = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String)
    creationDate = db.Column(db.DateTime, default=datetime.datetime.now)
    lastEdit = db.Column(db.DateTime, default=datetime.datetime.now)
    receptionAppropriate = db.Column(db.Boolean)
    images = db.relationship("Image", secondary=imageAssociation)
    videos = db.relationship("Video", secondary=video_playlist_table)
    date = db.Column(db.DateTime)
from api.db import db
import datetime

from api.models.post_tag import PostTag

#Association table for tags and events
events_tags = db.Table(
    'event_Tags', db.Model.metadata,
    db.Column('event_id', db.Integer, db.ForeignKey('event.id')),
    db.Column('tag_id', db.Integer, db.ForeignKey('post_tag.id')))


class Event(db.Model):
    __tablename__ = "event"
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
    title = db.Column(db.String, nullable=False)
    title_en = db.Column(db.String, nullable=True)
    date = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    scheduled_date = db.Column(db.DateTime, default=None, nullable=True)
    draft = db.Column(db.Boolean, default=False)
    body = db.Column(db.Text, nullable=False)
    body_en = db.Column(db.Text, nullable=True)
    location = db.Column(db.String)
    committee_id = db.Column(db.Integer, db.ForeignKey('committee.id'))
    committee = db.relationship("Committee", back_populates="events")
    header_image = db.Column(
        db.String, default="static/posts/default.png"
    )  #can be changed if we get a default event picture
    tags = db.relationship("PostTag", secondary=events_tags)
    facebook_link = db.Column(db.String)
from api.db import db, CRUDMixin
from api import bcrypt


api_category_article = db.Table('api_category_article',
                          db.Column('category_id', db.Integer, db.ForeignKey('api_category.id'), primary_key=True),
                          db.Column('article_id', db.Integer, db.ForeignKey('api_article.id'), primary_key=True),
                          db.PrimaryKeyConstraint('category_id', 'article_id')
                    )


class CategoryModel(db.Model, CRUDMixin):
    __tablename__ = "api_category"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)

    def __repr__(self):
        return '<id {}>'.format(self.id)


class ArticleModel(db.Model, CRUDMixin):
    __tablename__ = 'api_article'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)
    description = db.Column(db.Text)

    categories = db.relationship('CategoryModel', secondary=api_category_article, lazy='subquery',
                             backref=db.backref('articles', lazy=True))