lotr-sut/sut/backend/routes/members.py
Fellowship Scholar f6a5823439 init commit
2026-03-29 20:07:56 +00:00

42 lines
1.6 KiB
Python

"""Fellowship member routes."""
from flask import Blueprint
from flask_restx import Api, Resource, fields
from models.member import Member
from typing import Dict, Any, List
members_bp = Blueprint('members', __name__, url_prefix='/api')
members_api = Api(members_bp, doc=False, prefix='/members')
# Response model for Swagger
member_response_model = members_api.model('MemberResponse', {
'id': fields.Integer(description='Member ID'),
'name': fields.String(description='Member name'),
'race': fields.String(description='Member race'),
'role': fields.String(description='Member role'),
'status': fields.String(description='Member status'),
'description': fields.String(description='Member description'),
'created_at': fields.String(description='Creation timestamp')
})
@members_api.route('/')
class MemberList(Resource):
"""Fellowship member list endpoints."""
@members_api.marshal_list_with(member_response_model)
@members_api.doc(description='Get all Fellowship members')
def get(self) -> tuple[List[Dict[str, Any]], int]:
"""Get all Fellowship members."""
members = Member.query.all()
return [member.to_dict() for member in members], 200
@members_api.route('/<int:member_id>')
class MemberDetail(Resource):
"""Fellowship member detail endpoints."""
@members_api.marshal_with(member_response_model)
@members_api.doc(description='Get member by ID')
def get(self, member_id: int) -> tuple[Dict[str, Any], int]:
"""Get member by ID."""
member = Member.query.get_or_404(member_id)
return member.to_dict(), 200