|  | @@ -90,6 +90,22 @@ class UserController(Controller):
 | 
	
		
			
			| 90 | 90 |      @hapic.with_api_doc(tags=[USER_ENDPOINTS_TAG])
 | 
	
		
			
			| 91 | 91 |      @require_same_user_or_profile(Group.TIM_ADMIN)
 | 
	
		
			
			| 92 | 92 |      @hapic.input_path(UserWorkspaceAndContentIdPathSchema())
 | 
	
		
			
			|  | 93 | +    @hapic.output_body(UserContentDigestSchema())  # nopep8
 | 
	
		
			
			|  | 94 | +    def user_content(self, context, request: TracimRequest, hapic_data=None):  # nopep8
 | 
	
		
			
			|  | 95 | +        """
 | 
	
		
			
			|  | 96 | +        set user_read status of content to unread
 | 
	
		
			
			|  | 97 | +        """
 | 
	
		
			
			|  | 98 | +        app_config = request.registry.settings['CFG']
 | 
	
		
			
			|  | 99 | +        api = ContentApi(
 | 
	
		
			
			|  | 100 | +            current_user=request.candidate_user,
 | 
	
		
			
			|  | 101 | +            session=request.dbsession,
 | 
	
		
			
			|  | 102 | +            config=app_config,
 | 
	
		
			
			|  | 103 | +        )
 | 
	
		
			
			|  | 104 | +        return api.get_content_in_context(request.current_content)
 | 
	
		
			
			|  | 105 | +
 | 
	
		
			
			|  | 106 | +    @hapic.with_api_doc(tags=[USER_ENDPOINTS_TAG])
 | 
	
		
			
			|  | 107 | +    @require_same_user_or_profile(Group.TIM_ADMIN)
 | 
	
		
			
			|  | 108 | +    @hapic.input_path(UserWorkspaceAndContentIdPathSchema())
 | 
	
		
			
			| 93 | 109 |      @hapic.output_body(NoContentSchema(), default_http_code=HTTPStatus.NO_CONTENT)  # nopep8
 | 
	
		
			
			| 94 | 110 |      def set_content_as_read(self, context, request: TracimRequest, hapic_data=None):  # nopep8
 | 
	
		
			
			| 95 | 111 |          """
 | 
	
	
		
			
			|  | @@ -148,6 +164,9 @@ class UserController(Controller):
 | 
	
		
			
			| 148 | 164 |          configurator.add_route('user_workspace', '/users/{user_id}/workspaces', request_method='GET')  # nopep8
 | 
	
		
			
			| 149 | 165 |          configurator.add_view(self.user_workspace, route_name='user_workspace')
 | 
	
		
			
			| 150 | 166 |  
 | 
	
		
			
			|  | 167 | +        # user content
 | 
	
		
			
			|  | 168 | +        configurator.add_route('user_content', '/users/{user_id}/workspaces/{workspace_id}/contents/{content_id}', request_method='GET')  # nopep8
 | 
	
		
			
			|  | 169 | +        configurator.add_view(self.user_content, route_name='user_content')
 | 
	
		
			
			| 151 | 170 |          # last active content for user
 | 
	
		
			
			| 152 | 171 |          configurator.add_route('last_active_content', '/users/{user_id}/contents/actives', request_method='GET')  # nopep8
 | 
	
		
			
			| 153 | 172 |          configurator.add_view(self.last_active_content, route_name='last_active_content')  # nopep8
 | 
	
	
		
			
			|  | @@ -160,4 +179,4 @@ class UserController(Controller):
 | 
	
		
			
			| 160 | 179 |  
 | 
	
		
			
			| 161 | 180 |          # set workspace as read
 | 
	
		
			
			| 162 | 181 |          configurator.add_route('read_workspace', '/users/{user_id}/workspaces/{workspace_id}/read', request_method='PUT')  # nopep8
 | 
	
		
			
			| 163 |  | -        configurator.add_view(self.set_workspace_as_read, route_name='read_workspace')  # nopep8
 | 
	
		
			
			|  | 182 | +        configurator.add_view(self.set_workspace_as_read, route_name='read_workspace')  # nopep8
 |