arbiters: admin views + pagination filter imp.
This commit is contained in:
parent
54e9889090
commit
40e73f9ee6
|
@ -112,6 +112,56 @@ def get_user(id):
|
|||
return {"message": f"Could not find user with id {id}"}, 404
|
||||
|
||||
|
||||
# ARBITERS
|
||||
|
||||
|
||||
@blueprint.route("/arbiters", methods=["GET"])
|
||||
@endpoint.api(
|
||||
parameter('search', type=str, required=False),
|
||||
)
|
||||
@admin_auth_required
|
||||
def get_arbiters(search):
|
||||
results = []
|
||||
error = None
|
||||
if len(search) < 3:
|
||||
error = 'search query must be at least 3 characters long'
|
||||
else:
|
||||
users = User.query.filter(
|
||||
User.email_address.ilike(f'%{search}%') | User.display_name.ilike(f'%{search}%')
|
||||
).all()
|
||||
results = admin_users_schema.dump(users)
|
||||
|
||||
return {
|
||||
'results': results,
|
||||
'search': search,
|
||||
'error': error
|
||||
}
|
||||
|
||||
|
||||
@blueprint.route('/arbiters', methods=['PUT'])
|
||||
@endpoint.api(
|
||||
parameter('proposalId', type=int, required=True),
|
||||
parameter('userId', type=int, required=True)
|
||||
)
|
||||
@admin_auth_required
|
||||
def set_arbiter(proposal_id, user_id):
|
||||
proposal = Proposal.query.filter(Proposal.id == proposal_id).first()
|
||||
if not proposal:
|
||||
return {"message": "Proposal not found"}, 404
|
||||
|
||||
user = User.query.filter(User.id == user_id).first()
|
||||
if not user:
|
||||
return {"message": "User not found"}, 404
|
||||
|
||||
proposal.arbiter_id = user.id
|
||||
db.session.add(proposal)
|
||||
db.session.commit()
|
||||
return {
|
||||
'proposal': proposal_schema.dump(proposal),
|
||||
'user': admin_user_schema.dump(user)
|
||||
}, 200
|
||||
|
||||
|
||||
# PROPOSALS
|
||||
|
||||
|
||||
|
|
|
@ -76,6 +76,7 @@ class ProposalPagination(Pagination):
|
|||
status_filters = extract_filters('STATUS_', filters)
|
||||
stage_filters = extract_filters('STAGE_', filters)
|
||||
cat_filters = extract_filters('CAT_', filters)
|
||||
other_filters = extract_filters('OTHER_', filters)
|
||||
|
||||
if status_filters:
|
||||
query = query.filter(Proposal.status.in_(status_filters))
|
||||
|
@ -85,6 +86,8 @@ class ProposalPagination(Pagination):
|
|||
# query = query.filter(Proposal.stage.in_(stage_filters))
|
||||
if cat_filters:
|
||||
query = query.filter(Proposal.category.in_(cat_filters))
|
||||
if other_filters:
|
||||
query = query.filter(Proposal.arbiter_id == None)
|
||||
|
||||
# SORT (see self.SORT_MAP)
|
||||
if sort:
|
||||
|
|
Loading…
Reference in New Issue