mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-26 11:49:57 +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