You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

recommended_app.py 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from flask_restx import Resource, fields, marshal_with, reqparse
  2. from constants.languages import languages
  3. from controllers.console import api
  4. from controllers.console.wraps import account_initialization_required
  5. from libs.helper import AppIconUrlField
  6. from libs.login import current_user, login_required
  7. from services.recommended_app_service import RecommendedAppService
  8. app_fields = {
  9. "id": fields.String,
  10. "name": fields.String,
  11. "mode": fields.String,
  12. "icon": fields.String,
  13. "icon_type": fields.String,
  14. "icon_url": AppIconUrlField,
  15. "icon_background": fields.String,
  16. }
  17. recommended_app_fields = {
  18. "app": fields.Nested(app_fields, attribute="app"),
  19. "app_id": fields.String,
  20. "description": fields.String(attribute="description"),
  21. "copyright": fields.String,
  22. "privacy_policy": fields.String,
  23. "custom_disclaimer": fields.String,
  24. "category": fields.String,
  25. "position": fields.Integer,
  26. "is_listed": fields.Boolean,
  27. }
  28. recommended_app_list_fields = {
  29. "recommended_apps": fields.List(fields.Nested(recommended_app_fields)),
  30. "categories": fields.List(fields.String),
  31. }
  32. class RecommendedAppListApi(Resource):
  33. @login_required
  34. @account_initialization_required
  35. @marshal_with(recommended_app_list_fields)
  36. def get(self):
  37. # language args
  38. parser = reqparse.RequestParser()
  39. parser.add_argument("language", type=str, location="args")
  40. args = parser.parse_args()
  41. language = args.get("language")
  42. if language and language in languages:
  43. language_prefix = language
  44. elif current_user and current_user.interface_language:
  45. language_prefix = current_user.interface_language
  46. else:
  47. language_prefix = languages[0]
  48. return RecommendedAppService.get_recommended_apps_and_categories(language_prefix)
  49. class RecommendedAppApi(Resource):
  50. @login_required
  51. @account_initialization_required
  52. def get(self, app_id):
  53. app_id = str(app_id)
  54. return RecommendedAppService.get_recommend_app_detail(app_id)
  55. api.add_resource(RecommendedAppListApi, "/explore/apps")
  56. api.add_resource(RecommendedAppApi, "/explore/apps/<uuid:app_id>")