| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- from flask import request
- from flask_restx import Resource, Namespace, fields
- from app.service.user_room_service import UserRoomService
- from app.utils.jwt_utils import token_required
- from app.utils.logger import Logger, log_request_info
- from app import db
- api = Namespace('user_room', description='用户账号与房间ID映射管理')
- user_room_model = api.model('UserRoom', {
- 'id': fields.Integer(readOnly=True, description='记录ID'),
- 'user_account': fields.String(required=True, description='用户账号'),
- 'room_id': fields.String(required=True, description='房间ID')
- })
- user_room_input_model = api.model('UserRoomInput', {
- 'user_account': fields.String(required=True, description='用户账号'),
- 'room_id': fields.String(required=True, description='房间ID')
- })
- @api.route('/')
- class UserRoomListResource(Resource):
- @token_required
- @api.marshal_list_with(user_room_model)
- @log_request_info
- def get(self):
- """获取所有映射"""
- Logger.info("获取用户房间映射列表")
- service = UserRoomService(db.session)
- records = service.list_all()
-
- Logger.info("用户房间映射列表获取成功", {
- 'record_count': len(records)
- })
-
- return [r.to_dict() for r in records]
- @token_required
- @api.expect(user_room_input_model, validate=True)
- @api.marshal_with(user_room_model, code=201)
- @log_request_info
- def post(self):
- """创建新映射"""
- data = request.get_json()
- service = UserRoomService(db.session)
-
- Logger.info("创建用户房间映射", {
- 'user_account': data.get('user_account'),
- 'room_id': data.get('room_id')
- })
-
- try:
- new_record = service.create(user_account=data['user_account'], room_id=data['room_id'])
-
- Logger.info("用户房间映射创建成功", {
- 'record_id': new_record.id,
- 'user_account': new_record.user_account,
- 'room_id': new_record.room_id
- })
-
- return new_record.to_dict(), 201
- except ValueError as e:
- Logger.warning("用户房间映射创建失败", {
- 'user_account': data.get('user_account'),
- 'room_id': data.get('room_id'),
- 'error': str(e)
- })
- api.abort(400, str(e))
- @api.route('/<int:record_id>')
- class UserRoomResource(Resource):
- @token_required
- @api.marshal_with(user_room_model)
- @api.response(404, 'Record not found')
- def get(self, record_id: int):
- """根据ID获取映射"""
- service = UserRoomService(db.session)
- try:
- record = service.get_by_id(record_id)
- return record.to_dict()
- except ValueError as e:
- api.abort(404, str(e))
- @token_required
- @api.expect(api.model('UserRoomUpdate', {
- 'user_account': fields.String(description='用户账号'),
- 'room_id': fields.String(description='房间ID')
- }))
- @api.marshal_with(user_room_model)
- @api.response(404, 'Record not found')
- def put(self, record_id: int):
- """更新映射"""
- data = request.get_json()
- service = UserRoomService(db.session)
- try:
- updated = service.update(
- record_id=record_id,
- user_account=data.get('user_account'),
- room_id=data.get('room_id')
- )
- return updated.to_dict()
- except ValueError as e:
- # 可能是未找到或唯一冲突等
- api.abort(400 if 'exists' in str(e) else 404, str(e))
- @token_required
- @api.response(204, 'Record deleted')
- @api.response(404, 'Record not found')
- def delete(self, record_id: int):
- """删除映射"""
- service = UserRoomService(db.session)
- try:
- service.delete(record_id)
- return '', 204
- except ValueError as e:
- api.abort(404, str(e))
- @api.route('/by-user/<string:user_account>')
- class UserRoomByUserResource(Resource):
- @token_required
- @api.marshal_list_with(api.model('UserRoomDetails', {
- 'id': fields.Integer(description='记录ID'),
- 'user_account': fields.String(description='用户账号'),
- 'room_name': fields.String(description='房间名称'),
- 'room_url': fields.String(description='房间URL'),
- 'room_id': fields.String(description='房间ID')
- }))
- def get(self, user_account: str):
- """根据用户账号返回房间映射详情列表(用户账号、房间名、房间URL)"""
- service = UserRoomService(db.session)
- results = service.list_details_by_user_account(user_account)
- return results
|