arbiters: admin views + pagination filter imp.

This commit is contained in:
Aaron 2019-02-06 12:31:53 -06:00
parent 54e9889090
commit 40e73f9ee6
No known key found for this signature in database
GPG Key ID: 3B5B7597106F0A0E
2 changed files with 53 additions and 0 deletions

View File

@ -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

View File

@ -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: