diff --git a/apps/api/migrations/orgconfigs/v1_1.py b/apps/api/migrations/orgconfigs/v1_1.py new file mode 100644 index 00000000..e3a3fabb --- /dev/null +++ b/apps/api/migrations/orgconfigs/v1_1.py @@ -0,0 +1,14 @@ +def migrate_to_v1_1(v1_config): + # Start by copying the existing configuration + v1_1_config = v1_config.copy() + + # Update the config version + v1_1_config["config_version"] = "1.1" + + # Add the new 'cloud' object at the end + v1_1_config['cloud'] = { + "plan": "free", + "custom_domain": False + } + + return v1_1_config diff --git a/apps/api/src/db/organization_config.py b/apps/api/src/db/organization_config.py index 067e42e7..54f45484 100644 --- a/apps/api/src/db/organization_config.py +++ b/apps/api/src/db/organization_config.py @@ -83,12 +83,18 @@ class OrgGeneralConfig(BaseModel): color: str = "normal" watermark: bool = True +# Cloud +class OrgCloudConfig(BaseModel): + plan: Literal["free", "standard", "pro"] = "free" + custom_domain: bool = False + # Main Config class OrganizationConfigBase(BaseModel): - config_version: str = "1.0" + config_version: str = "1.1" general: OrgGeneralConfig features: OrgFeatureConfig + cloud: OrgCloudConfig class OrganizationConfig(SQLModel, table=True): diff --git a/apps/api/src/routers/dev.py b/apps/api/src/routers/dev.py index 73e0fe92..5ce8c1b8 100644 --- a/apps/api/src/routers/dev.py +++ b/apps/api/src/routers/dev.py @@ -2,6 +2,7 @@ from fastapi import APIRouter, Depends from sqlmodel import Session, select from config.config import get_learnhouse_config from migrations.orgconfigs.v0tov1 import migrate_v0_to_v1 +from migrations.orgconfigs.v1_1 import migrate_to_v1_1 from src.core.events.database import get_db_session from src.db.organization_config import OrganizationConfig @@ -32,3 +33,22 @@ async def migrate( db_session.commit() return {"message": "Migration successful"} + + +@router.post("/migrate_orgconfig_v1_to_v1.1") +async def migratev1_1( + db_session: Session = Depends(get_db_session), +): + """ + Migrate organization config from v0 to v1 + """ + statement = select(OrganizationConfig) + result = db_session.exec(statement) + + for orgConfig in result: + orgConfig.config = migrate_to_v1_1(orgConfig.config) + + db_session.add(orgConfig) + db_session.commit() + + return {"message": "Migration successful"} \ No newline at end of file diff --git a/apps/api/src/services/install/install.py b/apps/api/src/services/install/install.py index 0b124df8..4a8bb0d2 100644 --- a/apps/api/src/services/install/install.py +++ b/apps/api/src/services/install/install.py @@ -14,6 +14,7 @@ from src.db.organization_config import ( CourseOrgConfig, DiscussionOrgConfig, MemberOrgConfig, + OrgCloudConfig, OrgFeatureConfig, OrgGeneralConfig, OrganizationConfig, @@ -350,6 +351,10 @@ def install_create_organization(org_object: OrganizationCreate, db_session: Sess collaboration=CollaborationOrgConfig(enabled=True, limit=0), api=APIOrgConfig(enabled=True, limit=0), ), + cloud=OrgCloudConfig( + plan='free', + custom_domain=False + ) ) org_config = json.loads(org_config.json()) diff --git a/apps/api/src/services/orgs/orgs.py b/apps/api/src/services/orgs/orgs.py index 454ad8bb..57e6e73a 100644 --- a/apps/api/src/services/orgs/orgs.py +++ b/apps/api/src/services/orgs/orgs.py @@ -13,6 +13,7 @@ from src.db.organization_config import ( CourseOrgConfig, DiscussionOrgConfig, MemberOrgConfig, + OrgCloudConfig, OrgFeatureConfig, OrgGeneralConfig, OrganizationConfig, @@ -178,6 +179,10 @@ async def create_org( collaboration=CollaborationOrgConfig(enabled=True, limit=0), api=APIOrgConfig(enabled=True, limit=0), ), + cloud=OrgCloudConfig( + plan='free', + custom_domain=False + ) ) org_config = json.loads(org_config.json())