mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
feat: init ug database models + svcs
This commit is contained in:
parent
e763f0933e
commit
e1b3b62e40
5 changed files with 233 additions and 0 deletions
16
apps/api/src/db/usergroup_ressources.py
Normal file
16
apps/api/src/db/usergroup_ressources.py
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
from typing import Optional
|
||||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlmodel import Field, SQLModel
|
||||
|
||||
|
||||
class UserGroupRessource(SQLModel, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
usergroup_id: int = Field(
|
||||
sa_column=Column(Integer, ForeignKey("usergroup.id", ondelete="CASCADE"))
|
||||
)
|
||||
ressource_uuid: str = ""
|
||||
org_id: int = Field(
|
||||
sa_column=Column(Integer, ForeignKey("organization.id", ondelete="CASCADE"))
|
||||
)
|
||||
creation_date: str = ""
|
||||
update_date: str = ""
|
||||
33
apps/api/src/db/usergroups.py
Normal file
33
apps/api/src/db/usergroups.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
from typing import Optional
|
||||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlmodel import Field, SQLModel
|
||||
|
||||
|
||||
class UserGroupBase(SQLModel):
|
||||
name: str
|
||||
description: str
|
||||
|
||||
class UserGroup(UserGroupBase, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
org_id: int = Field(
|
||||
sa_column=Column(Integer, ForeignKey("organization.id", ondelete="CASCADE"))
|
||||
)
|
||||
usergroup_uuid: str = ""
|
||||
creation_date: str = ""
|
||||
update_date: str = ""
|
||||
|
||||
class UserGroupCreate(UserGroupBase):
|
||||
org_id: int = Field(default=None, foreign_key="organization.id")
|
||||
pass
|
||||
|
||||
class UserGroupUpdate(UserGroupBase):
|
||||
name: str
|
||||
description: str
|
||||
|
||||
class UserGroupRead(UserGroupBase):
|
||||
id: int
|
||||
org_id: int = Field(default=None, foreign_key="organization.id")
|
||||
usergroup_uuid: str
|
||||
creation_date: str
|
||||
update_date: str
|
||||
pass
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
from fastapi import APIRouter, Depends
|
||||
from src.routers import usergroups
|
||||
from src.routers import blocks, dev, trail, users, auth, orgs, roles
|
||||
from src.routers.ai import ai
|
||||
from src.routers.courses import chapters, collections, courses, activities
|
||||
|
|
@ -12,6 +13,7 @@ v1_router = APIRouter(prefix="/api/v1")
|
|||
|
||||
# API Routes
|
||||
v1_router.include_router(users.router, prefix="/users", tags=["users"])
|
||||
v1_router.include_router(usergroups.router, prefix="/usergroups", tags=["usergroups"])
|
||||
v1_router.include_router(auth.router, prefix="/auth", tags=["auth"])
|
||||
v1_router.include_router(orgs.router, prefix="/orgs", tags=["orgs"])
|
||||
v1_router.include_router(roles.router, prefix="/roles", tags=["roles"])
|
||||
|
|
|
|||
68
apps/api/src/routers/usergroups.py
Normal file
68
apps/api/src/routers/usergroups.py
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
from typing import Literal
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request, UploadFile
|
||||
from sqlmodel import Session
|
||||
from src.services.users.users import delete_user_by_id
|
||||
from src.db.usergroups import UserGroupCreate, UserGroupRead, UserGroupUpdate
|
||||
from src.db.users import PublicUser
|
||||
from src.services.users.usergroups import create_usergroup, delete_usergroup_by_id, read_usergroup_by_id, update_usergroup_by_id
|
||||
from src.services.orgs.orgs import get_org_join_mechanism
|
||||
from src.security.auth import get_current_user
|
||||
from src.core.events.database import get_db_session
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post("/", response_model=UserGroupCreate, tags=["usergroups"])
|
||||
async def api_create_user_without_org(
|
||||
*,
|
||||
request: Request,
|
||||
db_session: Session = Depends(get_db_session),
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
usergroup_object: UserGroupCreate,
|
||||
) -> UserGroupRead:
|
||||
"""
|
||||
Create User
|
||||
"""
|
||||
return await create_usergroup(request, db_session, current_user, usergroup_object)
|
||||
|
||||
|
||||
@router.get("/{usergroup_id}", response_model=UserGroupRead, tags=["usergroups"])
|
||||
async def api_get_usergroup(
|
||||
*,
|
||||
request: Request,
|
||||
db_session: Session = Depends(get_db_session),
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
usergroup_id: int,
|
||||
) -> UserGroupRead:
|
||||
"""
|
||||
Get UserGroup
|
||||
"""
|
||||
return await read_usergroup_by_id(request, db_session, current_user, usergroup_id)
|
||||
|
||||
@router.put("/{usergroup_id}", response_model=UserGroupRead, tags=["usergroups"])
|
||||
async def api_update_usergroup(
|
||||
*,
|
||||
request: Request,
|
||||
db_session: Session = Depends(get_db_session),
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
usergroup_id: int,
|
||||
usergroup_object: UserGroupUpdate,
|
||||
) -> UserGroupRead:
|
||||
"""
|
||||
Update UserGroup
|
||||
"""
|
||||
return await update_usergroup_by_id(request, db_session, current_user, usergroup_id, usergroup_object)
|
||||
|
||||
@router.delete("/{usergroup_id}", tags=["usergroups"])
|
||||
async def api_delete_usergroup(
|
||||
*,
|
||||
request: Request,
|
||||
db_session: Session = Depends(get_db_session),
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
usergroup_id: int,
|
||||
) -> str:
|
||||
"""
|
||||
Delete UserGroup
|
||||
"""
|
||||
return await delete_usergroup_by_id(request, db_session, current_user, usergroup_id)
|
||||
114
apps/api/src/services/users/usergroups.py
Normal file
114
apps/api/src/services/users/usergroups.py
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
from datetime import datetime
|
||||
from uuid import uuid4
|
||||
from fastapi import HTTPException, Request
|
||||
from sqlmodel import Session, select
|
||||
from src.db.organizations import Organization
|
||||
from src.db.usergroups import UserGroup, UserGroupCreate, UserGroupRead, UserGroupUpdate
|
||||
from src.db.users import AnonymousUser, PublicUser
|
||||
|
||||
|
||||
async def create_usergroup(
|
||||
request: Request,
|
||||
db_session: Session,
|
||||
current_user: PublicUser | AnonymousUser,
|
||||
usergroup_create: UserGroupCreate,
|
||||
) -> UserGroupRead:
|
||||
|
||||
usergroup = UserGroup.from_orm(usergroup_create)
|
||||
|
||||
# Check if Organization exists
|
||||
statement = select(Organization).where(Organization.id == usergroup_create.org_id)
|
||||
result = db_session.exec(statement)
|
||||
|
||||
if not result.first():
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail="Organization does not exist",
|
||||
)
|
||||
|
||||
# Complete the object
|
||||
usergroup.usergroup_uuid = f"usergroup_{uuid4()}"
|
||||
usergroup.creation_date = str(datetime.now())
|
||||
usergroup.update_date = str(datetime.now())
|
||||
|
||||
# Save the object
|
||||
db_session.add(usergroup)
|
||||
db_session.commit()
|
||||
db_session.refresh(usergroup)
|
||||
|
||||
usergroup = UserGroupRead.from_orm(usergroup)
|
||||
|
||||
return usergroup
|
||||
|
||||
|
||||
async def read_usergroup_by_id(
|
||||
request: Request,
|
||||
db_session: Session,
|
||||
current_user: PublicUser | AnonymousUser,
|
||||
usergroup_id: int,
|
||||
) -> UserGroupRead:
|
||||
|
||||
statement = select(UserGroup).where(UserGroup.id == usergroup_id)
|
||||
usergroup = db_session.exec(statement).first()
|
||||
|
||||
if not usergroup:
|
||||
raise HTTPException(
|
||||
status_code=404,
|
||||
detail="UserGroup not found",
|
||||
)
|
||||
|
||||
usergroup = UserGroupRead.from_orm(usergroup)
|
||||
|
||||
return usergroup
|
||||
|
||||
|
||||
async def update_usergroup_by_id(
|
||||
request: Request,
|
||||
db_session: Session,
|
||||
current_user: PublicUser | AnonymousUser,
|
||||
usergroup_id: int,
|
||||
usergroup_update: UserGroupUpdate,
|
||||
) -> UserGroupRead:
|
||||
|
||||
statement = select(UserGroup).where(UserGroup.id == usergroup_id)
|
||||
usergroup = db_session.exec(statement).first()
|
||||
|
||||
if not usergroup:
|
||||
raise HTTPException(
|
||||
status_code=404,
|
||||
detail="UserGroup not found",
|
||||
)
|
||||
|
||||
usergroup.name = usergroup_update.name
|
||||
usergroup.description = usergroup_update.description
|
||||
usergroup.update_date = str(datetime.now())
|
||||
|
||||
db_session.add(usergroup)
|
||||
db_session.commit()
|
||||
db_session.refresh(usergroup)
|
||||
|
||||
usergroup = UserGroupRead.from_orm(usergroup)
|
||||
|
||||
return usergroup
|
||||
|
||||
|
||||
async def delete_usergroup_by_id(
|
||||
request: Request,
|
||||
db_session: Session,
|
||||
current_user: PublicUser | AnonymousUser,
|
||||
usergroup_id: int,
|
||||
) -> str:
|
||||
|
||||
statement = select(UserGroup).where(UserGroup.id == usergroup_id)
|
||||
usergroup = db_session.exec(statement).first()
|
||||
|
||||
if not usergroup:
|
||||
raise HTTPException(
|
||||
status_code=404,
|
||||
detail="UserGroup not found",
|
||||
)
|
||||
|
||||
db_session.delete(usergroup)
|
||||
db_session.commit()
|
||||
|
||||
return "UserGroup deleted successfully"
|
||||
Loading…
Add table
Add a link
Reference in a new issue