46 lines
1.9 KiB
Python
Executable File
46 lines
1.9 KiB
Python
Executable File
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pytz import timezone
|
|
from sqlalchemy import UUID as SQLUUID
|
|
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, String
|
|
from sqlalchemy.orm import Mapped
|
|
from uuid6 import UUID, uuid7
|
|
|
|
from app.core.config import settings
|
|
|
|
from . import Base
|
|
|
|
|
|
class MapAccessModel(Base):
|
|
__tablename__ = "mapset_access"
|
|
|
|
id: Mapped[UUID] = Column(String, primary_key=True, default=uuid7)
|
|
mapset_id: Mapped[UUID] = Column(
|
|
SQLUUID(as_uuid=True), ForeignKey("mapsets.id", ondelete="CASCADE"), nullable=False
|
|
)
|
|
user_id: Mapped[Optional[UUID]] = Column(
|
|
SQLUUID(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), nullable=True
|
|
)
|
|
organization_id: Mapped[Optional[UUID]] = Column(
|
|
SQLUUID(as_uuid=True), ForeignKey("organizations.id", ondelete="CASCADE"), nullable=True
|
|
)
|
|
granted_by: Mapped[UUID] = Column(SQLUUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
|
|
can_read: Mapped[bool] = Column(Boolean, default=True)
|
|
can_write: Mapped[bool] = Column(Boolean, default=False)
|
|
can_delete: Mapped[bool] = Column(Boolean, default=False)
|
|
|
|
created_at: Mapped[datetime] = Column(DateTime(timezone=True), default=datetime.now(timezone(settings.TIMEZONE)))
|
|
updated_at: Mapped[datetime] = Column(
|
|
DateTime(timezone=True),
|
|
default=datetime.now(timezone(settings.TIMEZONE)),
|
|
onupdate=datetime.now(timezone(settings.TIMEZONE)),
|
|
)
|
|
# expires_at: Mapped[Optional[datetime]] = Column(DateTime(timezone=True), nullable=True) # Optional expiry
|
|
|
|
# Relationships
|
|
# mapset = relationship("MapsetModel", back_populates="access_grants")
|
|
# user = relationship("UserModel", foreign_keys=[user_id], back_populates="mapset_access")
|
|
# organization = relationship("OrganizationModel", back_populates="mapset_access")
|
|
# grantor = relationship("UserModel", foreign_keys=[granted_by])
|