|
1 | | -from flask_rest_jsonapi import ResourceDetail, ResourceList, ResourceRelationship |
2 | 1 | from flask import request, current_app as app |
3 | | -from flask_jwt import current_identity as current_user, _jwt_required |
| 2 | +from flask_jwt import current_identity as current_user, _jwt_required, jwt_required |
| 3 | +from flask_rest_jsonapi import ResourceDetail, ResourceList, ResourceRelationship |
| 4 | +from flask_rest_jsonapi.exceptions import ObjectNotFound |
| 5 | +from sqlalchemy.orm.exc import NoResultFound |
4 | 6 |
|
5 | | -from app.models.user import User |
6 | 7 | from app.api.helpers.db import safe_query |
7 | | -from app.api.helpers.permission_manager import has_access |
8 | 8 | from app.api.helpers.exceptions import ForbiddenException, ConflictException |
| 9 | +from app.api.helpers.permission_manager import has_access |
9 | 10 | from app.api.helpers.utilities import require_relationship |
10 | 11 | from app.api.schema.user_favourite_events import UserFavouriteEventSchema |
11 | 12 | from app.models import db |
| 13 | +from app.models.user import User |
12 | 14 | from app.models.user_favourite_event import UserFavouriteEvent |
13 | 15 |
|
14 | 16 |
|
@@ -79,11 +81,28 @@ class UserFavouriteEventDetail(ResourceDetail): |
79 | 81 | """ |
80 | 82 | User Favourite Events detail by id |
81 | 83 | """ |
| 84 | + @jwt_required() |
| 85 | + def before_get_object(self, view_kwargs): |
| 86 | + |
| 87 | + if view_kwargs.get('id') is not None: |
| 88 | + try: |
| 89 | + user_favourite_event = UserFavouriteEvent.query.filter_by( |
| 90 | + user=current_user, event_id=view_kwargs['id']).first() |
| 91 | + except NoResultFound: |
| 92 | + raise ObjectNotFound({'source': '/data/relationships/event'}, "Object: not found") |
| 93 | + else: |
| 94 | + if user_favourite_event is not None: |
| 95 | + view_kwargs['id'] = user_favourite_event.id |
| 96 | + else: |
| 97 | + view_kwargs['id'] = None |
82 | 98 |
|
83 | 99 | methods = ['GET', 'DELETE'] |
84 | 100 | schema = UserFavouriteEventSchema |
85 | 101 | data_layer = {'session': db.session, |
86 | | - 'model': UserFavouriteEvent} |
| 102 | + 'model': UserFavouriteEvent, |
| 103 | + 'methods': { |
| 104 | + 'before_get_object': before_get_object, |
| 105 | + }} |
87 | 106 |
|
88 | 107 |
|
89 | 108 | class UserFavouriteEventRelationship(ResourceRelationship): |
|
0 commit comments