| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- from flask import Flask, jsonify, request
- import grpc
- import hr_pb2
- import hr_pb2_grpc
- app = Flask(__name__)
- # gRPC channel setup
- channel = grpc.insecure_channel('localhost:50051')
- iam_stub = hr_pb2_grpc.IAMServiceStub(channel)
- test_stub = hr_pb2_grpc.PersonalityTestServiceStub(channel)
- interview_stub = hr_pb2_grpc.InterviewServiceStub(channel)
- @app.route('/')
- def home():
- return '''
- <h1>HR gRPC Gateway</h1>
- <h2>Available Endpoints:</h2>
- <ul>
- <li><a href="/user/1">GET /user/<id></a> - Get user info</li>
- <li>POST /login - Login (send JSON: {"username": "admin", "password": "1234"})</li>
- <li><a href="/test/1">GET /test/<user_id></a> - Get personality test result</li>
- <li>POST /interview - Schedule interview (send JSON: {"user_id": 1, "date": "2025-10-25"})</li>
- <li><a href="/interviews/1">GET /interviews/<user_id></a> - Get user interviews</li>
- </ul>
- '''
- @app.route('/user/<int:user_id>')
- def get_user(user_id):
- try:
- response = iam_stub.GetUser(hr_pb2.UserRequest(id=user_id))
- return jsonify({
- 'id': response.id,
- 'name': response.name,
- 'role': response.role
- })
- except grpc.RpcError as e:
- return jsonify({'error': str(e)}), 500
- @app.route('/login', methods=['POST'])
- def login():
- try:
- data = request.json
- response = iam_stub.Login(hr_pb2.LoginRequest(
- username=data['username'],
- password=data['password']
- ))
- return jsonify({
- 'success': response.success,
- 'message': response.message
- })
- except grpc.RpcError as e:
- return jsonify({'error': str(e)}), 500
- @app.route('/test/<int:user_id>')
- def get_test(user_id):
- try:
- response = test_stub.GetTestResult(hr_pb2.TestRequest(user_id=user_id))
- return jsonify({
- 'user_id': response.user_id,
- 'result': response.result
- })
- except grpc.RpcError as e:
- return jsonify({'error': str(e)}), 500
- @app.route('/interview', methods=['POST'])
- def schedule_interview():
- try:
- data = request.json
- response = interview_stub.ScheduleInterview(hr_pb2.InterviewRequest(
- user_id=data['user_id'],
- date=data['date']
- ))
- return jsonify({
- 'success': response.success,
- 'message': response.message
- })
- except grpc.RpcError as e:
- return jsonify({'error': str(e)}), 500
- @app.route('/interviews/<int:user_id>')
- def get_interviews(user_id):
- try:
- response = interview_stub.GetInterviews(hr_pb2.InterviewListRequest(user_id=user_id))
- return jsonify({
- 'user_id': user_id,
- 'interviews': list(response.interviews)
- })
- except grpc.RpcError as e:
- return jsonify({'error': str(e)}), 500
- if __name__ == '__main__':
- print("🌐 HTTP Gateway running on http://localhost:5000")
- app.run(debug=True, port=5000)
|