|
|
@@ -4,7 +4,7 @@ from uuid import UUID
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
|
from sqlalchemy import delete, select
|
|
|
from sqlalchemy.exc import IntegrityError
|
|
|
-from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
+from sqlalchemy.orm import Session
|
|
|
|
|
|
from app.api import deps
|
|
|
from app.models import Project, Slot, Sms, User
|
|
|
@@ -21,19 +21,19 @@ router = APIRouter()
|
|
|
@router.get("/projects", response_model=list[ProjectListResponse])
|
|
|
async def list_project(
|
|
|
current_user: User = Depends(deps.get_current_user),
|
|
|
- session: AsyncSession = Depends(deps.get_session),
|
|
|
+ session: Session = Depends(deps.get_session),
|
|
|
):
|
|
|
"""Get project_list"""
|
|
|
- results = await session.execute(select(Project))
|
|
|
+ results = session.execute(select(Project))
|
|
|
return results.scalars().all()
|
|
|
|
|
|
|
|
|
@router.get("/public-projects", response_model=list[ProjectListResponse])
|
|
|
async def list_public_project(
|
|
|
- session: AsyncSession = Depends(deps.get_session),
|
|
|
+ session: Session = Depends(deps.get_session),
|
|
|
):
|
|
|
"""Get the list of public projects"""
|
|
|
- results = await session.execute(select(Project).where(Project.is_public == True))
|
|
|
+ results = session.execute(select(Project).where(Project.is_public == True))
|
|
|
return results.scalars().all()
|
|
|
|
|
|
|
|
|
@@ -41,75 +41,72 @@ async def list_public_project(
|
|
|
async def create_project(
|
|
|
new_project: ProjectRequest,
|
|
|
current_user: User = Depends(deps.get_current_user),
|
|
|
- session: AsyncSession = Depends(deps.get_session),
|
|
|
+ session: Session = Depends(deps.get_session),
|
|
|
):
|
|
|
"""Create a new project"""
|
|
|
project = Project(**new_project.dict())
|
|
|
session.add(project)
|
|
|
try:
|
|
|
- await session.commit()
|
|
|
+ session.commit()
|
|
|
except IntegrityError as e:
|
|
|
raise HTTPException(422, "Project name already exist")
|
|
|
|
|
|
- await session.refresh(project)
|
|
|
+ session.refresh(project)
|
|
|
|
|
|
return ProjectResponse.from_orm(project)
|
|
|
|
|
|
|
|
|
-@router.get("/public-project/{id}", response_model=ProjectResponse)
|
|
|
+@router.get("/public-project/{project_id}", response_model=ProjectResponse)
|
|
|
async def get_public_project(
|
|
|
- id: UUID,
|
|
|
- session: AsyncSession = Depends(deps.get_session),
|
|
|
+ project_id: UUID,
|
|
|
+ session: Session = Depends(deps.get_session),
|
|
|
):
|
|
|
"""Get a project that is public"""
|
|
|
- result = await session.get(Project, id)
|
|
|
+ result = session.get(Project, project_id)
|
|
|
if (result is None) or not result.is_public:
|
|
|
- return HTTPException(status_code=404, detail="Project not found")
|
|
|
+ raise HTTPException(status_code=404, detail="Project not found")
|
|
|
return result
|
|
|
|
|
|
|
|
|
-@router.get("/project/{id}", response_model=ProjectResponse)
|
|
|
+@router.get("/project/{project_id}", response_model=ProjectResponse)
|
|
|
async def get_project(
|
|
|
- id: UUID,
|
|
|
- session: AsyncSession = Depends(deps.get_session),
|
|
|
+ project_id: UUID,
|
|
|
+ current_user: User = Depends(deps.get_current_user),
|
|
|
+ session: Session = Depends(deps.get_session),
|
|
|
):
|
|
|
"""Get a project"""
|
|
|
- project = await session.get(Project, id)
|
|
|
+ project = session.get(Project, project_id)
|
|
|
if project is None:
|
|
|
- return HTTPException(status_code=404, detail="Project not found")
|
|
|
- project.sms
|
|
|
- project.volunteers
|
|
|
- project.slots
|
|
|
- response = ProjectResponse.from_orm(project)
|
|
|
- return response
|
|
|
+ raise HTTPException(status_code=404, detail="Project not found")
|
|
|
+ return ProjectResponse.from_orm(project)
|
|
|
|
|
|
|
|
|
-@router.post("/project/{id}", response_model=ProjectListResponse)
|
|
|
+@router.post("/project/{project_id}", response_model=ProjectListResponse)
|
|
|
async def update_project(
|
|
|
- id: UUID,
|
|
|
+ project_id: UUID,
|
|
|
edit_project: ProjectRequest,
|
|
|
current_user: User = Depends(deps.get_current_user),
|
|
|
- session: AsyncSession = Depends(deps.get_session),
|
|
|
+ session: Session = Depends(deps.get_session),
|
|
|
):
|
|
|
"""Edit project"""
|
|
|
- p = await session.get(Project, id)
|
|
|
+ p = session.get(Project, project_id)
|
|
|
if p is None:
|
|
|
raise HTTPException(status_code=404, detail="Project not found")
|
|
|
p.name = edit_project.name
|
|
|
p.is_public = edit_project.is_public
|
|
|
- await session.commit()
|
|
|
+ session.commit()
|
|
|
return p
|
|
|
|
|
|
|
|
|
-@router.post("/project/{id}/import-gsheet", response_model=ProjectResponse)
|
|
|
+@router.post("/project/{project_id}/import-gsheet", response_model=ProjectResponse)
|
|
|
async def update_project_from_gsheet(
|
|
|
- id: UUID,
|
|
|
+ project_id: UUID,
|
|
|
gsheet: ProjectImportGsheetRequest,
|
|
|
current_user: User = Depends(deps.get_current_user),
|
|
|
- session: AsyncSession = Depends(deps.get_session),
|
|
|
+ session: Session = Depends(deps.get_session),
|
|
|
):
|
|
|
"""Edit project name"""
|
|
|
- p = await session.get(Project, id)
|
|
|
+ p = session.get(Project, project_id)
|
|
|
if p is None:
|
|
|
raise HTTPException(status_code=404, detail="Project not found")
|
|
|
url = gsheet.sheet_url
|
|
|
@@ -117,12 +114,12 @@ async def update_project_from_gsheet(
|
|
|
return p
|
|
|
|
|
|
|
|
|
-@router.post("/project/{id}/create-all-sms", response_model=list[SMSResponse])
|
|
|
+@router.post("/project/{project_id}/create-all-sms", response_model=list[SMSResponse])
|
|
|
async def create_sms_batch(
|
|
|
- id: UUID,
|
|
|
+ project_id: UUID,
|
|
|
sms_batch: ProjectSMSBatchRequest,
|
|
|
current_user: User = Depends(deps.get_current_user),
|
|
|
- session: AsyncSession = Depends(deps.get_session),
|
|
|
+ session: Session = Depends(deps.get_session),
|
|
|
):
|
|
|
"""Create SMS based on a template and the list of slots and volunteer associated to the project
|
|
|
|
|
|
@@ -135,11 +132,11 @@ async def create_sms_batch(
|
|
|
- {name} volunteer.surname
|
|
|
|
|
|
"""
|
|
|
- p = await session.get(Project, id)
|
|
|
+ p = session.get(Project, project_id)
|
|
|
if p is None:
|
|
|
raise HTTPException(status_code=404, detail="Project not found")
|
|
|
# Get all slots
|
|
|
- slots = await session.execute(select(Slot).where(Slot.project_id == id))
|
|
|
+ slots = session.execute(select(Slot).where(Slot.project_id == project_id))
|
|
|
sms_list = []
|
|
|
for slot in slots.scalars():
|
|
|
# Replace the slot placeholder by their value
|
|
|
@@ -156,7 +153,7 @@ async def create_sms_batch(
|
|
|
"{prenom}", volunteer.name
|
|
|
).replace("{nom}", volunteer.surname)
|
|
|
sms = Sms(
|
|
|
- project_id=id,
|
|
|
+ project_id=project_id,
|
|
|
volunteer_id=volunteer.id,
|
|
|
content=personalized_content,
|
|
|
phone_number=volunteer.phone_number,
|
|
|
@@ -164,17 +161,17 @@ async def create_sms_batch(
|
|
|
)
|
|
|
sms_list.append(sms)
|
|
|
session.add_all(sms_list)
|
|
|
- await session.commit()
|
|
|
+ session.commit()
|
|
|
|
|
|
return sms_list
|
|
|
|
|
|
|
|
|
-@router.delete("/project/{id}")
|
|
|
+@router.delete("/project/{project_id}")
|
|
|
async def delete_project(
|
|
|
id: UUID,
|
|
|
current_user: User = Depends(deps.get_current_user),
|
|
|
- session: AsyncSession = Depends(deps.get_session),
|
|
|
+ session: Session = Depends(deps.get_session),
|
|
|
):
|
|
|
"""Delete project"""
|
|
|
- await session.execute(delete(Project).where(Project.id == id))
|
|
|
- await session.commit()
|
|
|
+ session.execute(delete(Project).where(Project.id == project_id))
|
|
|
+ session.commit()
|