Skip to content
Extraits de code Groupes Projets
Valider b0c1deaa rédigé par Brieuc Dubois's avatar Brieuc Dubois
Parcourir les fichiers

First implementation of studies #63

parent 966f5d84
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -206,6 +206,14 @@ def create_message_feedback( ...@@ -206,6 +206,14 @@ def create_message_feedback(
return db_message_feedback return db_message_feedback
def create_study(db: Session, study: schemas.StudyCreate):
db_study = models.Study(**study.dict())
db.add(db_study)
db.commit()
db.refresh(db_study)
return db_study
def create_test_typing(db: Session, test: schemas.TestTypingCreate, user: schemas.User): def create_test_typing(db: Session, test: schemas.TestTypingCreate, user: schemas.User):
db_test = models.TestTyping(user_id=user.id) db_test = models.TestTyping(user_id=user.id)
db.add(db_test) db.add(db_test)
......
...@@ -16,4 +16,5 @@ def get_db(): ...@@ -16,4 +16,5 @@ def get_db():
try: try:
yield db yield db
finally: finally:
db.close() db.close()
\ No newline at end of file
...@@ -66,6 +66,7 @@ v1Router = APIRouter(prefix="/v1") ...@@ -66,6 +66,7 @@ v1Router = APIRouter(prefix="/v1")
authRouter = APIRouter(prefix="/auth", tags=["auth"]) authRouter = APIRouter(prefix="/auth", tags=["auth"])
usersRouter = APIRouter(prefix="/users", tags=["users"]) usersRouter = APIRouter(prefix="/users", tags=["users"])
sessionsRouter = APIRouter(prefix="/sessions", tags=["sessions"]) sessionsRouter = APIRouter(prefix="/sessions", tags=["sessions"])
studyRouter = APIRouter(prefix="/studies", tags=["studies"])
websocketRouter = APIRouter(prefix="/ws", tags=["websocket"]) websocketRouter = APIRouter(prefix="/ws", tags=["websocket"])
webhookRouter = APIRouter(prefix="/webhooks", tags=["webhook"]) webhookRouter = APIRouter(prefix="/webhooks", tags=["webhook"])
surveyRouter = APIRouter(prefix="/surveys", tags=["surveys"]) surveyRouter = APIRouter(prefix="/surveys", tags=["surveys"])
...@@ -715,6 +716,17 @@ def propagate_presence( ...@@ -715,6 +716,17 @@ def propagate_presence(
return return
@studyRouter.post("/", status_code=status.HTTP_201_CREATED)
def study_create(
study: schemas.StudyCreate,
db: Session = Depends(get_db),
current_user: schemas.User = Depends(get_jwt_user),
):
if not check_user_level(current_user, models.UserType.ADMIN):
raise HTTPException(
status_code=401, detail="You do not have permission to create a study"
)
return crud.create_study(db, study).id
@websocketRouter.websocket("/sessions/{session_id}") @websocketRouter.websocket("/sessions/{session_id}")
async def websocket_session( async def websocket_session(
...@@ -1066,10 +1078,10 @@ def get_survey_responses( ...@@ -1066,10 +1078,10 @@ def get_survey_responses(
return crud.get_survey_responses(db, survey_id) return crud.get_survey_responses(db, survey_id)
v1Router.include_router(authRouter) v1Router.include_router(authRouter)
v1Router.include_router(usersRouter) v1Router.include_router(usersRouter)
v1Router.include_router(sessionsRouter) v1Router.include_router(sessionsRouter)
v1Router.include_router(studyRouter)
v1Router.include_router(websocketRouter) v1Router.include_router(websocketRouter)
v1Router.include_router(webhookRouter) v1Router.include_router(webhookRouter)
v1Router.include_router(surveyRouter) v1Router.include_router(surveyRouter)
......
...@@ -46,6 +46,7 @@ class User(Base): ...@@ -46,6 +46,7 @@ class User(Base):
birthdate = Column(Integer, default=None) birthdate = Column(Integer, default=None)
gender = Column(String, default=None) gender = Column(String, default=None)
calcom_link = Column(String, default="") calcom_link = Column(String, default="")
study_id = Column(Integer, ForeignKey("studies.id"), default=None)
sessions = relationship( sessions = relationship(
"Session", secondary="user_sessions", back_populates="users" "Session", secondary="user_sessions", back_populates="users"
...@@ -220,3 +221,13 @@ class SurveyResponse(Base): ...@@ -220,3 +221,13 @@ class SurveyResponse(Base):
selected_id = Column(Integer) selected_id = Column(Integer)
response_time = Column(Float) response_time = Column(Float)
text = Column(String) text = Column(String)
class Study(Base):
__tablename__ = "studies"
id = Column(Integer, primary_key=True, index=True)
title = Column(String)
description = Column(String)
start_date = Column(DateTime)
end_date = Column(DateTime)
chat_duration = Column(Integer)
...@@ -17,6 +17,7 @@ class User(BaseModel): ...@@ -17,6 +17,7 @@ class User(BaseModel):
birthdate: datetime.datetime | None birthdate: datetime.datetime | None
gender: str | None = None gender: str | None = None
calcom_link: str | None calcom_link: str | None
study_id: int | None = None
class Config: class Config:
from_attributes = True from_attributes = True
...@@ -35,6 +36,7 @@ class UserCreate(BaseModel): ...@@ -35,6 +36,7 @@ class UserCreate(BaseModel):
birthdate: datetime.datetime | None = None birthdate: datetime.datetime | None = None
gender: str | None = None gender: str | None = None
calcom_link: str | None = None calcom_link: str | None = None
study_id: int | None = None
class UserUpdate(BaseModel): class UserUpdate(BaseModel):
...@@ -50,6 +52,7 @@ class UserUpdate(BaseModel): ...@@ -50,6 +52,7 @@ class UserUpdate(BaseModel):
birthdate: datetime.datetime | None = None birthdate: datetime.datetime | None = None
gender: str | None = None gender: str | None = None
calcom_link: str | None = None calcom_link: str | None = None
study_id: int | None = None
class Config: class Config:
from_attributes = True from_attributes = True
...@@ -263,3 +266,20 @@ class SurveyResponse(BaseModel): ...@@ -263,3 +266,20 @@ class SurveyResponse(BaseModel):
selected_id: int selected_id: int
response_time: float response_time: float
text: str | None = None text: str | None = None
class Study(BaseModel):
id: int
title: str
description: str
start_date: datetime.datetime
end_date: datetime.datetime
chat_duration: int
class StudyCreate(BaseModel):
title: str
description: str
start_date: datetime.datetime
end_date: datetime.datetime
chat_duration: int = 30 * 60
...@@ -17,19 +17,13 @@ ...@@ -17,19 +17,13 @@
import { Icon, Envelope, Key, UserCircle } from 'svelte-hero-icons'; import { Icon, Envelope, Key, UserCircle } from 'svelte-hero-icons';
import Typingtest from '$lib/components/tests/typingtest.svelte'; import Typingtest from '$lib/components/tests/typingtest.svelte';
import AvailableTutors from '$lib/components/users/availableTutors.svelte'; import AvailableTutors from '$lib/components/users/availableTutors.svelte';
import { browser } from '$app/environment';
let current_step = 0; let current_step = 0;
$: message = ''; $: message = '';
//let checker: HTMLDivElement;
onMount(async () => { onMount(async () => {
/*checker.innerHTML =
'<label for="humanCheck" class="cursor-pointer label">' +
$t('register.humans') +
'<input type="checkbox" id="humanCheck" class="checkbox" required></label>';*/
const u = get(user); const u = get(user);
if (u == null) { if (u == null) {
...@@ -63,6 +57,12 @@ ...@@ -63,6 +57,12 @@
let target_language: string; let target_language: string;
let birthdate: string; let birthdate: string;
let gender: string; let gender: string;
let study_id: number | null = (() => {
if (!browser) return null;
let study_id_str = new URLSearchParams(window.location.search).get('study');
if (!study_id_str) return null;
return parseInt(study_id_str) || null;
})();
let timeslots = 0n; let timeslots = 0n;
$: filteredUsers = $users.filter((user) => { $: filteredUsers = $users.filter((user) => {
...@@ -77,10 +77,6 @@ ...@@ -77,10 +77,6 @@
message = $t('register.error.emptyFields'); message = $t('register.error.emptyFields');
return; return;
} }
/*if (checker.querySelector('input')?.checked === false) {
message = $t('register.error.humanity');
return;
}*/
if (password.length < 8) { if (password.length < 8) {
message = $t('register.error.passwordRules'); message = $t('register.error.passwordRules');
return; return;
...@@ -111,7 +107,8 @@ ...@@ -111,7 +107,8 @@
return; return;
} }
document.location.href = '/register'; if (study_id === null) document.location.href = '/register';
else document.location.href = `/register?study=${study_id}`;
message = 'OK'; message = 'OK';
} }
...@@ -134,7 +131,8 @@ ...@@ -134,7 +131,8 @@
home_language, home_language,
target_language, target_language,
birthdate, birthdate,
gender gender,
study_id
}); });
if (!res) { if (!res) {
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter