feat: add onboarding_a column to onboarding table (#1340)

https://github.com/StanGirard/quivr/issues/1338

<img width="1215" alt="Screenshot 2023-10-05 at 18 05 30"
src="https://github.com/StanGirard/quivr/assets/63923024/67562c50-ddc1-4eaa-8b68-d374b2eb4b67">
This commit is contained in:
Mamadou DICKO 2023-10-06 12:37:12 +02:00 committed by GitHub
parent f13f08c5c5
commit 16cea2c86b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 56 additions and 34 deletions

View File

@ -12,14 +12,19 @@ class OnboardingUpdatableProperties(BaseModel):
"""Properties that can be received on onboarding update"""
onboarding_a: Optional[bool]
onboarding_b1: Optional[bool]
onboarding_b2: Optional[bool]
onboarding_b3: Optional[bool]
class Config:
extra = "forbid"
class GetOnboardingResponse(BaseModel):
class OnboardingStates(BaseModel):
"""Response when getting onboarding"""
onboarding_a: bool
onboarding_b1: bool
onboarding_b2: bool
onboarding_b3: bool
@ -29,13 +34,18 @@ class Onboarding(Repository):
def __init__(self, supabase_client):
self.db = supabase_client
def get_user_onboarding(self, user_id: UUID) -> GetOnboardingResponse | None:
def get_user_onboarding(self, user_id: UUID) -> OnboardingStates | None:
"""
Get user onboarding information by user_id
"""
onboarding_data = (
self.db.from_("onboarding")
.select("user_id", "onboarding_b1", "onboarding_b2", "onboarding_b3")
self.db.from_("onboardings")
.select(
"onboarding_a",
"onboarding_b1",
"onboarding_b2",
"onboarding_b3",
)
.filter("user_id", "eq", user_id)
.limit(1)
.execute()
@ -44,15 +54,19 @@ class Onboarding(Repository):
if onboarding_data == []:
return None
return GetOnboardingResponse(**onboarding_data[0])
return OnboardingStates(**onboarding_data[0])
def update_user_onboarding(
self, user_id: UUID, onboarding: OnboardingUpdatableProperties
) -> GetOnboardingResponse:
) -> OnboardingStates:
"""Update user onboarding information by user_id"""
update_data = {
key: value for key, value in onboarding.dict().items() if value is not None
}
response = (
self.db.from_("onboarding")
.update(onboarding.dict())
self.db.from_("onboardings")
.update(update_data)
.match({"user_id": user_id})
.execute()
.data
@ -61,4 +75,4 @@ class Onboarding(Repository):
if not response:
raise HTTPException(404, "User onboarding not updated")
return GetOnboardingResponse(**response[0])
return OnboardingStates(**response[0])

View File

@ -1,10 +0,0 @@
from uuid import UUID
from pydantic import BaseModel
class Onboardings(BaseModel):
user_id: UUID
onboarding_b1: bool
onboarding_b2: bool
onboarding_b3: bool

View File

@ -1,10 +1,10 @@
from uuid import UUID
from models.databases.supabase.onboarding import GetOnboardingResponse
from models.databases.supabase.onboarding import OnboardingStates
from models.settings import get_supabase_db
def get_user_onboarding(user_id: UUID) -> GetOnboardingResponse | None:
def get_user_onboarding(user_id: UUID) -> OnboardingStates | None:
"""
Get a user's onboarding status

View File

@ -1,7 +1,7 @@
from uuid import UUID
from models.databases.supabase.onboarding import (
GetOnboardingResponse,
OnboardingStates,
OnboardingUpdatableProperties,
)
from models.settings import get_supabase_db
@ -9,7 +9,7 @@ from models.settings import get_supabase_db
def update_user_onboarding(
user_id: UUID, onboarding: OnboardingUpdatableProperties
) -> GetOnboardingResponse:
) -> OnboardingStates:
"""Update user onboarding information by user_id"""
supabase_db = get_supabase_db()

View File

@ -4,7 +4,7 @@ from auth import (
)
from fastapi import APIRouter, Depends
from models.databases.supabase.onboarding import (
GetOnboardingResponse,
OnboardingStates,
OnboardingUpdatableProperties,
)
from models.user_identity import UserIdentity
@ -21,7 +21,7 @@ onboarding_router = APIRouter()
)
async def get_user_onboarding_handler(
current_user: UserIdentity = Depends(get_current_user),
) -> GetOnboardingResponse | None:
) -> OnboardingStates | None:
"""
Get user onboarding information for the current user
"""
@ -37,7 +37,7 @@ async def get_user_onboarding_handler(
async def update_user_onboarding_handler(
onboarding: OnboardingUpdatableProperties,
current_user: UserIdentity = Depends(get_current_user),
) -> GetOnboardingResponse:
) -> OnboardingStates:
"""
Update user onboarding information for the current user
"""

View File

@ -1,8 +1,8 @@
-- Create the onboarding table
CREATE TABLE IF NOT EXISTS onboardings (
user_id UUID NOT NULL REFERENCES auth.users (id),
onboarding_b1 BOOLEAN NOT NULL DEFAULT false,
onboarding_b2 BOOLEAN NOT NULL DEFAULT false,
onboarding_b3 BOOLEAN NOT NULL DEFAULT false,
onboarding_b1 BOOLEAN NOT NULL DEFAULT true,
onboarding_b2 BOOLEAN NOT NULL DEFAULT true,
onboarding_b3 BOOLEAN NOT NULL DEFAULT true,
PRIMARY KEY (user_id)
)

View File

@ -0,0 +1,17 @@
-- Check if onboarding_a column exists
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'onboardings' AND column_name = 'onboarding_a') THEN
ALTER TABLE onboardings ADD COLUMN onboarding_a BOOLEAN NOT NULL DEFAULT true;
END IF;
END $$;
COMMIT;
-- Update migrations table
INSERT INTO migrations (name)
SELECT '20231005170000_add_onboarding_a_to_onboarding_table'
WHERE NOT EXISTS (
SELECT 1 FROM migrations WHERE name = '20231005170000_add_onboarding_a_to_onboarding_table'
);

View File

@ -259,9 +259,10 @@ CREATE TABLE IF NOT EXISTS knowledge_vectors (
-- Create the onboarding table
CREATE TABLE IF NOT EXISTS onboardings (
user_id UUID NOT NULL REFERENCES auth.users (id),
onboarding_b1 BOOLEAN NOT NULL DEFAULT false,
onboarding_b2 BOOLEAN NOT NULL DEFAULT false,
onboarding_b3 BOOLEAN NOT NULL DEFAULT false,
onboarding_a BOOLEAN NOT NULL DEFAULT true,
onboarding_b1 BOOLEAN NOT NULL DEFAULT true,
onboarding_b2 BOOLEAN NOT NULL DEFAULT true,
onboarding_b3 BOOLEAN NOT NULL DEFAULT true,
PRIMARY KEY (user_id)
)
@ -279,9 +280,9 @@ CREATE POLICY "Access Quivr Storage 1jccrwz_2" ON storage.objects FOR UPDATE TO
CREATE POLICY "Access Quivr Storage 1jccrwz_3" ON storage.objects FOR DELETE TO anon USING (bucket_id = 'quivr');
INSERT INTO migrations (name)
SELECT '20231004150000_add_onboarding_table'
SELECT '20231005170000_add_onboarding_a_to_onboarding_table'
WHERE NOT EXISTS (
SELECT 1 FROM migrations WHERE name = '20231004150000_add_onboarding_table'
SELECT 1 FROM migrations WHERE name = '20231005170000_add_onboarding_a_to_onboarding_table'
);