diff --git a/api/controllers/console/admin.py b/api/controllers/console/admin.py index ece0582a8b..55d50876cf 100644 --- a/api/controllers/console/admin.py +++ b/api/controllers/console/admin.py @@ -237,16 +237,32 @@ class InsertExploreBanner(Resource): @only_edition_cloud def post(self): parser = reqparse.RequestParser() - parser.add_argument("content", type=str, required=True, nullable=False, location="json") + parser.add_argument("category", type=str, required=True, nullable=False, location="json") + parser.add_argument("title", type=str, required=True, nullable=False, location="json") + parser.add_argument("description", type=str, required=True, nullable=False, location="json") + parser.add_argument("img-src", type=str, required=True, nullable=False, location="json") + + parser.add_argument("language", type=str, required=True, nullable=False, location="json") parser.add_argument("link", type=str, required=True, nullable=False, location="json") parser.add_argument("sort", type=int, required=True, nullable=False, location="json") args = parser.parse_args() + content = { + "category": args["category"], + "title": args["title"], + "description": args["description"], + "img-src": args["img-src"], + } + + if not args["language"]: + args["language"] = "en-US" + banner = ExporleBanner( - content=args["content"], + content=content, link=args["link"], sort=args["sort"], + language=args["language"], ) db.session.add(banner) db.session.commit() diff --git a/api/controllers/console/explore/banner.py b/api/controllers/console/explore/banner.py index 813644d149..0daf34d01d 100644 --- a/api/controllers/console/explore/banner.py +++ b/api/controllers/console/explore/banner.py @@ -1,3 +1,4 @@ +from flask import request from flask_restx import Resource from controllers.console import api @@ -12,8 +13,11 @@ class BannerApi(Resource): @explore_banner_enabled def get(self): """Get banner list.""" + language = request.args.get("language", "en-US") + banners = ( - db.session.query(ExporleBanner).where(ExporleBanner.status == "enabled").order_by(ExporleBanner.sort).all() + db.session.query(ExporleBanner).where(ExporleBanner.status == "enabled", + ExporleBanner.language == language).order_by(ExporleBanner.sort).all() ) # Convert banners to serializable format diff --git a/api/migrations/versions/2025_09_19_1442-1b435d90db42_add_table_explore_banner_and_trial.py b/api/migrations/versions/2025_10_11_1442-3993fd9e9c2f_add_table_explore_banner_and_trial.py similarity index 82% rename from api/migrations/versions/2025_09_19_1442-1b435d90db42_add_table_explore_banner_and_trial.py rename to api/migrations/versions/2025_10_11_1442-3993fd9e9c2f_add_table_explore_banner_and_trial.py index 6d20273c5d..46267992f4 100644 --- a/api/migrations/versions/2025_09_19_1442-1b435d90db42_add_table_explore_banner_and_trial.py +++ b/api/migrations/versions/2025_10_11_1442-3993fd9e9c2f_add_table_explore_banner_and_trial.py @@ -1,8 +1,8 @@ """add table explore banner and trial -Revision ID: 1b435d90db42 -Revises: cf7c38a32b2d -Create Date: 2025-09-19 14:42:58.416649 +Revision ID: 3993fd9e9c2f +Revises: 68519ad5cd18 +Create Date: 2025-10-11 14:42:01.954865 """ from alembic import op @@ -11,8 +11,8 @@ import sqlalchemy as sa # revision identifiers, used by Alembic. -revision = '1b435d90db42' -down_revision = 'cf7c38a32b2d' +revision = '3993fd9e9c2f' +down_revision = '68519ad5cd18' branch_labels = None depends_on = None @@ -39,6 +39,7 @@ def upgrade(): sa.Column('sort', sa.Integer(), nullable=False), sa.Column('status', sa.String(length=255), server_default=sa.text("'enabled'::character varying"), nullable=False), sa.Column('created_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False), + sa.Column('language', sa.String(length=255), server_default=sa.text("'en-US'::character varying"), nullable=False), sa.PrimaryKeyConstraint('id', name='exporler_banner_pkey') ) op.create_table('trial_apps', @@ -54,6 +55,12 @@ def upgrade(): batch_op.create_index('trial_app_app_id_idx', ['app_id'], unique=False) batch_op.create_index('trial_app_tenant_id_idx', ['tenant_id'], unique=False) + with op.batch_alter_table('datasource_providers', schema=None) as batch_op: + batch_op.alter_column('avatar_url', + existing_type=sa.TEXT(), + type_=sa.String(length=255), + existing_nullable=True) + with op.batch_alter_table('providers', schema=None) as batch_op: batch_op.drop_column('credential_status') @@ -65,6 +72,12 @@ def downgrade(): with op.batch_alter_table('providers', schema=None) as batch_op: batch_op.add_column(sa.Column('credential_status', sa.VARCHAR(length=20), server_default=sa.text("'active'::character varying"), autoincrement=False, nullable=True)) + with op.batch_alter_table('datasource_providers', schema=None) as batch_op: + batch_op.alter_column('avatar_url', + existing_type=sa.String(length=255), + type_=sa.TEXT(), + existing_nullable=True) + with op.batch_alter_table('trial_apps', schema=None) as batch_op: batch_op.drop_index('trial_app_tenant_id_idx') batch_op.drop_index('trial_app_app_id_idx') diff --git a/api/models/model.py b/api/models/model.py index e993861c2a..dbbb74386f 100644 --- a/api/models/model.py +++ b/api/models/model.py @@ -636,6 +636,7 @@ class ExporleBanner(Base): sort = mapped_column(sa.Integer, nullable=False) status = mapped_column(sa.String(255), nullable=False, server_default=sa.text("'enabled'::character varying")) created_at = mapped_column(sa.DateTime, nullable=False, server_default=func.current_timestamp()) + language = mapped_column(String(255), nullable=False, server_default=sa.text("'en-US'::character varying")) class OAuthProviderApp(Base):