From 9cd703d29faa6a377f9bcf0918f8d714308fcde6 Mon Sep 17 00:00:00 2001 From: Jordweinstein Date: Mon, 25 Mar 2024 18:56:12 -0400 Subject: [PATCH 1/6] resource, resource_tag to/from models and programtype enum --- backend/entities/programtype_enum.py | 0 backend/entities/resource_entity.py | 30 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 backend/entities/programtype_enum.py diff --git a/backend/entities/programtype_enum.py b/backend/entities/programtype_enum.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/entities/resource_entity.py b/backend/entities/resource_entity.py index 4adea78..34c9ffb 100644 --- a/backend/entities/resource_entity.py +++ b/backend/entities/resource_entity.py @@ -33,6 +33,36 @@ class ResourceEntity(EntityBase): #relationships resourceTags: Mapped[list["ResourceTagEntity"]] = relationship(back_populates="resource", cascade="all,delete") + @classmethod + def from_model(cls, model: user_model) -> Self: + """ + Create a UserEntity from a User model. + + Args: + model (User): The model to create the entity from. + + Returns: + Self: The entity (not yet persisted). + """ + + return cls ( + id = model.id + created_at = model.created_at + name = model.name + summary = model.summary + link = model.link + program = model.program + ) + + def to_model(self) -> user_model: + return user_model ( + id = self.id + created_at = self.created_at + name = self.name + summary = self.summary + link = self.link + program = self.program + ) From 3bc603cb70fbbf8cf79da6a5de0c7e1cee514e03 Mon Sep 17 00:00:00 2001 From: Jordweinstein Date: Mon, 25 Mar 2024 19:03:21 -0400 Subject: [PATCH 2/6] commented out to/from model methods until we know model names --- backend/entities/resource_entity.py | 86 +++++++++++++------------ backend/entities/resource_tag_entity.py | 20 +++++- backend/entities/serivce_entity.py | 20 +++--- backend/entities/user_entity.py | 30 +++++---- 4 files changed, 90 insertions(+), 66 deletions(-) diff --git a/backend/entities/resource_entity.py b/backend/entities/resource_entity.py index 34c9ffb..d5eb75b 100644 --- a/backend/entities/resource_entity.py +++ b/backend/entities/resource_entity.py @@ -1,68 +1,72 @@ """ Defines the table for storing resources """ + # Import our mapped SQL types from SQLAlchemy from sqlalchemy import Integer, String, DateTime + # Import mapping capabilities from the SQLAlchemy ORM from sqlalchemy.orm import Mapped, mapped_column, relationship + # 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 Program -import enum +from sqlalchemy.types import Enum from sqlalchemy import Enum -class ProgramEnum(enum.Enum): - """ Determine program for Resource """ - DOMESTIC = 'DOMESTIC' - ECONOMIC = 'ECONOMIC' - COMMUNITY = 'COMMUNITY' +# Import self for to model +from typing import Self +from programtype_enum import ProgramType -class ResourceEntity(EntityBase): - #set table name +class ResourceEntity(EntityBase): + + # set table name __tablename__ = "resource" - #set fields + # set fields id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.now) name: Mapped[str] = mapped_column(String(32), nullable=False) summary: Mapped[str] = mapped_column(String(100), nullable=False) link: Mapped[str] = mapped_column(String, nullable=False) - program: Mapped[ProgramEnum] = mapped_column(Enum(ProgramEnum), nullable=False) + program: Mapped[ProgramType] = mapped_column(Enum(ProgramType), nullable=False) - #relationships - resourceTags: Mapped[list["ResourceTagEntity"]] = relationship(back_populates="resource", cascade="all,delete") + # relationships + resourceTags: Mapped[list["ResourceTagEntity"]] = relationship( + back_populates="resource", cascade="all,delete" + ) - @classmethod - def from_model(cls, model: user_model) -> Self: - """ - Create a UserEntity from a User model. + # + # @classmethod + # def from_model(cls, model: user_model) -> Self: + # """ + # Create a UserEntity from a User model. - Args: - model (User): The model to create the entity from. - - Returns: - Self: The entity (not yet persisted). - """ - - return cls ( - id = model.id - created_at = model.created_at - name = model.name - summary = model.summary - link = model.link - program = model.program - ) - - def to_model(self) -> user_model: - return user_model ( - id = self.id - created_at = self.created_at - name = self.name - summary = self.summary - link = self.link - program = self.program - ) + # Args: + # model (User): The model to create the entity from. + # Returns: + # Self: The entity (not yet persisted). + # """ + # return cls ( + # id = model.id, + # created_at = model.created_at, + # name = model.name, + # summary = model.summary, + # link = model.link, + # program = model.program, + # ) + # def to_model(self) -> user_model: + # return user_model ( + # id = self.id, + # created_at = self.created_at, + # name = self.name, + # summary = self.summary, + # link = self.link, + # program = self.program, + # ) diff --git a/backend/entities/resource_tag_entity.py b/backend/entities/resource_tag_entity.py index 3b7d198..061e17a 100644 --- a/backend/entities/resource_tag_entity.py +++ b/backend/entities/resource_tag_entity.py @@ -1,7 +1,7 @@ """ Defines the table for resource tags """ # Import our mapped SQL types from SQLAlchemy -from sqlalchemy import ForeignKey, Integer, String, DateTime, ARRAY +from sqlalchemy import ForeignKey, Integer, String, DateTime # Import mapping capabilities from the SQLAlchemy ORM from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -16,6 +16,9 @@ from datetime import datetime import enum from sqlalchemy import Enum +# Import self for to model +from typing import Self + class ResourceTagEntity(EntityBase): @@ -30,3 +33,18 @@ class ResourceTagEntity(EntityBase): # relationships resource: Mapped["ResourceEntity"] = relationship(back_populates="resourceTags") tag: Mapped["TagEntity"] = relationship(back_populates="resourceTags") + + # @classmethod + # def from_model (cls, model: resource_tag_model) -> Self: + # return cls ( + # id = model.id, + # resourceId = model.resourceId, + # tagId = model.tagId, + # ) + + # def to_model (self) -> resource_tag_model: + # return user_model( + # id = self.id, + # resourceId = self.resourceId, + # tagId = self.tagId, + # ) diff --git a/backend/entities/serivce_entity.py b/backend/entities/serivce_entity.py index 4e257ec..4616d7d 100644 --- a/backend/entities/serivce_entity.py +++ b/backend/entities/serivce_entity.py @@ -16,26 +16,24 @@ from datetime import datetime import enum from sqlalchemy import Enum - -class ProgramEnum(enum.Enum): - """Determine program for Service""" - DOMESTIC = "DOMESTIC" - ECONOMIC = "ECONOMIC" - COMMUNITY = "COMMUNITY" +# Import ProgramType enumeration +from programtype_enum import ProgramType class ResourceEntity(EntityBase): - #set table name + # set table name __tablename__ = "service" - #set fields + # set fields id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.now) name: Mapped[str] = mapped_column(String(32), nullable=False) summary: Mapped[str] = mapped_column(String(100), nullable=False) requirements: Mapped[list[str]] = mapped_column(ARRAY(String)) - program: Mapped[ProgramEnum] = mapped_column(Enum(ProgramEnum), nullable=False) + program: Mapped[ProgramType] = mapped_column(Enum(ProgramType), nullable=False) - #relationships - resourceTags: Mapped[list["ServiceTagEntity"]] = relationship(back_populates="service", cascade="all,delete") + # relationships + resourceTags: Mapped[list["ServiceTagEntity"]] = relationship( + back_populates="service", cascade="all,delete" + ) diff --git a/backend/entities/user_entity.py b/backend/entities/user_entity.py index c7b77f0..16c89ab 100644 --- a/backend/entities/user_entity.py +++ b/backend/entities/user_entity.py @@ -2,27 +2,28 @@ # 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 +from programtype_enumeration import ProgramType + class RoleEnum(enum.Enum): - """ Determine role for User """ - ADMIN = 'ADMIN' - EMPLOYEE = 'EMPLOYEE' - VOLUNTEER = 'VOLUNTEER' + """Determine role for User""" -class ProgramEnum(enum.Enum): - """Determine program for User """ - DOMESTIC = 'DOMESTIC' - ECONOMIC = 'ECONOMIC' - COMMUNITY = 'COMMUNITY' + ADMIN = "ADMIN" + EMPLOYEE = "EMPLOYEE" + VOLUNTEER = "VOLUNTEER" class UserEntity(EntityBase): @@ -34,10 +35,13 @@ 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[ProgramType]] = mapped_column( + ARRAY(Enum(ProgramType)), nullable=False + ) experience: Mapped[int] = mapped_column(Integer, nullable=False) group: Mapped[str] = mapped_column(String(50)) - From 8272cd06da69389d835ca58cb87ff2c4471f3ad9 Mon Sep 17 00:00:00 2001 From: Jordweinstein Date: Mon, 25 Mar 2024 19:19:52 -0400 Subject: [PATCH 3/6] program_type_enum.py --- backend/entities/program_type_enum.py | 7 +++++++ backend/entities/programtype_enum.py | 0 2 files changed, 7 insertions(+) create mode 100644 backend/entities/program_type_enum.py delete mode 100644 backend/entities/programtype_enum.py diff --git a/backend/entities/program_type_enum.py b/backend/entities/program_type_enum.py new file mode 100644 index 0000000..b304e86 --- /dev/null +++ b/backend/entities/program_type_enum.py @@ -0,0 +1,7 @@ +import enum + + +class ProgramType(enum.Enum): + ECONOMIC = "economic" + DOMESTIC = "domestic" + COMMUNITY = "community" diff --git a/backend/entities/programtype_enum.py b/backend/entities/programtype_enum.py deleted file mode 100644 index e69de29..0000000 From 8676a22ad2fc178ee52331f87ddb1af27f216d03 Mon Sep 17 00:00:00 2001 From: Jordweinstein Date: Mon, 25 Mar 2024 19:25:26 -0400 Subject: [PATCH 4/6] separated user enum into its own file --- backend/entities/user_enum.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 backend/entities/user_enum.py diff --git a/backend/entities/user_enum.py b/backend/entities/user_enum.py new file mode 100644 index 0000000..e69de29 From 03f2204cb3c4c9f88125ad3df8e6a266d2d56da9 Mon Sep 17 00:00:00 2001 From: Jordweinstein Date: Mon, 25 Mar 2024 19:29:37 -0400 Subject: [PATCH 5/6] separated user enum into its own file --- backend/entities/resource_entity.py | 2 +- backend/entities/serivce_entity.py | 2 +- backend/entities/user_entity.py | 13 +++---------- backend/entities/user_enum.py | 9 +++++++++ 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/backend/entities/resource_entity.py b/backend/entities/resource_entity.py index d5eb75b..da7b4e0 100644 --- a/backend/entities/resource_entity.py +++ b/backend/entities/resource_entity.py @@ -18,7 +18,7 @@ from sqlalchemy import Enum # Import self for to model from typing import Self -from programtype_enum import ProgramType +from backend.entities.program_type_enum import ProgramType class ResourceEntity(EntityBase): diff --git a/backend/entities/serivce_entity.py b/backend/entities/serivce_entity.py index 4616d7d..10325eb 100644 --- a/backend/entities/serivce_entity.py +++ b/backend/entities/serivce_entity.py @@ -17,7 +17,7 @@ import enum from sqlalchemy import Enum # Import ProgramType enumeration -from programtype_enum import ProgramType +from backend.entities.program_type_enum import ProgramType class ResourceEntity(EntityBase): diff --git a/backend/entities/user_entity.py b/backend/entities/user_entity.py index 16c89ab..8347d00 100644 --- a/backend/entities/user_entity.py +++ b/backend/entities/user_entity.py @@ -15,15 +15,8 @@ from datetime import datetime # Import enums for Role and Program import enum from sqlalchemy import Enum -from programtype_enumeration import ProgramType - - -class RoleEnum(enum.Enum): - """Determine role for User""" - - ADMIN = "ADMIN" - EMPLOYEE = "EMPLOYEE" - VOLUNTEER = "VOLUNTEER" +from program_type_enum import ProgramType +from user_enum import RoleType class UserEntity(EntityBase): @@ -38,7 +31,7 @@ class UserEntity(EntityBase): username: Mapped[str] = mapped_column( String(32), nullable=False, default="", unique=True ) - role: Mapped[RoleEnum] = mapped_column(Enum(RoleEnum), nullable=False) + role: Mapped[RoleType] = mapped_column(Enum(RoleType), nullable=False) email: Mapped[str] = mapped_column(String(50), nullable=False, unique=True) program: Mapped[list[ProgramType]] = mapped_column( ARRAY(Enum(ProgramType)), nullable=False diff --git a/backend/entities/user_enum.py b/backend/entities/user_enum.py index e69de29..f89e0b7 100644 --- a/backend/entities/user_enum.py +++ b/backend/entities/user_enum.py @@ -0,0 +1,9 @@ +import enum + + +class RoleType(enum.Enum): + """Determine role for User""" + + ADMIN = "ADMIN" + EMPLOYEE = "EMPLOYEE" + VOLUNTEER = "VOLUNTEER" From 42a2855839571e4e35ad0244f151e401b23db98a Mon Sep 17 00:00:00 2001 From: pmoharana-cmd Date: Mon, 25 Mar 2024 19:35:36 -0400 Subject: [PATCH 6/6] refactor enums --- backend/entities/__init__.py | 1 + backend/entities/program_enum.py | 10 ++++++++++ backend/entities/program_type_enum.py | 7 ------- backend/entities/resource_entity.py | 8 ++------ backend/entities/resource_tag_entity.py | 4 ---- backend/entities/serivce_entity.py | 8 ++------ backend/entities/user_entity.py | 12 +++++------- backend/entities/user_enum.py | 7 +++++-- 8 files changed, 25 insertions(+), 32 deletions(-) create mode 100644 backend/entities/program_enum.py delete mode 100644 backend/entities/program_type_enum.py diff --git a/backend/entities/__init__.py b/backend/entities/__init__.py index 4191027..c7df32e 100644 --- a/backend/entities/__init__.py +++ b/backend/entities/__init__.py @@ -1,2 +1,3 @@ from .entity_base import EntityBase from .sample_entity import SampleEntity +from .program_enum import ProgramEnum diff --git a/backend/entities/program_enum.py b/backend/entities/program_enum.py new file mode 100644 index 0000000..9876ee8 --- /dev/null +++ b/backend/entities/program_enum.py @@ -0,0 +1,10 @@ +from sqlalchemy.orm import Enum + + +class ProgramEnum(Enum): + ECONOMIC = "economic" + DOMESTIC = "domestic" + COMMUNITY = "community" + + def __init__(self): + super().__init__(name="program_enum") diff --git a/backend/entities/program_type_enum.py b/backend/entities/program_type_enum.py deleted file mode 100644 index b304e86..0000000 --- a/backend/entities/program_type_enum.py +++ /dev/null @@ -1,7 +0,0 @@ -import enum - - -class ProgramType(enum.Enum): - ECONOMIC = "economic" - DOMESTIC = "domestic" - COMMUNITY = "community" diff --git a/backend/entities/resource_entity.py b/backend/entities/resource_entity.py index da7b4e0..b38e625 100644 --- a/backend/entities/resource_entity.py +++ b/backend/entities/resource_entity.py @@ -12,13 +12,9 @@ from .entity_base import EntityBase # Import datetime for created_at type from datetime import datetime -# Import enums for Program -from sqlalchemy.types import Enum -from sqlalchemy import Enum - # Import self for to model from typing import Self -from backend.entities.program_type_enum import ProgramType +from backend.entities.program_enum import ProgramEnum class ResourceEntity(EntityBase): @@ -32,7 +28,7 @@ class ResourceEntity(EntityBase): name: Mapped[str] = mapped_column(String(32), nullable=False) summary: Mapped[str] = mapped_column(String(100), nullable=False) link: Mapped[str] = mapped_column(String, nullable=False) - program: Mapped[ProgramType] = mapped_column(Enum(ProgramType), nullable=False) + program: Mapped[ProgramEnum] = mapped_column(ProgramEnum, nullable=False) # relationships resourceTags: Mapped[list["ResourceTagEntity"]] = relationship( diff --git a/backend/entities/resource_tag_entity.py b/backend/entities/resource_tag_entity.py index 061e17a..bab1781 100644 --- a/backend/entities/resource_tag_entity.py +++ b/backend/entities/resource_tag_entity.py @@ -12,10 +12,6 @@ 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 for to model from typing import Self diff --git a/backend/entities/serivce_entity.py b/backend/entities/serivce_entity.py index 10325eb..f9c2575 100644 --- a/backend/entities/serivce_entity.py +++ b/backend/entities/serivce_entity.py @@ -12,12 +12,8 @@ from .entity_base import EntityBase # Import datetime for created_at type from datetime import datetime -# Import enums for Program -import enum -from sqlalchemy import Enum - # Import ProgramType enumeration -from backend.entities.program_type_enum import ProgramType +from backend.entities.program_enum import ProgramEnum class ResourceEntity(EntityBase): @@ -31,7 +27,7 @@ class ResourceEntity(EntityBase): name: Mapped[str] = mapped_column(String(32), nullable=False) summary: Mapped[str] = mapped_column(String(100), nullable=False) requirements: Mapped[list[str]] = mapped_column(ARRAY(String)) - program: Mapped[ProgramType] = mapped_column(Enum(ProgramType), nullable=False) + program: Mapped[ProgramEnum] = mapped_column(ProgramEnum, nullable=False) # relationships resourceTags: Mapped[list["ServiceTagEntity"]] = relationship( diff --git a/backend/entities/user_entity.py b/backend/entities/user_entity.py index 8347d00..3dbc107 100644 --- a/backend/entities/user_entity.py +++ b/backend/entities/user_entity.py @@ -13,10 +13,8 @@ from .entity_base import EntityBase from datetime import datetime # Import enums for Role and Program -import enum -from sqlalchemy import Enum -from program_type_enum import ProgramType -from user_enum import RoleType +from backend.entities.program_enum import ProgramEnum +from user_enum import RoleEnum class UserEntity(EntityBase): @@ -31,10 +29,10 @@ class UserEntity(EntityBase): username: Mapped[str] = mapped_column( String(32), nullable=False, default="", unique=True ) - role: Mapped[RoleType] = mapped_column(Enum(RoleType), nullable=False) + role: Mapped[RoleEnum] = mapped_column(RoleEnum, nullable=False) email: Mapped[str] = mapped_column(String(50), nullable=False, unique=True) - program: Mapped[list[ProgramType]] = mapped_column( - ARRAY(Enum(ProgramType)), nullable=False + program: Mapped[list[ProgramEnum]] = mapped_column( + ARRAY(ProgramEnum), nullable=False ) experience: Mapped[int] = mapped_column(Integer, nullable=False) group: Mapped[str] = mapped_column(String(50)) diff --git a/backend/entities/user_enum.py b/backend/entities/user_enum.py index f89e0b7..9ee1779 100644 --- a/backend/entities/user_enum.py +++ b/backend/entities/user_enum.py @@ -1,9 +1,12 @@ -import enum +from sqlalchemy.orm import Enum -class RoleType(enum.Enum): +class RoleEnum(Enum): """Determine role for User""" ADMIN = "ADMIN" EMPLOYEE = "EMPLOYEE" VOLUNTEER = "VOLUNTEER" + + def __init__(self): + super().__init__(name="role_enum")