api attempt

This commit is contained in:
NaNoMelo
2024-10-12 17:30:19 +02:00
committed by imperosol
parent ff307f1d65
commit e30a6e8e6e
5 changed files with 367 additions and 123 deletions

View File

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

View File

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

View 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");

View File

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