backend/models/postgis/campaign.py (63 lines of code) (raw):

from backend import db from backend.models.dtos.campaign_dto import CampaignDTO, CampaignListDTO campaign_projects = db.Table( "campaign_projects", db.metadata, db.Column("campaign_id", db.Integer, db.ForeignKey("campaigns.id")), db.Column("project_id", db.Integer, db.ForeignKey("projects.id")), ) campaign_organisations = db.Table( "campaign_organisations", db.metadata, db.Column("campaign_id", db.Integer, db.ForeignKey("campaigns.id")), db.Column("organisation_id", db.Integer, db.ForeignKey("organisations.id")), db.UniqueConstraint( "campaign_id", "organisation_id", name="campaign_organisation_key" ), ) class Campaign(db.Model): """ Describes an Campaign""" __tablename__ = "campaigns" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String, nullable=False, unique=True) logo = db.Column(db.String) url = db.Column(db.String) description = db.Column(db.String) def create(self): """ Creates and saves the current model to the DB """ db.session.add(self) db.session.commit() def delete(self): """ Deletes the current model from the DB """ db.session.delete(self) db.session.commit() def save(self): db.session.commit() def update(self, dto: CampaignDTO): """ Update the user details """ self.name = dto.name if dto.name else self.name self.logo = dto.logo if dto.logo else self.logo self.url = dto.url if dto.url else self.url self.description = dto.description if dto.description else self.description db.session.commit() @classmethod def from_dto(cls, dto: CampaignDTO): """ Creates new message from DTO """ campaign = cls() campaign.url = dto.url campaign.name = dto.name campaign.logo = dto.logo campaign.description = dto.description return campaign def as_dto(self) -> CampaignDTO: """ Creates new message from DTO """ campaign_dto = CampaignDTO() campaign_dto.id = self.id campaign_dto.url = self.url campaign_dto.name = self.name campaign_dto.logo = self.logo campaign_dto.description = self.description return campaign_dto @staticmethod def campaign_list_as_dto(campaigns: list) -> CampaignListDTO: """ Converts a collection of campaigns into DTO""" campaign_list_dto = CampaignListDTO() for campaign in campaigns: campaign_dto = CampaignDTO() campaign_dto.id = campaign.id campaign_dto.name = campaign.name campaign_list_dto.campaigns.append(campaign_dto) return campaign_list_dto