mirror of
				https://github.com/ae-utbm/sith.git
				synced 2025-10-30 16:43:55 +00:00 
			
		
		
		
	api attempt
This commit is contained in:
		| @@ -21,11 +21,14 @@ from ninja_extra import ControllerBase, api_controller, paginate, route | ||||
| from ninja_extra.pagination import PageNumberPaginationExtra | ||||
| from ninja_extra.schemas import PaginatedResponseSchema | ||||
|  | ||||
| from core.api_permissions import CanAccessLookup, CanView, IsRoot | ||||
| from counter.models import Counter, Product | ||||
| from core.api_permissions import CanAccessLookup, CanView, IsOldSubscriber, IsRoot | ||||
| from core.models import User | ||||
| from counter.models import Counter, Permanency, Product | ||||
| from counter.schemas import ( | ||||
|     CounterFilterSchema, | ||||
|     CounterSchema, | ||||
|     PermanencyFilterSchema, | ||||
|     PermanencySchema, | ||||
|     ProductSchema, | ||||
|     SimplifiedCounterSchema, | ||||
| ) | ||||
| @@ -76,3 +79,23 @@ class ProductController(ControllerBase): | ||||
|             .filter(archived=False) | ||||
|             .values() | ||||
|         ) | ||||
|  | ||||
|  | ||||
| @api_controller("/permanency") | ||||
| class PermanencyController(ControllerBase): | ||||
|     @route.get( | ||||
|         "", | ||||
|         response=PaginatedResponseSchema[PermanencySchema], | ||||
|         permissions=[IsOldSubscriber], | ||||
|     ) | ||||
|     @paginate(PageNumberPaginationExtra, page_size=100) | ||||
|     def fetch_permanancies(self, filters: Query[PermanencyFilterSchema]): | ||||
|         user: User = self.context.request.user | ||||
|         if not user.is_root: | ||||
|             filters.barmen = None | ||||
|         resp = filters.filter(Permanency.objects.values()).distinct() | ||||
|         breakpoint() | ||||
|         if not user.is_root: | ||||
|             for perm in resp: | ||||
|                 perm.user = None | ||||
|         return resp | ||||
|   | ||||
| @@ -1,10 +1,12 @@ | ||||
| from datetime import datetime | ||||
| from typing import Annotated | ||||
|  | ||||
| from annotated_types import MinLen | ||||
| from ninja import Field, FilterSchema, ModelSchema | ||||
| from pydantic import Field | ||||
|  | ||||
| from core.schemas import SimpleUserSchema | ||||
| from counter.models import Counter, Product | ||||
| from counter.models import Counter, Permanency, Product | ||||
|  | ||||
|  | ||||
| class CounterSchema(ModelSchema): | ||||
| @@ -16,6 +18,19 @@ class CounterSchema(ModelSchema): | ||||
|         fields = ["id", "name", "type", "club", "products"] | ||||
|  | ||||
|  | ||||
| class PermanencySchema(ModelSchema): | ||||
|     class Meta: | ||||
|         model = Permanency | ||||
|         fields = ["user", "counter", "start", "end", "activity"] | ||||
|  | ||||
|  | ||||
| class PermanencyFilterSchema(FilterSchema): | ||||
|     start_date: datetime | None = Field(None, q="start__gte") | ||||
|     end_date: datetime | None = Field(None, q="end__lte") | ||||
|     barmen: set[int] | None = Field(None, q="user_id__in") | ||||
|     counter: set[int] | None = Field(None, q="counter_id__in") | ||||
|  | ||||
|  | ||||
| class CounterFilterSchema(FilterSchema): | ||||
|     search: Annotated[str, MinLen(1)] = Field(None, q="name__icontains") | ||||
|  | ||||
|   | ||||
							
								
								
									
										9
									
								
								counter/static/webpack/graph-index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								counter/static/webpack/graph-index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| import Chart from 'chart.js/auto'; | ||||
| import {permanencyFetchPermanancies} from '#openapi' | ||||
|  | ||||
| async function main() { | ||||
|     console.log((await permanencyFetchPermanancies()).data) | ||||
| } | ||||
|  | ||||
| main() | ||||
| console.log("Hello from graph-index.ts"); | ||||
| @@ -5,6 +5,11 @@ | ||||
|   {% trans counter_name=counter %}{{ counter_name }} activity{% endtrans %} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block head %} | ||||
|   {{ super() }} | ||||
|   <script src="{{ static('webpack/graph-index.ts') }}"></script> | ||||
| {% endblock %} | ||||
|  | ||||
| {%- block additional_css -%} | ||||
|   <link rel="stylesheet" href="{{ static('counter/css/activity.scss') }}"> | ||||
| {%- endblock -%} | ||||
| @@ -22,6 +27,8 @@ | ||||
|         {% trans %}There is currently no barman connected.{% endtrans %} | ||||
|       {% endif %} | ||||
|     </ul> | ||||
|     <h4>{% trans %}Last Week Activity {% endtrans %}</h4> | ||||
|     <canvas id="activityChart" width="400" height="200"></canvas> | ||||
|   {% endif %} | ||||
|  | ||||
|   <h5>{% trans %}Legend{% endtrans %}</h5> | ||||
| @@ -36,6 +43,3 @@ | ||||
|     </div> | ||||
|   </div> | ||||
| {% endblock %} | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user