recommended_app.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from flask_login import current_user
  2. from flask_restful import Resource, fields, marshal_with, reqparse
  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_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. if args.get("language") and args.get("language") in languages:
  42. language_prefix = args.get("language")
  43. elif current_user and current_user.interface_language:
  44. language_prefix = current_user.interface_language
  45. else:
  46. language_prefix = languages[0]
  47. return RecommendedAppService.get_recommended_apps_and_categories(language_prefix)
  48. class RecommendedAppApi(Resource):
  49. @login_required
  50. @account_initialization_required
  51. def get(self, app_id):
  52. app_id = str(app_id)
  53. return RecommendedAppService.get_recommend_app_detail(app_id)
  54. api.add_resource(RecommendedAppListApi, "/explore/apps")
  55. api.add_resource(RecommendedAppApi, "/explore/apps/<uuid:app_id>")