First commit
This commit is contained in:
@@ -8,18 +8,25 @@ from fastapi import FastAPI
|
||||
from strawberry.fastapi import GraphQLRouter
|
||||
from starlette.middleware.cors import CORSMiddleware
|
||||
from strawberry.scalars import JSON
|
||||
from xmlrpc.client import ServerProxy
|
||||
|
||||
|
||||
def connect():
|
||||
return create_engine("postgresql+psycopg://postgres:Root12345678@10.10.8.83:32101/db", echo=True)
|
||||
|
||||
|
||||
def exec_function(function: str, **kwargs):
|
||||
proxy = ServerProxy('http://10.10.8.70:7000/xmlrpc')
|
||||
result = proxy.__getattr__(function)(kwargs)
|
||||
return result
|
||||
|
||||
|
||||
class Base(DeclarativeBase):
|
||||
pass
|
||||
|
||||
|
||||
class User(Base):
|
||||
__tablename__ = "users"
|
||||
__tablename__ = 'users'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
username: Mapped[str]
|
||||
@@ -27,13 +34,18 @@ class User(Base):
|
||||
bndname: Mapped[str]
|
||||
newbnd: Mapped[bool]
|
||||
active: Mapped[bool]
|
||||
upstream: Mapped[bool]
|
||||
|
||||
profiles: Mapped[List["Profile"]] = relationship(
|
||||
back_populates="user", cascade="all, delete-orphan"
|
||||
profiles: Mapped[List['Profile']] = relationship(
|
||||
back_populates='user', cascade='all, delete-orphan'
|
||||
)
|
||||
|
||||
schedule: Mapped[List['Schedule']] = relationship(
|
||||
back_populates='user', cascade='all, delete-orphan'
|
||||
)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"User(id={self.id!r}, username={self.username!r}, password={self.passwd!r}, newbnd={self.newbnd})"
|
||||
return f'User(id={self.id!r}, username={self.username!r}, password={self.passwd!r}, newbnd={self.newbnd})'
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
return {
|
||||
@@ -42,23 +54,26 @@ class User(Base):
|
||||
'bndname': self.bndname,
|
||||
'newbnd': self.newbnd,
|
||||
'active': self.active,
|
||||
'profiles': [x.to_dict() for x in self.profiles]
|
||||
'upstream': self.upstream,
|
||||
'profiles': [x.to_dict() for x in self.profiles],
|
||||
'schedule': [x.to_dict() for x in self.schedule],
|
||||
}
|
||||
|
||||
|
||||
@strawberry.type
|
||||
class UsersGQL:
|
||||
users: JSON
|
||||
|
||||
|
||||
class Profile(Base):
|
||||
__tablename__ = "profiles"
|
||||
__tablename__ = 'profiles'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
user_id: Mapped[int] = mapped_column(ForeignKey("users.id"))
|
||||
user_id: Mapped[int] = mapped_column(ForeignKey('users.id'))
|
||||
scheme: Mapped[str]
|
||||
json: Mapped[str]
|
||||
|
||||
user: Mapped["User"] = relationship(back_populates="profiles")
|
||||
user: Mapped['User'] = relationship(back_populates='profiles')
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
return {
|
||||
@@ -68,6 +83,32 @@ class Profile(Base):
|
||||
}
|
||||
|
||||
|
||||
class Schedule(Base):
|
||||
__tablename__ = 'schedule'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
user_id: Mapped[int] = mapped_column(ForeignKey('users.id'))
|
||||
day_start: Mapped[int]
|
||||
hour_start: Mapped[int]
|
||||
minute_start: Mapped[int]
|
||||
day_end: Mapped[int]
|
||||
hour_end: Mapped[int]
|
||||
minute_end: Mapped[int]
|
||||
|
||||
user: Mapped['User'] = relationship(back_populates='schedule')
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
return {
|
||||
'id': self.id,
|
||||
'day_start': self.day_start,
|
||||
'hour_start': self.hour_start,
|
||||
'minute_start': self.minute_start,
|
||||
'day_end': self.day_end,
|
||||
'hour_end': self.hour_end,
|
||||
'minute_end': self.minute_end,
|
||||
}
|
||||
|
||||
|
||||
@strawberry.type
|
||||
class Query:
|
||||
@strawberry.field()
|
||||
@@ -122,6 +163,35 @@ class Mutation:
|
||||
session.commit()
|
||||
return profile.id
|
||||
|
||||
@strawberry.mutation
|
||||
def update_schedule(self, id_: int, day_start: int, day_end: int, hour_start: int, hour_end: int,
|
||||
minute_start: int, minute_end: int) -> bool:
|
||||
sync_engine = connect()
|
||||
with Session(sync_engine) as session:
|
||||
schedule = session.query(Schedule).get(id_)
|
||||
schedule.day_start = day_start
|
||||
schedule.day_end = day_end
|
||||
schedule.hour_start = hour_start
|
||||
schedule.hour_end = hour_end
|
||||
schedule.minute_start = minute_start
|
||||
schedule.minute_end = minute_end
|
||||
session.commit()
|
||||
return True
|
||||
|
||||
@strawberry.mutation
|
||||
def create_schedule(self, user_id: int, day_start: int, day_end: int, hour_start: int, hour_end: int,
|
||||
minute_start: int, minute_end: int) -> int:
|
||||
sync_engine = connect()
|
||||
with (Session(sync_engine) as session):
|
||||
user = session.query(User).get(user_id)
|
||||
if not user:
|
||||
return 0
|
||||
schedule = Schedule(user_id=user_id, day_start=day_start, day_end=day_end, hour_start=hour_start,
|
||||
hour_end=hour_end, minute_start=minute_start, minute_end=minute_end)
|
||||
session.add_all([schedule])
|
||||
session.commit()
|
||||
return schedule.id
|
||||
|
||||
@strawberry.mutation
|
||||
def remove_user(self, id_: int) -> bool:
|
||||
sync_engine = connect()
|
||||
@@ -142,6 +212,16 @@ class Mutation:
|
||||
session.commit()
|
||||
return True
|
||||
|
||||
@strawberry.mutation
|
||||
def remove_schedule(self, id_: int) -> bool:
|
||||
sync_engine = connect()
|
||||
with (Session(sync_engine) as session):
|
||||
schedule = session.query(Schedule).get(id_)
|
||||
if schedule:
|
||||
session.delete(schedule)
|
||||
session.commit()
|
||||
return True
|
||||
|
||||
|
||||
def init():
|
||||
sync_engine = connect()
|
||||
@@ -154,6 +234,7 @@ def init():
|
||||
bndname="bnd127",
|
||||
newbnd=True,
|
||||
active=True,
|
||||
upstream=False
|
||||
)
|
||||
bnd128 = User(
|
||||
username="bnd128",
|
||||
@@ -161,12 +242,14 @@ def init():
|
||||
bndname="bnd128",
|
||||
newbnd=True,
|
||||
active=True,
|
||||
upstream=False
|
||||
)
|
||||
session.add_all([bnd127, bnd128])
|
||||
session.commit()
|
||||
|
||||
|
||||
def main():
|
||||
init()
|
||||
uvicorn.run("main:app", port=9000, log_level="info")
|
||||
|
||||
|
||||
@@ -174,7 +257,7 @@ schema = strawberry.Schema(query=Query, mutation=Mutation)
|
||||
|
||||
graphql_app = GraphQLRouter(schema, graphiql=True)
|
||||
|
||||
app = FastAPI()
|
||||
app = FastAPI(root_path="/graphql")
|
||||
app.add_middleware(CORSMiddleware,
|
||||
allow_origins=['http://127.0.0.1'],
|
||||
allow_credentials=True,
|
||||
|
||||
Reference in New Issue
Block a user