mirror of
https://github.com/cssgunc/compass.git
synced 2025-04-06 20:50:17 -04:00
Fix bugs regarding enums and update field names
This commit is contained in:
parent
012f941da7
commit
6bce1cdc0a
|
@ -1,10 +1,9 @@
|
|||
from .entity_base import EntityBase
|
||||
from .sample_entity import SampleEntity
|
||||
from .tag_entity import TagEntity
|
||||
#from .user_entity import UserEntity
|
||||
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
|
||||
from .program_enum import ProgramEnum
|
||||
from .user_enum import RoleEnum
|
||||
from .program_enum import Program_Enum
|
||||
from .user_enum import Role_Enum
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
from sqlalchemy import Enum
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class ProgramEnum(Enum):
|
||||
ECONOMIC = 'ECONOMIC'
|
||||
DOMESTIC = 'DOMESTIC'
|
||||
COMMUNITY = 'COMMUNITY'
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(name="program_enum")
|
||||
class Program_Enum(Enum):
|
||||
ECONOMIC = "ECONOMIC"
|
||||
DOMESTIC = "DOMESTIC"
|
||||
COMMUNITY = "COMMUNITY"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
""" Defines the table for storing resources """
|
||||
|
||||
# Import our mapped SQL types from SQLAlchemy
|
||||
from sqlalchemy import Integer, String, DateTime, ARRAY
|
||||
from sqlalchemy import Integer, String, DateTime, Enum
|
||||
|
||||
# Import mapping capabilities from the SQLAlchemy ORM
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
|
@ -14,7 +14,7 @@ from datetime import datetime
|
|||
|
||||
# Import self for to model
|
||||
from typing import Self
|
||||
from backend.entities.program_enum import ProgramEnum
|
||||
from backend.entities.program_enum import Program_Enum
|
||||
|
||||
|
||||
class ResourceEntity(EntityBase):
|
||||
|
@ -28,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[list[ProgramEnum]] = mapped_column(ARRAY(ProgramEnum), nullable=False)
|
||||
program: Mapped[Program_Enum] = mapped_column(Enum(Program_Enum), nullable=False)
|
||||
# relationships
|
||||
resourceTags: Mapped[list["ResourceTagEntity"]] = relationship(
|
||||
back_populates="resource", cascade="all,delete"
|
||||
|
|
|
@ -19,7 +19,7 @@ from typing import Self
|
|||
class ResourceTagEntity(EntityBase):
|
||||
|
||||
# set table name to user in the database
|
||||
__tablename__ = "resourceTag"
|
||||
__tablename__ = "resource_tag"
|
||||
|
||||
# set fields or 'columns' for the user table
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
from sqlalchemy import create_engine, Column, Integer, String
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
from .entity_base import EntityBase
|
||||
|
||||
|
||||
class SampleEntity(EntityBase):
|
||||
__tablename__ = "persons"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
name: Mapped[str] = mapped_column(String, nullable=False)
|
||||
age: Mapped[int] = mapped_column(Integer)
|
||||
email: Mapped[str] = mapped_column(String, unique=True, nullable=False)
|
|
@ -13,18 +13,10 @@ from .entity_base import EntityBase
|
|||
from datetime import datetime
|
||||
|
||||
# Import enums for Program
|
||||
import enum
|
||||
from .program_enum import Program_Enum
|
||||
from sqlalchemy import Enum
|
||||
|
||||
|
||||
class ProgramEnum(enum.Enum):
|
||||
"""Determine program for Service"""
|
||||
|
||||
DOMESTIC = "DOMESTIC"
|
||||
ECONOMIC = "ECONOMIC"
|
||||
COMMUNITY = "COMMUNITY"
|
||||
|
||||
|
||||
class ServiceEntity(EntityBase):
|
||||
|
||||
# set table name
|
||||
|
@ -36,7 +28,7 @@ class ServiceEntity(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[ProgramEnum] = mapped_column(Enum(ProgramEnum), nullable=False)
|
||||
program: Mapped[Program_Enum] = mapped_column(Enum(Program_Enum), nullable=False)
|
||||
|
||||
# relationships
|
||||
serviceTags: Mapped[list["ServiceTagEntity"]] = relationship(
|
||||
|
|
|
@ -13,7 +13,7 @@ from .entity_base import EntityBase
|
|||
class ServiceTagEntity(EntityBase):
|
||||
|
||||
# set table name to user in the database
|
||||
__tablename__ = "serviceTag"
|
||||
__tablename__ = "service_tag"
|
||||
|
||||
# set fields or 'columns' for the user table
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
|
|
|
@ -1,26 +1,22 @@
|
|||
""" Defines the table for storing users """
|
||||
|
||||
# Import our mapped SQL types from SQLAlchemy
|
||||
from sqlalchemy import Integer, String, DateTime, ARRAY
|
||||
|
||||
from sqlalchemy import Integer, String, DateTime, ARRAY, Enum
|
||||
|
||||
# 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
|
||||
from .program_enum import ProgramEnum
|
||||
from .user_enum import RoleEnum
|
||||
from .program_enum import Program_Enum
|
||||
from .user_enum import Role_Enum
|
||||
|
||||
#Import models for User methods
|
||||
# Import models for User methods
|
||||
from ..models.user_model import User
|
||||
|
||||
from typing import Self
|
||||
|
@ -35,14 +31,17 @@ 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(String, nullable=False)
|
||||
username: Mapped[str] = mapped_column(
|
||||
String(32), nullable=False, default="", unique=True
|
||||
)
|
||||
role: Mapped[Role_Enum] = mapped_column(Enum(Role_Enum), nullable=False)
|
||||
email: Mapped[str] = mapped_column(String(50), nullable=False, unique=True)
|
||||
program: Mapped[list[str]] = mapped_column(ARRAY(String), nullable=False)
|
||||
program: Mapped[list[Program_Enum]] = mapped_column(
|
||||
ARRAY(Enum(Program_Enum)), 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:
|
||||
"""
|
||||
|
@ -58,32 +57,30 @@ class UserEntity(EntityBase):
|
|||
id=model.id,
|
||||
created_at=model.created_at,
|
||||
username=model.username,
|
||||
role=model.usertype,
|
||||
role=model.role,
|
||||
email=model.email,
|
||||
program=model.programtype,
|
||||
program=model.program,
|
||||
experience=model.experience,
|
||||
group=model.group,
|
||||
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.username,
|
||||
email= self.email ,
|
||||
experience= self.experience,
|
||||
group= self.group,
|
||||
programtype= self.program,
|
||||
usertype= self.role,
|
||||
created_at= self.created_at,
|
||||
email=self.email,
|
||||
experience=self.experience,
|
||||
group=self.group,
|
||||
program=self.program,
|
||||
role=self.role,
|
||||
created_at=self.created_at,
|
||||
)
|
||||
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
from sqlalchemy import Enum
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class RoleEnum(Enum):
|
||||
class Role_Enum(Enum):
|
||||
"""Determine role for User"""
|
||||
|
||||
ADMIN = 'ADMIN'
|
||||
EMPLOYEE = 'EMPLOYEE'
|
||||
VOLUNTEER = 'VOLUNTEER'
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(name="role_enum")
|
||||
ADMIN = "ADMIN"
|
||||
EMPLOYEE = "EMPLOYEE"
|
||||
VOLUNTEER = "VOLUNTEER"
|
||||
|
|
|
@ -1,17 +1,13 @@
|
|||
from pydantic import BaseModel, Field
|
||||
from enum import Enum
|
||||
from typing import List
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class ProgramTypeEnum(str, Enum):
|
||||
DOMESTIC = 'DOMESTIC'
|
||||
ECONOMIC = 'ECONOMIC'
|
||||
COMMUNITY = 'COMMUNITY'
|
||||
DOMESTIC = "DOMESTIC"
|
||||
ECONOMIC = "ECONOMIC"
|
||||
COMMUNITY = "COMMUNITY"
|
||||
|
||||
|
||||
class UserTypeEnum(str, Enum):
|
||||
ADMIN = 'ADMIN'
|
||||
EMPLOYEE = 'EMPLOYEE'
|
||||
VOLUNTEER = 'VOLUNTEER'
|
||||
ADMIN = "ADMIN"
|
||||
EMPLOYEE = "EMPLOYEE"
|
||||
VOLUNTEER = "VOLUNTEER"
|
||||
|
|
|
@ -12,6 +12,6 @@ class User(BaseModel):
|
|||
email: str = Field(..., description="The e-mail of the user")
|
||||
experience: int = Field(..., description="Years of Experience of the User")
|
||||
group: str
|
||||
programtype: List[str]
|
||||
usertype: str
|
||||
program: List[ProgramTypeEnum]
|
||||
role: UserTypeEnum
|
||||
created_at: Optional[datetime]
|
||||
|
|
|
@ -6,9 +6,7 @@ engine = create_engine(_engine_str(database=""), echo=True)
|
|||
"""Application-level SQLAlchemy database engine."""
|
||||
|
||||
with engine.connect() as connection:
|
||||
connection.execute(
|
||||
text("COMMIT")
|
||||
)
|
||||
connection.execute(text("COMMIT"))
|
||||
database = getenv("POSTGRES_DATABASE")
|
||||
stmt = text(f"CREATE DATABASE {database}")
|
||||
connection.execute(stmt)
|
||||
connection.execute(stmt)
|
||||
|
|
|
@ -6,9 +6,7 @@ engine = create_engine(_engine_str(database=""), echo=True)
|
|||
"""Application-level SQLAlchemy database engine."""
|
||||
|
||||
with engine.connect() as connection:
|
||||
connection.execute(
|
||||
text("COMMIT")
|
||||
)
|
||||
connection.execute(text("COMMIT"))
|
||||
database = getenv("POSTGRES_DATABASE")
|
||||
stmt = text(f"DROP DATABASE IF EXISTS {database}")
|
||||
connection.execute(stmt)
|
||||
connection.execute(stmt)
|
||||
|
|
|
@ -11,8 +11,7 @@ class UserService:
|
|||
def __init__(self, session: Session = Depends(db_session)):
|
||||
self._session = session
|
||||
|
||||
|
||||
def get_user_by_id(self, id: int) -> User:
|
||||
def get_user_by_id(self, id: int) -> User:
|
||||
"""
|
||||
Gets a user by id from the database
|
||||
|
||||
|
@ -23,36 +22,31 @@ class UserService:
|
|||
user_entity: UserEntity | None = self._session.scalar(query)
|
||||
|
||||
if user_entity is None:
|
||||
raise Exception(
|
||||
f"No user found with matching id: {id}"
|
||||
)
|
||||
raise Exception(f"No user found with matching id: {id}")
|
||||
|
||||
return user_entity.to_model()
|
||||
|
||||
|
||||
def all(self) -> list[User]:
|
||||
"""
|
||||
Returns a list of all Users
|
||||
|
||||
"""
|
||||
query = select(UserEntity)
|
||||
query = select(UserEntity)
|
||||
entities = self._session.scalars(query).all()
|
||||
|
||||
return [entity.to_model() for entity in entities]
|
||||
|
||||
|
||||
def create(self, user: User) -> User:
|
||||
|
||||
def create(self, user: User) -> User:
|
||||
"""
|
||||
Creates a new User Entity and adds to database
|
||||
|
||||
Args: User model
|
||||
|
||||
Returns: User model
|
||||
|
||||
|
||||
"""
|
||||
try:
|
||||
user_entity = self.get_user_by_id(user.id)
|
||||
user = self.get_user_by_id(user.id)
|
||||
except:
|
||||
# if does not exist, create new object
|
||||
user_entity = UserEntity.from_model(user)
|
||||
|
@ -62,5 +56,4 @@ class UserService:
|
|||
self._session.commit()
|
||||
finally:
|
||||
# return added object
|
||||
return user_entity.to_model()
|
||||
|
||||
return user
|
||||
|
|
|
@ -13,6 +13,7 @@ from .. import entities
|
|||
POSTGRES_DATABASE = f'{getenv("POSTGRES_DATABASE")}_test'
|
||||
POSTGRES_USER = getenv("POSTGRES_USER")
|
||||
|
||||
|
||||
def reset_database():
|
||||
engine = create_engine(_engine_str(database=""))
|
||||
with engine.connect() as connection:
|
||||
|
@ -50,9 +51,10 @@ def session(test_engine: Engine):
|
|||
finally:
|
||||
session.close()
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def setup_insert_data_fixture(session: Session):
|
||||
user_test_data.insert_fake_data(session)
|
||||
tag_test_data.insert_fake_data(session)
|
||||
session.commit()
|
||||
yield
|
||||
yield
|
||||
|
|
|
@ -13,13 +13,16 @@ from . import user_test_data
|
|||
|
||||
def test_create(user_svc: UserService):
|
||||
"""Test creating a user"""
|
||||
user1 = user_svc.create(newUser)
|
||||
user1 = user_svc.create(admin)
|
||||
|
||||
print(user1)
|
||||
assert user1 is not None
|
||||
assert user1.id is not None
|
||||
|
||||
def test_create_id_exists(user_svc: UserService):
|
||||
|
||||
def test_create_id_exists(user_svc: UserService):
|
||||
"""Test creating a user with id conflict"""
|
||||
user1 = user_svc.create(volunteer)
|
||||
user1 = user_svc.create(volunteer)
|
||||
assert user1 is not None
|
||||
assert user1.id is not None
|
||||
|
||||
|
@ -29,19 +32,15 @@ def test_get_all(user_svc: UserService):
|
|||
users = user_svc.all()
|
||||
assert len(users) == 3
|
||||
|
||||
|
||||
def test_get_user_by_id(user_svc: UserService):
|
||||
"""Test getting a user by an id"""
|
||||
user = user_svc.get_user_by_id(volunteer.id)
|
||||
assert user is not None
|
||||
assert user.id is not None
|
||||
|
||||
|
||||
def test_get_user_by_id_nonexistent(user_svc: UserService):
|
||||
"""Test getting a user by id that does not exist"""
|
||||
with pytest.raises(Exception):
|
||||
user_svc.get_by_id(5)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -17,9 +17,9 @@ volunteer = User(
|
|||
email="volunteer@compass.com",
|
||||
experience=1,
|
||||
group="volunteers",
|
||||
programtype=[programs.COMMUNITY.value],
|
||||
program=[programs.COMMUNITY],
|
||||
created_at=datetime.now(),
|
||||
usertype=UserTypeEnum.VOLUNTEER.value
|
||||
role=UserTypeEnum.VOLUNTEER,
|
||||
)
|
||||
|
||||
employee = User(
|
||||
|
@ -28,9 +28,9 @@ employee = User(
|
|||
email="employee@compass.com",
|
||||
experience=5,
|
||||
group="employees",
|
||||
programtype=[programs.DOMESTIC.value, programs.ECONOMIC.value],
|
||||
program=[programs.DOMESTIC, programs.ECONOMIC],
|
||||
created_at=datetime.now(),
|
||||
usertype=roles.EMPLOYEE.value,
|
||||
role=roles.EMPLOYEE,
|
||||
)
|
||||
|
||||
admin = User(
|
||||
|
@ -39,9 +39,13 @@ admin = User(
|
|||
email="admin@compass.com",
|
||||
experience=10,
|
||||
group="admin",
|
||||
programtype=[programs.ECONOMIC.value, programs.DOMESTIC.value, programs.COMMUNITY.value],
|
||||
program=[
|
||||
programs.ECONOMIC,
|
||||
programs.DOMESTIC,
|
||||
programs.COMMUNITY,
|
||||
],
|
||||
created_at=datetime.now(),
|
||||
usertype=roles.ADMIN.value,
|
||||
role=roles.ADMIN,
|
||||
)
|
||||
|
||||
newUser = User(
|
||||
|
@ -50,9 +54,9 @@ newUser = User(
|
|||
email="new@compass.com",
|
||||
experience=1,
|
||||
group="volunteer",
|
||||
programtype=[programs.ECONOMIC.value],
|
||||
program=[programs.ECONOMIC],
|
||||
created_at=datetime.now(),
|
||||
usertype=roles.VOLUNTEER.value
|
||||
role=roles.VOLUNTEER,
|
||||
)
|
||||
|
||||
users = [volunteer, employee, admin]
|
||||
|
@ -109,6 +113,6 @@ def fake_data_fixture(session: Session):
|
|||
Note:
|
||||
This function runs automatically due to the fixture property `autouse=True`.
|
||||
"""
|
||||
insert_fake_data(session)
|
||||
# insert_fake_data(session)
|
||||
session.commit()
|
||||
yield
|
||||
|
|
Loading…
Reference in New Issue
Block a user