|
| 1 | +from flask_restx import Api, Resource, fields |
| 2 | +from flask import Blueprint |
| 3 | + |
| 4 | +api_blueprint = Blueprint('api', __name__) |
| 5 | +api = Api( |
| 6 | + api_blueprint, |
| 7 | + version='1.0.0', |
| 8 | + title='ChatForge API', |
| 9 | + description='Scalable AI Chatbot API built with Flask, OpenAI, and vector memory', |
| 10 | + doc='/docs/', |
| 11 | + prefix='/api' |
| 12 | +) |
| 13 | + |
| 14 | +# Namespace definitions |
| 15 | +auth_ns = api.namespace('auth', description='Authentication endpoints') |
| 16 | +bot_ns = api.namespace('bot', description='Chatbot management endpoints') |
| 17 | +knowledge_ns = api.namespace('knowledge', description='Knowledge base management') |
| 18 | +chat_ns = api.namespace('chat', description='Chat and conversation endpoints') |
| 19 | +ticket_ns = api.namespace('tickets', description='Support ticket endpoints') |
| 20 | +payment_ns = api.namespace('payment', description='Payment processing endpoints') |
| 21 | +shopify_ns = api.namespace('shopify', description='Shopify integration endpoints') |
| 22 | +wordpress_ns = api.namespace('wordpress', description='WordPress integration endpoints') |
| 23 | + |
| 24 | +# Request/Response models |
| 25 | +login_model = api.model('Login', { |
| 26 | + 'email': fields.String(required=True, description='User email'), |
| 27 | + 'password': fields.String(required=True, description='User password') |
| 28 | +}) |
| 29 | + |
| 30 | +register_model = api.model('Register', { |
| 31 | + 'email': fields.String(required=True, description='User email'), |
| 32 | + 'password': fields.String(required=True, description='User password'), |
| 33 | + 'first_name': fields.String(required=True, description='First name'), |
| 34 | + 'last_name': fields.String(required=True, description='Last name'), |
| 35 | + 'language': fields.String(required=True, description='Language preference'), |
| 36 | + 'com_name': fields.String(required=True, description='Company name'), |
| 37 | + 'com_vat': fields.String(required=True, description='Company VAT'), |
| 38 | + 'com_street': fields.String(required=True, description='Company street'), |
| 39 | + 'com_street_number': fields.String(required=True, description='Street number'), |
| 40 | + 'com_city': fields.String(required=True, description='City'), |
| 41 | + 'com_postal': fields.String(required=True, description='Postal code'), |
| 42 | + 'com_country': fields.String(required=True, description='Country'), |
| 43 | + 'com_website': fields.String(required=True, description='Company website') |
| 44 | +}) |
| 45 | + |
| 46 | +chat_query_model = api.model('ChatQuery', { |
| 47 | + 'input': fields.String(required=True, description='User message'), |
| 48 | + 'botId': fields.Integer(required=True, description='Bot ID'), |
| 49 | + 'userId': fields.Integer(required=True, description='User ID'), |
| 50 | + 'sessionId': fields.String(required=True, description='Session ID'), |
| 51 | + 'createdAt': fields.String(required=True, description='Creation timestamp'), |
| 52 | + 'website': fields.String(required=True, description='Website URL') |
| 53 | +}) |
| 54 | + |
| 55 | +create_bot_model = api.model('CreateBot', { |
| 56 | + 'name': fields.String(required=True, description='Bot name'), |
| 57 | + 'user_id': fields.Integer(required=True, description='User ID'), |
| 58 | + 'color': fields.String(required=True, description='Bot color'), |
| 59 | + 'active': fields.String(required=True, description='Active status'), |
| 60 | + 'start_time': fields.String(required=True, description='Start time'), |
| 61 | + 'end_time': fields.String(required=True, description='End time'), |
| 62 | + 'knowledge_base': fields.String(required=True, description='Knowledge base ID') |
| 63 | +}) |
| 64 | + |
| 65 | +error_response_model = api.model('Error', { |
| 66 | + 'error': fields.String(description='Error message'), |
| 67 | + 'status': fields.Integer(description='HTTP status code'), |
| 68 | + 'code': fields.String(description='Error code') |
| 69 | +}) |
| 70 | + |
| 71 | +success_response_model = api.model('Success', { |
| 72 | + 'message': fields.String(description='Success message'), |
| 73 | + 'status': fields.Integer(description='HTTP status code'), |
| 74 | + 'data': fields.Raw(description='Response data') |
| 75 | +}) |
| 76 | + |
| 77 | +# Documentation endpoints |
| 78 | +@api_blueprint.route('/') |
| 79 | +class APIInfo(Resource): |
| 80 | + @api.doc('api_info') |
| 81 | + def get(self): |
| 82 | + """API information and health check""" |
| 83 | + return { |
| 84 | + 'message': 'ChatForge API is running', |
| 85 | + 'status': 'healthy', |
| 86 | + 'version': '1.0.0', |
| 87 | + 'docs': '/api/docs/' |
| 88 | + } |
| 89 | + |
0 commit comments