From f5de6015bf00a453a1286f1de4f03ca8a3de9828 Mon Sep 17 00:00:00 2001 From: emmalynf Date: Sat, 23 Mar 2024 16:00:10 -0400 Subject: [PATCH] Create to and from model methods for APIs for User and Tag Entities --- backend/entities/serivce_entity.py | 2 +- backend/entities/tag_entity.py | 30 ++++++++++++ backend/entities/user_entity.py | 79 +++++++++++++++++++++++++----- 3 files changed, 97 insertions(+), 14 deletions(-) diff --git a/backend/entities/serivce_entity.py b/backend/entities/serivce_entity.py index 4e257ec..0371484 100644 --- a/backend/entities/serivce_entity.py +++ b/backend/entities/serivce_entity.py @@ -38,4 +38,4 @@ class ResourceEntity(EntityBase): program: Mapped[ProgramEnum] = mapped_column(Enum(ProgramEnum), nullable=False) #relationships - resourceTags: Mapped[list["ServiceTagEntity"]] = relationship(back_populates="service", cascade="all,delete") + serivceTags: Mapped[list["ServiceTagEntity"]] = relationship(back_populates="service", cascade="all,delete") diff --git a/backend/entities/tag_entity.py b/backend/entities/tag_entity.py index 8106892..673b3ab 100644 --- a/backend/entities/tag_entity.py +++ b/backend/entities/tag_entity.py @@ -26,3 +26,33 @@ class TagEntity(EntityBase): resourceTags: Mapped[list["ResourceTagEntity"]] = relationship(back_populates="tag", cascade="all,delete") serviceTags: Mapped[list["ServiceTagEntity"]] = relationship(back_populates="tag", cascade="all,delete") + @classmethod + def from_model(cls, model: Tag) -> Self: + """ + Create a user entity from model + + Args: model (User): the model to create the entity from + + Returns: + self: The entity + """ + + return cls( + id=model.id, + content=model.id, + ) + + def to_model(self) -> Tag: + """ + Create a user model from entity + + Returns: + User: A User model for API usage + """ + + return Tag( + id=self.id, + content=self.id, + ) + + diff --git a/backend/entities/user_entity.py b/backend/entities/user_entity.py index c7b77f0..b1c0991 100644 --- a/backend/entities/user_entity.py +++ b/backend/entities/user_entity.py @@ -2,31 +2,42 @@ # Import our mapped SQL types from SQLAlchemy from sqlalchemy import Integer, String, DateTime, ARRAY + # Import mapping capabilities from the SQLAlchemy ORM from sqlalchemy.orm import Mapped, mapped_column + # Import the EntityBase that we are extending from .entity_base import EntityBase + # Import datetime for created_at type from datetime import datetime + # Import enums for Role and Program import enum from sqlalchemy import Enum +# Import self +from typing import Self + + class RoleEnum(enum.Enum): - """ Determine role for User """ - ADMIN = 'ADMIN' - EMPLOYEE = 'EMPLOYEE' - VOLUNTEER = 'VOLUNTEER' + """Determine role for User""" + + ADMIN = "ADMIN" + EMPLOYEE = "EMPLOYEE" + VOLUNTEER = "VOLUNTEER" + class ProgramEnum(enum.Enum): - """Determine program for User """ - DOMESTIC = 'DOMESTIC' - ECONOMIC = 'ECONOMIC' - COMMUNITY = 'COMMUNITY' + """Determine program for User""" + + DOMESTIC = "DOMESTIC" + ECONOMIC = "ECONOMIC" + COMMUNITY = "COMMUNITY" class UserEntity(EntityBase): - """Serves as the databse model for User table""" + """Serves as the database model for User table""" # set table name to user in the database __tablename__ = "user" @@ -34,10 +45,52 @@ class UserEntity(EntityBase): # set fields or 'columns' for the user table id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.now) - username: Mapped[str] = mapped_column(String(32), nullable=False, default="", unique=True) - role: Mapped[RoleEnum] = mapped_column(Enum(RoleEnum), nullable=False) + username: Mapped[str] = mapped_column( + String(32), nullable=False, default="", unique=True + ) + role: Mapped[RoleEnum] = mapped_column(Enum(RoleEnum), nullable=False) email: Mapped[str] = mapped_column(String(50), nullable=False, unique=True) - program: Mapped[list[ProgramEnum]] = mapped_column(ARRAY(Enum(ProgramEnum)), nullable=False) + program: Mapped[list[ProgramEnum]] = mapped_column( + ARRAY(Enum(ProgramEnum)), nullable=False + ) experience: Mapped[int] = mapped_column(Integer, nullable=False) group: Mapped[str] = mapped_column(String(50)) - + + @classmethod + def from_model(cls, model: User) -> Self: + """ + Create a user entity from model + + Args: model (User): the model to create the entity from + + Returns: + self: The entity + """ + + return cls( + id=model.id, + username=model.username, + role=model.role, + email=model.email, + program=model.program, + experience=model.experience, + group=model.group, + ) + + def to_model(self) -> User: + """ + Create a user model from entity + + Returns: + User: A User model for API usage + """ + + return User( + id=self.id, + username=self.id, + role=self.role, + email=self.email, + program=self.program, + experience=self.experience, + group=self.group, + )