From f5de6015bf00a453a1286f1de4f03ca8a3de9828 Mon Sep 17 00:00:00 2001 From: emmalynf Date: Sat, 23 Mar 2024 16:00:10 -0400 Subject: [PATCH 1/5] 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, + ) From d9ae511debb0a66e0092e278f60f37310562e064 Mon Sep 17 00:00:00 2001 From: emmalynf Date: Mon, 25 Mar 2024 18:41:11 -0400 Subject: [PATCH 2/5] Fix service entity typos --- backend/entities/{serivce_entity.py => service_entity.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename backend/entities/{serivce_entity.py => service_entity.py} (95%) diff --git a/backend/entities/serivce_entity.py b/backend/entities/service_entity.py similarity index 95% rename from backend/entities/serivce_entity.py rename to backend/entities/service_entity.py index 0371484..c3c4d96 100644 --- a/backend/entities/serivce_entity.py +++ b/backend/entities/service_entity.py @@ -38,4 +38,4 @@ class ResourceEntity(EntityBase): program: Mapped[ProgramEnum] = mapped_column(Enum(ProgramEnum), nullable=False) #relationships - serivceTags: Mapped[list["ServiceTagEntity"]] = relationship(back_populates="service", cascade="all,delete") + serviceTags: Mapped[list["ServiceTagEntity"]] = relationship(back_populates="service", cascade="all,delete") From ea8c60f271056601a5926e8c5bbce42ee6cf13cc Mon Sep 17 00:00:00 2001 From: emmalynf Date: Mon, 25 Mar 2024 19:08:38 -0400 Subject: [PATCH 3/5] Fix all Service and Service Tag typos and import entities to init --- backend/entities/__init__.py | 7 +++++++ backend/entities/service_entity.py | 2 +- backend/entities/service_tag_entity.py | 2 +- backend/entities/tag_entity.py | 14 +++++++++----- backend/entities/user_entity.py | 10 ++++++---- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/backend/entities/__init__.py b/backend/entities/__init__.py index 4191027..dc998ad 100644 --- a/backend/entities/__init__.py +++ b/backend/entities/__init__.py @@ -1,2 +1,9 @@ from .entity_base import EntityBase from .sample_entity import SampleEntity +from .tag_entity import TagEntity +from .user_entity import UserEntity +from .resource_entity import ResourceEntity +from .resource_tag_entity import ResourceTagEntity +from .service_entity import ServiceEntity +from .service_tag_entity import ServiceTagEntity + diff --git a/backend/entities/service_entity.py b/backend/entities/service_entity.py index c3c4d96..c52f857 100644 --- a/backend/entities/service_entity.py +++ b/backend/entities/service_entity.py @@ -24,7 +24,7 @@ class ProgramEnum(enum.Enum): COMMUNITY = "COMMUNITY" -class ResourceEntity(EntityBase): +class ServiceEntity(EntityBase): #set table name __tablename__ = "service" diff --git a/backend/entities/service_tag_entity.py b/backend/entities/service_tag_entity.py index 689d675..a352935 100644 --- a/backend/entities/service_tag_entity.py +++ b/backend/entities/service_tag_entity.py @@ -10,7 +10,7 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship from .entity_base import EntityBase -class ResourceTagEntity(EntityBase): +class ServiceTagEntity(EntityBase): # set table name to user in the database __tablename__ = "serviceTag" diff --git a/backend/entities/tag_entity.py b/backend/entities/tag_entity.py index 673b3ab..e61f1ee 100644 --- a/backend/entities/tag_entity.py +++ b/backend/entities/tag_entity.py @@ -26,33 +26,37 @@ 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 b1c0991..5f326b6 100644 --- a/backend/entities/user_entity.py +++ b/backend/entities/user_entity.py @@ -56,16 +56,17 @@ class UserEntity(EntityBase): 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, @@ -78,12 +79,12 @@ class UserEntity(EntityBase): ) def to_model(self) -> User: - """ + Create a user model from entity Returns: User: A User model for API usage - """ + return User( id=self.id, @@ -94,3 +95,4 @@ class UserEntity(EntityBase): experience=self.experience, group=self.group, ) + """ From 52d426851bd64f7cf54e57838b24a66f704e5412 Mon Sep 17 00:00:00 2001 From: emmalynf Date: Mon, 25 Mar 2024 19:12:37 -0400 Subject: [PATCH 4/5] Fix Other Service Tag Typo --- backend/entities/resource_tag_entity.py | 4 ++-- backend/entities/service_tag_entity.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/entities/resource_tag_entity.py b/backend/entities/resource_tag_entity.py index 3b7d198..cdabc7e 100644 --- a/backend/entities/resource_tag_entity.py +++ b/backend/entities/resource_tag_entity.py @@ -24,8 +24,8 @@ class ResourceTagEntity(EntityBase): # set fields or 'columns' for the user table id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) - resourceId: Mapped[int] = mapped_column(ForeignKey("event.id"), primary_key=True) - tagId: Mapped[int] = mapped_column(ForeignKey("user.pid"), primary_key=True) + resourceId: Mapped[int] = mapped_column(ForeignKey("resource.id"), primary_key=True) + tagId: Mapped[int] = mapped_column(ForeignKey("tag.id"), primary_key=True) # relationships resource: Mapped["ResourceEntity"] = relationship(back_populates="resourceTags") diff --git a/backend/entities/service_tag_entity.py b/backend/entities/service_tag_entity.py index a352935..d54c953 100644 --- a/backend/entities/service_tag_entity.py +++ b/backend/entities/service_tag_entity.py @@ -17,8 +17,8 @@ class ServiceTagEntity(EntityBase): # set fields or 'columns' for the user table id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) - sericeId: Mapped[int] = mapped_column(ForeignKey("event.id"), primary_key=True) - tagId: Mapped[int] = mapped_column(ForeignKey("user.pid"), primary_key=True) + serviceId: Mapped[int] = mapped_column(ForeignKey("service.id"), primary_key=True) + tagId: Mapped[int] = mapped_column(ForeignKey("tag.id"), primary_key=True) # relationships service: Mapped["ServiceEntity"] = relationship(back_populates="resourceTags") From ccde19f3f9d54adeb59315e1b2699c0feeabc9b9 Mon Sep 17 00:00:00 2001 From: emmalynf Date: Mon, 25 Mar 2024 19:16:13 -0400 Subject: [PATCH 5/5] Fix primary keys --- backend/entities/resource_tag_entity.py | 4 ++-- backend/entities/service_tag_entity.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/entities/resource_tag_entity.py b/backend/entities/resource_tag_entity.py index cdabc7e..2028fd9 100644 --- a/backend/entities/resource_tag_entity.py +++ b/backend/entities/resource_tag_entity.py @@ -24,8 +24,8 @@ class ResourceTagEntity(EntityBase): # set fields or 'columns' for the user table id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) - resourceId: Mapped[int] = mapped_column(ForeignKey("resource.id"), primary_key=True) - tagId: Mapped[int] = mapped_column(ForeignKey("tag.id"), primary_key=True) + resourceId: Mapped[int] = mapped_column(ForeignKey("resource.id")) + tagId: Mapped[int] = mapped_column(ForeignKey("tag.id")) # relationships resource: Mapped["ResourceEntity"] = relationship(back_populates="resourceTags") diff --git a/backend/entities/service_tag_entity.py b/backend/entities/service_tag_entity.py index d54c953..c1dbdc7 100644 --- a/backend/entities/service_tag_entity.py +++ b/backend/entities/service_tag_entity.py @@ -17,8 +17,8 @@ class ServiceTagEntity(EntityBase): # set fields or 'columns' for the user table id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) - serviceId: Mapped[int] = mapped_column(ForeignKey("service.id"), primary_key=True) - tagId: Mapped[int] = mapped_column(ForeignKey("tag.id"), primary_key=True) + serviceId: Mapped[int] = mapped_column(ForeignKey("service.id")) + tagId: Mapped[int] = mapped_column(ForeignKey("tag.id")) # relationships service: Mapped["ServiceEntity"] = relationship(back_populates="resourceTags")