Skip to content

Commit

Permalink
Merge pull request #77 from w1tnessbtwwwww/backend
Browse files Browse the repository at this point in the history
Backend
  • Loading branch information
w1tnessbtwwwww authored Jan 7, 2025
2 parents 3e5407b + 40d61e1 commit af04258
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
"""empty message
Revision ID: ceb82bf36346
Revises: d4ace28995bb
Create Date: 2025-01-07 02:09:43.430747
"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = 'ceb82bf36346'
down_revision: Union[str, None] = 'd4ace28995bb'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint('email_verifications_userId_fkey', 'email_verifications', type_='foreignkey')
op.create_foreign_key(None, 'email_verifications', 'users', ['userId'], ['userId'], ondelete='CASCADE')
op.drop_constraint('user_profiles_userId_fkey', 'user_profiles', type_='foreignkey')
op.create_foreign_key(None, 'user_profiles', 'users', ['userId'], ['userId'], ondelete='CASCADE')
# ### end Alembic commands ###


def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(None, 'user_profiles', type_='foreignkey')
op.create_foreign_key('user_profiles_userId_fkey', 'user_profiles', 'users', ['userId'], ['userId'])
op.drop_constraint(None, 'email_verifications', type_='foreignkey')
op.create_foreign_key('email_verifications_userId_fkey', 'email_verifications', 'users', ['userId'], ['userId'])
# ### end Alembic commands ###
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,15 @@ class UserProfile(Base):
name: Mapped[str] = mapped_column(nullable=True)
patronymic: Mapped[str] = mapped_column(nullable=True)
birthdate: Mapped[Date] = mapped_column(Date, nullable=True, default=datetime.date.today())
userId: Mapped[UUID] = mapped_column(ForeignKey("users.userId"))
userId: Mapped[UUID] = mapped_column(ForeignKey("users.userId", ondelete='CASCADE'))

user: Mapped["User"] = relationship("User", back_populates="profile") # type: ignore

class EmailVerification(Base):
__tablename__ = "email_verifications"

verification_id: Mapped[UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4)
userId: Mapped[UUID] = mapped_column(ForeignKey("users.userId"), nullable=False)
userId: Mapped[UUID] = mapped_column(ForeignKey("users.userId", ondelete='CASCADE'), nullable=False)

verification_code: Mapped[str] = mapped_column(default=str(generate_confirmation_code()))
created_at: Mapped[datetime.datetime] = mapped_column(default=datetime.datetime.now())
Expand All @@ -109,7 +109,7 @@ class User(Base):
teams_lead: Mapped[List["Team"]] = relationship("Team", back_populates="leader")

team_invitations: Mapped[List["TeamInvitation"]] = relationship("TeamInvitation", back_populates="invited_user", foreign_keys="[TeamInvitation.invited_user_id]", cascade="all, delete-orphan")
organizations: Mapped[List["Organization"]] = relationship("Organization", back_populates="leader")
organizations: Mapped[List["Organization"]] = relationship("Organization", back_populates="leader", cascade="all, delete-orphan")

verification: Mapped["EmailVerification"] = relationship("EmailVerification", back_populates="user")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ async def create_team(self,
team = result.scalars().first()

if team:
return err("Team already exists")
return err("У вас уже есть такая команда.")


return success(value = await self.create(title=title, description=description, leaderId=leaderId, organizationId=organizationId))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ async def process_verification(self, userId: str, verification_code: str) -> Res


async def confirm_email(self, userId: str, code: str) -> Result[None]:
logger.info(str(datetime.datetime.now()))
try:
query = (
select(self.model)
Expand Down
21 changes: 12 additions & 9 deletions SpeedSolverBackend/SpeedSolverAPI/app/routing/team_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,22 @@


from app.database.database import get_session

from app.database.models.models import User
from app.schema.request.team.update_team import UpdateTeam
from app.schema.request.team.create_team import CreateTeam

from app.services.team_service import TeamService
from app.routing.security.jwtmanager import JWTManager, oauth2_scheme
from app.routing.security.jwtmanager import JWTManager, oauth2_scheme, get_current_user


from app.schema.request.team.create_team import CreateTeam
team_router = APIRouter(prefix="/team", tags=["Teams management"])


@team_router.post("/create", summary="Создать команду")
async def create_team(createRequest: CreateTeam, token: str = Depends(oauth2_scheme), session: AsyncSession = Depends(get_session)):
raise HTTPException(status_code=400, detail="Not implemented")

@team_router.put("/update", summary="Обновить команду")
async def update_team(updateRequest: UpdateTeam, token: str = Depends(oauth2_scheme), session: AsyncSession = Depends(get_session)):
raise HTTPException(status_code=400, detail="Not implemented")
@team_router.post("/create")
async def create_team(createRequest: CreateTeam, user: User = Depends(get_current_user), session: AsyncSession = Depends(get_session)):
creating = await TeamService(session).create_team(createRequest)
if not creating.success:
raise HTTPException(status_code=400, detail=creating.error)
return creating.value
17 changes: 5 additions & 12 deletions SpeedSolverBackend/SpeedSolverAPI/app/services/team_service.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@

from typing import Optional
from sqlalchemy.ext.asyncio import AsyncSession

from app.database.models.models import User
Expand All @@ -14,17 +15,9 @@ def __init__(self, session: AsyncSession):
self._session = session
self._repo = TeamRepository(session)

async def create_team(self, createRequest: CreateTeam, token: str):
user = await JWTManager().get_current_user(token, self._session)
return await self._repo.create_team(createRequest.name, createRequest.description, user.userId, createRequest.organizationId)
async def create_team(self, createRequest: CreateTeam, leaderId: str, organizationId: Optional[str] = None):
return await self._repo.create_team(createRequest.name, createRequest.description, leaderId, createRequest.organizationId)

async def update_team(self, updateRequest: UpdateTeam, token: str):
user = await JWTManager().get_current_user(token, self._session)
return await self._repo.update_team(
updateRequest.teamId,
user.userId,
updateRequest.new_name,
updateRequest.new_description,
updateRequest.new_leader_id
)
async def update_team(self, updateRequest: UpdateTeam):
...

0 comments on commit af04258

Please sign in to comment.