|
1 |
| -from typing import Optional |
2 |
| -from datetime import datetime |
3 |
| - |
4 |
| -from app.models.api_model import APIModel |
5 |
| -from app.models.farm_token import FarmTokenBase, FarmToken |
6 |
| -from app.models.farm_info import FarmInfo |
7 |
| - |
8 |
| -# Shared properties |
9 |
| -class FarmBase(APIModel): |
10 |
| - farm_name: Optional[str] = None |
11 |
| - url: Optional[str] = None |
12 |
| - username: Optional[str] = None |
13 |
| - notes: Optional[str] = None |
14 |
| - tags: Optional[str] = None |
15 |
| - info: Optional[FarmInfo] = None |
16 |
| - active: Optional[bool] = None |
17 |
| - |
18 |
| -class FarmBaseInDB(FarmBase): |
19 |
| - id: int = None |
20 |
| - |
21 |
| -# Properties to receive via API on creation |
22 |
| -class FarmCreate(FarmBase): |
23 |
| - farm_name: str |
24 |
| - url: str |
25 |
| - username: Optional[str] |
26 |
| - password: Optional[str] |
27 |
| - token: Optional[FarmTokenBase] |
28 |
| - |
29 |
| -# Properties to receive via API on update |
30 |
| -class FarmUpdate(FarmBase): |
31 |
| - password: Optional[str] = None |
32 |
| - |
33 |
| -# Additional properties to return via API |
34 |
| -class Farm(FarmBaseInDB): |
35 |
| - time_created: Optional[datetime] = None |
36 |
| - time_updated: Optional[datetime] = None |
37 |
| - last_accessed: Optional[datetime] = None |
38 |
| - token: Optional[FarmToken] = None |
39 |
| - is_authorized: Optional[bool] = None |
40 |
| - auth_error: Optional[str] = None |
41 |
| - |
42 |
| -# Additional properites stored in DB |
43 |
| -class FarmInDB(FarmBaseInDB): |
44 |
| - pass |
| 1 | +from sqlalchemy import Boolean, Column, Integer, String, DateTime |
| 2 | +from sqlalchemy.sql import func |
| 3 | +from sqlalchemy.orm import relationship |
| 4 | +from sqlalchemy.dialects.postgresql import JSONB |
| 5 | + |
| 6 | +from app.db.base_class import Base |
| 7 | +from app.models.farm_token import FarmToken |
| 8 | + |
| 9 | + |
| 10 | +class Farm(Base): |
| 11 | + __tablename__ = 'farm' |
| 12 | + |
| 13 | + id = Column(Integer, primary_key=True, index=True) |
| 14 | + time_created = Column(DateTime(timezone=True), server_default=func.now()) |
| 15 | + time_updated = Column(DateTime(timezone=True), onupdate=func.now()) |
| 16 | + last_accessed = Column(DateTime(timezone=True)) |
| 17 | + farm_name = Column(String, index=True) |
| 18 | + url = Column(String, index=True, unique=True) |
| 19 | + username = Column(String, index=True) |
| 20 | + password = Column(String, index=True) |
| 21 | + notes = Column(String, nullable=True) |
| 22 | + tags = Column(String, nullable=True) |
| 23 | + |
| 24 | + # active attribute allows admins to disable farmOS profiles |
| 25 | + active = Column(Boolean, default=False) |
| 26 | + |
| 27 | + # Store farm info in a JSONB column |
| 28 | + info = Column(JSONB, nullable=True) |
| 29 | + |
| 30 | + is_authorized = Column(Boolean, default=False) |
| 31 | + token = relationship("FarmToken", uselist=False, back_populates="farm") |
| 32 | + auth_error = Column(String, nullable=True) |
| 33 | + |
0 commit comments