backend/models/postgis/licenses.py (57 lines of code) (raw):
from backend.models.dtos.licenses_dto import LicenseDTO, LicenseListDTO
from backend import db
# Secondary table defining the many-to-many join
user_licenses_table = db.Table(
"user_licenses",
db.metadata,
db.Column("user", db.BigInteger, db.ForeignKey("users.id")),
db.Column("license", db.Integer, db.ForeignKey("licenses.id")),
)
class License(db.Model):
""" Describes an individual license"""
__tablename__ = "licenses"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, unique=True)
description = db.Column(db.String)
plain_text = db.Column(db.String)
projects = db.relationship("Project", backref="license")
users = db.relationship(
"License", secondary=user_licenses_table
) # Many to Many relationship
@staticmethod
def get_by_id(license_id: int):
""" Get license by id """
return License.query.get(license_id)
@classmethod
def create_from_dto(cls, dto: LicenseDTO) -> int:
""" Creates a new License class from dto """
new_license = cls()
new_license.name = dto.name
new_license.description = dto.description
new_license.plain_text = dto.plain_text
db.session.add(new_license)
db.session.commit()
return new_license.id
def update_license(self, dto: LicenseDTO):
""" Update existing license """
self.name = dto.name
self.description = dto.description
self.plain_text = dto.plain_text
db.session.commit()
def delete(self):
""" Deletes the current model from the DB """
db.session.delete(self)
db.session.commit()
@staticmethod
def get_all() -> LicenseListDTO:
""" Gets all licenses currently stored """
results = License.query.all()
dto = LicenseListDTO()
for result in results:
imagery_license = LicenseDTO()
imagery_license.license_id = result.id
imagery_license.name = result.name
imagery_license.description = result.description
imagery_license.plain_text = result.plain_text
dto.licenses.append(imagery_license)
return dto
def as_dto(self) -> LicenseDTO:
""" Get the license from the DB """
dto = LicenseDTO()
dto.license_id = self.id
dto.name = self.name
dto.description = self.description
dto.plain_text = self.plain_text
return dto