add refresh tokens
This commit is contained in:
parent
e38949e03a
commit
ed004e99a4
3 changed files with 16 additions and 4 deletions
|
@ -4,8 +4,6 @@ Simple API for food diary application.
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
- [ ] Sort meals and entries within meals by date
|
|
||||||
- [ ] Add refresh tokenization
|
|
||||||
- [ ] Add access restriction on each endpoint
|
- [ ] Add access restriction on each endpoint
|
||||||
- [ ] Add tests
|
- [ ] Add tests
|
||||||
- [ ] Add default servings
|
- [ ] Add default servings
|
||||||
|
|
|
@ -1,18 +1,20 @@
|
||||||
from sqlalchemy.orm import relationship, Mapped, mapped_column, joinedload
|
from sqlalchemy.orm import relationship, Mapped, mapped_column, joinedload
|
||||||
from sqlalchemy import ForeignKey, Integer, Date
|
from sqlalchemy import ForeignKey, Integer, Date
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
from sqlalchemy.sql.selectable import Select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from datetime import date
|
from datetime import date
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from .base import Base, CommonMixin
|
from .base import Base, CommonMixin
|
||||||
from .meal import Meal
|
from .meal import Meal
|
||||||
|
from .entry import Entry
|
||||||
|
|
||||||
|
|
||||||
class Diary(Base, CommonMixin):
|
class Diary(Base, CommonMixin):
|
||||||
"""Diary represents user diary for given day"""
|
"""Diary represents user diary for given day"""
|
||||||
|
|
||||||
meals: Mapped[list[Meal]] = relationship(lazy="selectin")
|
meals: Mapped[list[Meal]] = relationship(lazy="selectin", order_by=Meal.order)
|
||||||
date: Mapped[date] = mapped_column(Date)
|
date: Mapped[date] = mapped_column(Date)
|
||||||
user_id: Mapped[int] = mapped_column(Integer, ForeignKey("user.id"))
|
user_id: Mapped[int] = mapped_column(Integer, ForeignKey("user.id"))
|
||||||
|
|
||||||
|
@ -48,6 +50,18 @@ class Diary(Base, CommonMixin):
|
||||||
"""
|
"""
|
||||||
return sum(meal.fat for meal in self.meals)
|
return sum(meal.fat for meal in self.meals)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def query(cls, user_id: int) -> Select:
|
||||||
|
"""get_all."""
|
||||||
|
query = (
|
||||||
|
select(cls)
|
||||||
|
.where(cls.user_id == user_id)
|
||||||
|
.options(
|
||||||
|
joinedload(cls.meals).joinedload(Meal.entries).joinedload(Entry.product)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return query
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def get_diary(
|
async def get_diary(
|
||||||
cls, session: AsyncSession, user_id: int, date: date
|
cls, session: AsyncSession, user_id: int, date: date
|
||||||
|
|
|
@ -15,7 +15,7 @@ class Meal(Base, CommonMixin):
|
||||||
name: Mapped[str]
|
name: Mapped[str]
|
||||||
order: Mapped[int]
|
order: Mapped[int]
|
||||||
diary_id: Mapped[int] = mapped_column(Integer, ForeignKey("diary.id"))
|
diary_id: Mapped[int] = mapped_column(Integer, ForeignKey("diary.id"))
|
||||||
entries: Mapped[list[Entry]] = relationship(lazy="selectin")
|
entries: Mapped[list[Entry]] = relationship(lazy="selectin", order_by=Entry.last_changed)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def calories(self) -> float:
|
def calories(self) -> float:
|
||||||
|
|
Loading…
Reference in a new issue