recommended_app.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from flask_login import current_user # type: ignore
  2. from flask_restful import Resource, fields, marshal_with, reqparse # type: ignore
  3. from constants.languages import languages
  4. from controllers.console import api
  5. from controllers.console.wraps import account_initialization_required
  6. from libs.helper import AppIconUrlField
  7. from libs.login import login_required
  8. from services.recommended_app_service import RecommendedAppService
  9. app_fields = {
  10. "id": fields.String,
  11. "name": fields.String,
  12. "mode": fields.String,
  13. "icon": fields.String,
  14. "icon_type": fields.String,
  15. "icon_url": AppIconUrlField,
  16. "icon_background": fields.String,
  17. }
  18. recommended_app_fields = {
  19. "app": fields.Nested(app_fields, attribute="app"),
  20. "app_id": fields.String,
  21. "description": fields.String(attribute="description"),
  22. "copyright": fields.String,
  23. "privacy_policy": fields.String,
  24. "custom_disclaimer": fields.String,
  25. "category": fields.String,
  26. "position": fields.Integer,
  27. "is_listed": fields.Boolean,
  28. }
  29. recommended_app_list_fields = {
  30. "recommended_apps": fields.List(fields.Nested(recommended_app_fields)),
  31. "categories": fields.List(fields.String),
  32. }
  33. class RecommendedAppListApi(Resource):
  34. @login_required
  35. @account_initialization_required
  36. @marshal_with(recommended_app_list_fields)
  37. def get(self):
  38. # language args
  39. parser = reqparse.RequestParser()
  40. parser.add_argument("language", type=str, location="args")
  41. args = parser.parse_args()
  42. if args.get("language") and args.get("language") in languages:
  43. language_prefix = args.get("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>")